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
120
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
121
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
122
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
123
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
130
NSwag.CodeGeneration.TypeScript
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
133
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
120
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
122
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
123
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
125
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
128
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
130
NSwag.CodeGeneration.TypeScript
NSwag: The Swagger API toolchain for .NET and TypeScript
131
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
120
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
128
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
130
NSwag.Commands
NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
133
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
123
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
124
NSwag.Commands
NSwag: The Swagger API toolchain for .NET and TypeScript
129

.NET Framework 4.6.2

.NET 8.0

.NET Standard 2.0

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