NJsonSchema.CodeGeneration.TypeScript 11.6.1

NJsonSchema for .NET

NSwag | NJsonSchema | Apimundo | Namotion.Reflection

Azure DevOps Nuget Discord StackOverflow Wiki Apimundo

NJsonSchema is a .NET library to read, generate and validate JSON Schema draft v4+ schemas. The library can read a schema from a file or string and validate JSON data against it. A schema can also be generated from an existing .NET class. With the code generation APIs you can generate C# and TypeScript classes or interfaces from a schema.

The library uses Json.NET to read and write JSON data and Namotion.Reflection for additional .NET reflection APIs.

NuGet packages:

Preview NuGet Feed: https://www.myget.org/F/njsonschema/api/v3/index.json

Features:

NJsonSchema is heavily used in NSwag, a Swagger API toolchain for .NET which generates client code for Web API services. NSwag also provides command line tools to use the NJsonSchema's JSON Schema generator (command types2swagger).

The project is developed and maintained by Rico Suter and other contributors.

Some code generators can directly be used via the Apimundo service.

NJsonSchema usage

The JsonSchema class can be used as follows:

var schema = JsonSchema.FromType<Person>();
var schemaData = schema.ToJson();
var errors = schema.Validate("{...}");

foreach (var error in errors)
    Console.WriteLine(error.Path + ": " + error.Kind);

schema = await JsonSchema.FromJsonAsync(schemaData);

The Person class:

public class Person
{
    [Required]
    public string FirstName { get; set; }

    public string MiddleName { get; set; }

    [Required]
    public string LastName { get; set; }

    public Gender Gender { get; set; }

    [Range(2, 5)]
    public int NumberWithRange { get; set; }

    public DateTime Birthday { get; set; }

    public Company Company { get; set; }

    public Collection<Car> Cars { get; set; }
}

public enum Gender
{
    Male,
    Female
}

public class Car
{
    public string Name { get; set; }

    public Company Manufacturer { get; set; }
}

public class Company
{
    public string Name { get; set; }
}

The generated JSON schema data stored in the schemaData variable:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Person",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "FirstName",
    "LastName"
  ],
  "properties": {
    "FirstName": {
      "type": "string",
      "minLength": 1
    },
    "MiddleName": {
      "type": [
        "null",
        "string"
      ]
    },
    "LastName": {
      "type": "string",
      "minLength": 1
    },
    "Gender": {
      "$ref": "#/definitions/Gender"
    },
    "NumberWithRange": {
      "type": "integer",
      "format": "int32",
      "maximum": 5.0,
      "minimum": 2.0
    },
    "Birthday": {
      "type": "string",
      "format": "date-time"
    },
    "Company": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/definitions/Company"
        }
      ]
    },
    "Cars": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/definitions/Car"
      }
    }
  },
  "definitions": {
    "Gender": {
      "type": "integer",
      "description": "",
      "x-enumNames": [
        "Male",
        "Female"
      ],
      "enum": [
        0,
        1
      ]
    },
    "Company": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Name": {
          "type": [
            "null",
            "string"
          ]
        }
      }
    },
    "Car": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Name": {
          "type": [
            "null",
            "string"
          ]
        },
        "Manufacturer": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/Company"
            }
          ]
        }
      }
    }
  }
}

NJsonSchema.CodeGeneration usage

The NJsonSchema.CodeGeneration can be used to generate C# or TypeScript code from a JSON schema:

var generator = new CSharpGenerator(schema);
var file = generator.GenerateFile();

The file variable now contains the C# code for all the classes defined in the JSON schema.

TypeScript

The previously generated JSON Schema would generate the following TypeScript interfaces.

Settings:

new TypeScriptGeneratorSettings { TypeStyle = TypeScriptTypeStyle.Interface, TypeScriptVersion = 4.3m }

Output:

export enum Gender {
    Male = 0, 
    Female = 1, 
}

export interface Company {
    Name: string | undefined;
}

export interface Car {
    Name: string | undefined;
    Manufacturer: Company | undefined;
}

export interface Person {
    FirstName: string;
    MiddleName: string | undefined;
    LastName: string;
    Gender: Gender;
    NumberWithRange: number;
    Birthday: Date;
    Company: Company | undefined;
    Cars: Car[] | undefined;
}

... and the following TypeScript classes.

Settings:

new TypeScriptGeneratorSettings { TypeStyle = TypeScriptTypeStyle.Class, TypeScriptVersion = 4.3m }

Output:

export enum Gender {
    Male = 0, 
    Female = 1, 
}

export class Company implements ICompany {
    name: string | undefined;

    constructor(data?: ICompany) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(data?: any) {
        if (data) {
            this.name = data["Name"];
        }
    }

    static fromJS(data: any): Company {
        let result = new Company();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        return data; 
    }
}

export interface ICompany {
    name: string | undefined;
}

export class Car implements ICar {
    name: string | undefined;
    manufacturer: Company | undefined;

    constructor(data?: ICar) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(data?: any) {
        if (data) {
            this.name = data["Name"];
            this.manufacturer = data["Manufacturer"] ? Company.fromJS(data["Manufacturer"]) : <any>undefined;
        }
    }

    static fromJS(data: any): Car {
        let result = new Car();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["Manufacturer"] = this.manufacturer ? this.manufacturer.toJSON() : <any>undefined;
        return data; 
    }
}

export interface ICar {
    name: string | undefined;
    manufacturer: Company | undefined;
}

export class Person implements IPerson {
    firstName: string;
    middleName: string | undefined;
    lastName: string;
    gender: Gender;
    numberWithRange: number;
    birthday: Date;
    company: Company | undefined;
    cars: Car[] | undefined;

    constructor(data?: IPerson) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(data?: any) {
        if (data) {
            this.firstName = data["FirstName"];
            this.middleName = data["MiddleName"];
            this.lastName = data["LastName"];
            this.gender = data["Gender"];
            this.numberWithRange = data["NumberWithRange"];
            this.birthday = data["Birthday"] ? new Date(data["Birthday"].toString()) : <any>undefined;
            this.company = data["Company"] ? Company.fromJS(data["Company"]) : <any>undefined;
            if (data["Cars"] && data["Cars"].constructor === Array) {
                this.cars = [];
                for (let item of data["Cars"])
                    this.cars.push(Car.fromJS(item));
            }
        }
    }

    static fromJS(data: any): Person {
        let result = new Person();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["FirstName"] = this.firstName;
        data["MiddleName"] = this.middleName;
        data["LastName"] = this.lastName;
        data["Gender"] = this.gender;
        data["NumberWithRange"] = this.numberWithRange;
        data["Birthday"] = this.birthday ? this.birthday.toISOString() : <any>undefined;
        data["Company"] = this.company ? this.company.toJSON() : <any>undefined;
        if (this.cars && this.cars.constructor === Array) {
            data["Cars"] = [];
            for (let item of this.cars)
                data["Cars"].push(item.toJSON());
        }
        return data; 
    }
}

export interface IPerson {
    firstName: string;
    middleName: string | undefined;
    lastName: string;
    gender: Gender;
    numberWithRange: number;
    birthday: Date;
    company: Company | undefined;
    cars: Car[] | undefined;
}

NJsonSchema.SampleJsonSchemaGenerator usage

The NJsonSchema.SampleJsonSchemaGenerator can be used to generate a JSON Schema from sample JSON data:

JSON Schema Specification

By default, the NJsonSchema.SampleJsonSchemaGenerator generates a JSON Schema based on the JSON Schema specification. See: JSON Schema Specification

var generator = new SampleJsonSchemaGenerator(new SampleJsonSchemaGeneratorSettings());

var schema = generator.Generate("{...}");

Input:

{
  "int": 1,
  "float": 340282346638528859811704183484516925440.0,
  "str": "abc",
  "bool": true,
  "date": "2012-07-19",
  "datetime": "2012-07-19 10:11:11",
  "timespan": "10:11:11"
}

Output:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "int": {
      "type": "integer"
    },
    "float": {
      "type": "number"
    },
    "str": {
      "type": "string"
    },
    "bool": {
      "type": "boolean"
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "datetime": {
      "type": "string",
      "format": "date-time"
    },
    "timespan": {
      "type": "string",
      "format": "duration"
    }
  }
}

OpenApi Specification

To generate a JSON Schema for OpenApi, provide the SchemaType.OpenApi3 in the settings. See: OpenApi Specification

var generator = new SampleJsonSchemaGenerator(new SampleJsonSchemaGeneratorSettings { SchemaType = SchemaType.OpenApi3 });

var schema = generator.Generate("{...}");

Input:

{
  "int": 12345,
  "long": 1736347656630,
  "float": 340282346638528859811704183484516925440.0,
  "double": 340282346638528859811704183484516925440123456.0,
}

Output:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "int": {
      "type": "integer",
      "format": "int32"
    },
    "long": {
      "type": "integer",
      "format": "int64"
    },
    "float": {
      "type": "number",
      "format": "float"
    },
    "double": {
      "type": "number",
      "format": "double"
    }
  }
}

Final notes

Applications which use the library:

Showing the top 20 packages that depend on NJsonSchema.CodeGeneration.TypeScript.

Packages Downloads
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
153
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
155
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
164
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
153
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
154
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
158
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
160
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
161
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
153
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
155
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
160
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
152
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
153
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
154
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
157

.NET Framework 4.6.2

.NET 8.0

.NET Standard 2.0

Version Downloads Last updated
11.6.1 42 04/20/2026
11.6.0 60 04/08/2026
11.5.2 87 11/05/2025
11.5.1 98 10/02/2025
11.5.0 85 09/16/2025
11.4.0 123 07/31/2025
11.3.2 110 04/29/2025
11.3.1 103 04/29/2025
11.3.0 129 04/29/2025
11.2.0 126 03/29/2025
11.1.0 120 11/22/2024
11.0.2 143 07/20/2024
11.0.1 118 07/20/2024
11.0.0 134 07/20/2024
11.0.0-preview008 139 07/20/2024
11.0.0-preview007 131 07/20/2024
11.0.0-preview006 137 07/20/2024
11.0.0-preview005 128 07/20/2024
11.0.0-preview004 134 07/20/2024
11.0.0-preview003 145 07/20/2024
11.0.0-preview002 144 07/20/2024
11.0.0-preview001 145 07/20/2024
10.9.0 130 07/20/2024
10.8.0 143 07/20/2024
10.7.2 121 07/20/2024
10.7.1 130 07/20/2024
10.7.0 129 07/20/2024
10.6.10 120 07/20/2024
10.6.9 129 07/20/2024
10.6.8 131 07/20/2024
10.6.7 126 07/20/2024
10.6.6 129 07/20/2024
10.6.5 125 07/20/2024
10.6.4 137 07/20/2024
10.6.3 116 07/20/2024
10.6.2 142 07/20/2024
10.6.1 136 07/20/2024
10.6.0 139 07/20/2024
10.5.2 141 07/20/2024
10.5.1 131 07/20/2024
10.5.0 132 07/20/2024
10.4.6 140 07/20/2024
10.4.5 125 07/20/2024
10.4.4 145 07/20/2024
10.4.3 134 07/20/2024
10.4.2 127 07/20/2024
10.4.1 144 07/20/2024
10.4.0 136 07/20/2024
10.3.11 119 07/20/2024
10.3.10 122 07/20/2024
10.3.9 128 07/20/2024
10.3.8 151 07/20/2024
10.3.7 127 07/20/2024
10.3.6 137 07/20/2024
10.3.5 138 07/20/2024
10.3.4 122 07/20/2024
10.3.3 131 07/20/2024
10.3.2 150 07/20/2024
10.3.1 118 07/20/2024
10.3.0 128 07/20/2024
10.2.2 132 07/20/2024
10.2.1 132 07/20/2024
10.2.0 117 07/20/2024
10.1.26 144 07/20/2024
10.1.25 134 07/20/2024
10.1.24 139 07/20/2024
10.1.23 127 07/20/2024
10.1.22 132 07/20/2024
10.1.21 130 07/20/2024
10.1.20 164 07/20/2024
10.1.19 150 07/20/2024
10.1.18 123 07/20/2024
10.1.17 145 07/20/2024
10.1.16 139 07/20/2024
10.1.15 144 07/20/2024
10.1.14 131 07/20/2024
10.1.13 133 07/20/2024
10.1.12 125 07/20/2024
10.1.11 157 07/20/2024
10.1.10 140 07/20/2024
10.1.9 136 07/20/2024
10.1.8 126 07/20/2024
10.1.7 129 07/20/2024
10.1.6 141 07/20/2024
10.1.5 152 07/20/2024
10.1.4 130 07/20/2024
10.1.3 114 07/20/2024
10.1.2 128 07/20/2024
10.1.1 141 07/20/2024
10.1.0 131 07/20/2024
10.0.28 127 07/20/2024
10.0.27 156 07/20/2024
10.0.26 136 07/20/2024
10.0.25 159 07/20/2024
10.0.24 155 07/20/2024
10.0.23 135 07/20/2024
10.0.22 152 07/20/2024
10.0.21 122 07/20/2024
10.0.20 131 07/20/2024
10.0.19 133 07/20/2024
10.0.18 147 07/20/2024
10.0.17 125 07/20/2024
10.0.16 118 07/20/2024
10.0.15 136 07/20/2024
10.0.14 141 07/20/2024
10.0.13 128 07/20/2024
10.0.12 171 07/20/2024
10.0.11 128 07/20/2024
10.0.10 127 07/20/2024
10.0.9 133 07/20/2024
10.0.8 129 07/20/2024
10.0.7 136 07/20/2024
10.0.6 134 07/20/2024
10.0.5 147 07/20/2024
10.0.4 145 07/20/2024
10.0.3 119 07/20/2024
10.0.1 127 07/20/2024
10.0.0 136 07/20/2024
9.14.1 145 07/20/2024
9.14.0 133 07/20/2024
9.13.37 136 07/20/2024
9.13.36 129 07/20/2024
9.13.35 130 07/20/2024
9.13.34 140 07/20/2024
9.13.33 134 07/20/2024
9.13.32 119 07/20/2024
9.13.31 154 07/20/2024
9.13.30 122 07/20/2024
9.13.29 144 07/20/2024
9.13.28 120 07/20/2024
9.13.27 143 07/20/2024
9.13.26 141 07/20/2024
9.13.25 128 07/20/2024
9.13.24 128 07/20/2024
9.13.23 125 07/20/2024
9.13.22 133 07/20/2024
9.13.19 131 07/20/2024
9.13.18 120 07/20/2024
9.13.17 144 07/20/2024
9.13.16 120 07/20/2024
9.13.15 126 07/20/2024
9.13.14 121 07/20/2024
9.13.13 136 07/20/2024
9.13.12 125 07/20/2024
9.13.11 143 07/20/2024
9.13.10 143 07/20/2024
9.13.9 145 07/20/2024
9.13.8 121 07/20/2024
9.13.7 121 07/20/2024
9.13.5 119 07/20/2024
9.13.4 126 07/20/2024
9.13.3 120 07/20/2024
9.13.2 133 07/20/2024
9.13.1 134 07/20/2024
9.13.0 145 07/20/2024
9.12.7 120 07/20/2024
9.12.6 136 07/20/2024
9.12.5 122 07/20/2024
9.12.4 117 07/20/2024
9.12.3 153 07/20/2024
9.12.2 134 07/20/2024
9.12.1 122 07/20/2024
9.12.0 130 07/20/2024
9.11.1 141 07/20/2024
9.11.0 140 07/20/2024
9.10.75 148 07/20/2024
9.10.74 157 07/20/2024
9.10.73 145 07/20/2024
9.10.72 137 07/20/2024
9.10.71 128 07/20/2024
9.10.70 139 07/20/2024
9.10.69 130 07/20/2024
9.10.68 153 07/20/2024
9.10.67 150 07/20/2024
9.10.66 132 07/20/2024
9.10.65 132 07/20/2024
9.10.64 142 07/20/2024
9.10.63 133 07/20/2024
9.10.62 138 07/20/2024
9.10.61 131 07/20/2024
9.10.60 137 07/20/2024
9.10.59 126 07/20/2024
9.10.58 132 07/20/2024
9.10.57 129 07/20/2024
9.10.56 137 07/20/2024
9.10.55 132 07/20/2024
9.10.54 129 07/20/2024
9.10.53 253 07/20/2024
9.10.52 122 07/20/2024
9.10.51 132 07/20/2024
9.10.50 144 07/20/2024
9.10.49 122 07/20/2024
9.10.48 137 07/20/2024
9.10.47 125 07/20/2024
9.10.46 136 07/20/2024
9.10.45 134 07/20/2024
9.10.44 139 07/20/2024
9.10.43 143 07/20/2024
9.10.42 143 07/20/2024
9.10.41 128 07/20/2024
9.10.40 134 07/20/2024
9.10.39 134 07/20/2024
9.10.38 134 07/20/2024
9.10.37 141 07/20/2024
9.10.36 129 07/20/2024
9.10.35 147 07/20/2024
9.10.34 131 07/20/2024
9.10.33 162 07/20/2024
9.10.32 129 07/20/2024
9.10.31 139 07/20/2024
9.10.30 148 07/20/2024
9.10.29 141 07/20/2024
9.10.28 145 07/20/2024
9.10.27 147 07/20/2024
9.10.26 131 07/20/2024
9.10.25 128 07/20/2024
9.10.24 121 07/20/2024
9.10.23 143 07/20/2024
9.10.22 126 07/20/2024
9.10.21 144 07/20/2024
9.10.20 139 07/20/2024
9.10.19 117 07/20/2024
9.10.18 129 07/20/2024
9.10.17 144 07/20/2024
9.10.16 124 07/20/2024
9.10.15 133 07/20/2024
9.10.14 134 07/20/2024
9.10.13 140 07/20/2024
9.10.12 129 07/20/2024
9.10.11 127 07/20/2024
9.10.10 173 07/20/2024
9.10.9 119 07/20/2024
9.10.8 134 07/20/2024
9.10.7 127 07/20/2024
9.10.6 124 07/20/2024
9.10.5 133 07/20/2024
9.10.4 148 07/20/2024
9.10.3 128 07/20/2024
9.10.2 132 07/20/2024
9.10.1 119 07/20/2024
9.10.0 135 07/20/2024
9.9.17 117 07/20/2024
9.9.16 164 07/20/2024
9.9.15 125 07/20/2024
9.9.14 144 07/20/2024
9.9.13 137 07/20/2024
9.9.12 125 07/20/2024
9.9.11 144 07/20/2024
9.9.10 146 07/20/2024
9.9.9 128 07/20/2024
9.9.8 152 07/20/2024
9.9.7 139 07/20/2024
9.9.6 134 07/20/2024
9.9.5 135 07/20/2024
9.9.4 158 07/20/2024
9.9.3 130 07/20/2024
9.9.2 149 07/20/2024
9.9.1 125 07/20/2024
9.9.0 126 07/20/2024
9.8.3 115 07/20/2024
9.8.2 141 07/20/2024
9.8.1 134 07/20/2024
9.8.0 144 07/20/2024
9.7.7 137 07/20/2024
9.7.6 142 07/20/2024
9.7.5 131 07/20/2024
9.7.3 134 07/20/2024
9.7.2 131 07/20/2024
9.7.1 131 07/20/2024
9.7.0 136 07/20/2024
9.6.5 118 07/20/2024
9.6.4 136 07/20/2024
9.6.3 129 07/20/2024
9.6.2 137 07/20/2024
9.6.1 145 07/20/2024
9.6.0 137 07/20/2024
9.5.4 142 07/20/2024
9.5.3 157 07/20/2024
9.5.2 143 07/20/2024
9.5.1 128 07/20/2024
9.5.0 130 07/20/2024
9.4.10 143 07/20/2024
9.4.9 131 07/20/2024
9.4.8 127 07/20/2024
9.4.7 122 07/20/2024
9.4.6 137 07/20/2024
9.4.5 121 07/20/2024
9.4.4 141 07/20/2024
9.4.3 122 07/20/2024
9.4.2 127 07/20/2024
9.4.1 126 07/20/2024
9.4.0 131 07/20/2024
9.3.2 122 07/20/2024
9.3.1 120 07/20/2024
9.3.0 135 07/20/2024
9.2.5 141 07/20/2024
9.2.4 132 07/20/2024
9.2.3 143 07/20/2024
9.2.2 150 07/20/2024
9.2.1 131 07/20/2024
9.2.0 124 07/20/2024
9.1.13 125 07/20/2024
9.1.12 129 07/20/2024
9.1.11 140 07/20/2024
9.1.10 130 07/20/2024
9.1.9 149 07/20/2024
9.1.8 149 07/20/2024
9.1.7 123 07/20/2024
9.1.6 131 07/20/2024
9.1.5 128 07/20/2024
9.1.4 154 07/20/2024
9.1.3 134 07/20/2024
9.1.2 127 07/20/2024
9.1.1 140 07/20/2024
9.1.0 136 07/20/2024
9.0.0 136 07/20/2024
8.34.6331.29196 147 07/20/2024
8.33.6323.36234 144 07/20/2024
8.32.6319.16954 124 07/20/2024
8.31.6318.20496 135 07/20/2024
8.30.6304.31907 124 07/20/2024
8.29.6304.29598 139 07/20/2024
8.28.6304.29323 139 07/20/2024
8.27.6302.16061 119 07/20/2024
8.26.6300.23803 132 07/20/2024
8.25.6298.25745 126 07/20/2024
8.24.6298.12189 123 07/20/2024
8.23.6298.10833 136 07/20/2024
8.22.6296.25118 121 07/20/2024
8.21.6296.23976 121 07/20/2024
8.20.6296.23156 127 07/20/2024
8.19.6295.40488 139 07/20/2024
8.18.6295.39662 134 07/20/2024
8.17.6295.16512 128 07/20/2024
8.16.6295.13544 113 07/20/2024
8.15.6294.28833 121 07/20/2024
8.14.6289.34377 123 07/20/2024
8.13.6288.31202 124 07/20/2024
8.12.6288.29377 151 07/20/2024
8.11.6284.26878 142 07/20/2024
8.10.6282.29590 130 07/20/2024
8.9.6275.22314 122 07/20/2024
8.8.6270.12850 127 07/20/2024
8.7.6267.38147 128 07/20/2024
8.6.6263.34639 146 07/20/2024
8.5.6255.20272 124 07/20/2024
8.4.6254.24670 120 07/20/2024
8.3.6252.27823 123 07/20/2024
8.2.6249.40706 128 07/20/2024
8.1.6249.15650 131 07/20/2024
8.0.6242.20256 128 07/20/2024