From 5b7d15be9a4972465871cba5a6ed93f3c3830f53 Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Mon, 15 Sep 2025 14:38:57 -0400 Subject: [PATCH] More --- calculator/calc.ts | 418 +-- calculator/standards.json | 5814 ------------------------------------- calculator/test.ts | 14 +- main.ts | 13 +- 4 files changed, 249 insertions(+), 6010 deletions(-) delete mode 100644 calculator/standards.json diff --git a/calculator/calc.ts b/calculator/calc.ts index e9170ce..1f5253f 100644 --- a/calculator/calc.ts +++ b/calculator/calc.ts @@ -1,5 +1,4 @@ -import { Activity, Attribute, attributes, ActivityPerformance, getActivityAttribute, getAttributeActivities, Player, StandardsMap, Levels, Standard, Metrics } from "./util"; -import rawStandards from "./standards.json" assert { type: "json" } +import { Activity, Attribute, attributes, ActivityPerformance, getActivityAttribute, getAttributeActivities, Player, StandardsMap, Levels, Standard, Metrics, Gender } from "./util"; // SOURCES // Squat, Bench, Dead Lift: @@ -18,24 +17,164 @@ type LevelCalculatorConfig = { export class LevelCalculator { cfg: Required; - standardsMap: StandardsMap; + standards: Standards; - public constructor(cfg: LevelCalculatorConfig = {}) { - // initialize config + public constructor(standards: Standards, cfg: LevelCalculatorConfig = {}) { this.cfg = { compressTo: cfg.compressTo ?? 100, expandIters: cfg.expandIters ?? 5 } + this.standards = standards; + } - // initialize standards map - this.standardsMap = rawStandards as StandardsMap; - for (const activity of Object.keys(this.standardsMap) as Activity[]) { - for (const standard of this.standardsMap[activity]) { - const expandedLevels = this.expandLevels(standard.levels, this.cfg.expandIters); - const compressedLevels = this.compressLevels(expandedLevels, this.cfg.compressTo); - standard.levels = compressedLevels; - } + // ------------------------------------------------------------------------------------------------- + // Level calculations (public API) + // ------------------------------------------------------------------------------------------------- + + public calculatePlayerLevel(player: Player, activityPerformances: ActivityPerformance[]): number { + for (const value of Object.values(player)) { + if (!value) + return 0; } + + const attrLevels = this.calculateAllAttributeLevels(player, activityPerformances); + for (const level of Object.values(attrLevels)) { + if (!level) + return 0; + } + + const attrLevelsSum = Object.values(attrLevels).reduce((sum, lvl) => sum + lvl, 0); + return Math.round(attrLevelsSum / Object.keys(attributes).length); + } + + public calculateAllAttributeLevels( + player: Player, + activityPerformances: ActivityPerformance[], + ): Record { + const attrLevels: Record = { + [attributes.STRENGTH]: 0, + [attributes.POWER]: 0, + [attributes.ENDURANCE]: 0, + // [attributes.SPEED]: 0, + [attributes.AGILITY]: 0, + } as const; + + for (const value of Object.values(player)) { + if (!value) + return attrLevels; + } + + (Object.values(attributes) as Attribute[]).forEach((attribute) => { + const attrActivityPerformances = activityPerformances.filter( + (p) => getActivityAttribute(p.activity) === attribute, + ); + attrLevels[attribute] = this.calculateAttributeLevel(attribute, player, attrActivityPerformances); + }); + + return attrLevels; + } + + + public calculateAttributeLevel( + attribute: Attribute, + player: Player, + activityPerformances: ActivityPerformance[], + ): number { + // must be activities of the given attribute + if (activityPerformances.some((p) => getActivityAttribute(p.activity) !== attribute)) { + throw new Error("Wrong activity performance attribute"); + } + + // must perform all of an attributes activities + for (const activity of getAttributeActivities(attribute)) { + const filteredActivites = activityPerformances.map((p) => p.activity); + if (!filteredActivites.includes(activity)) + return 0; + } + + // must have all activties using a valid performance value (> 0) + for (const activityPerformance of activityPerformances) { + if (activityPerformance.performance <= 0) + return 0 + } + + const activityLevels = activityPerformances.map((p) => { + const interpolatedStandard = this.getInterpolatedStandard(p.activity, player.metrics); + return this.findLevel(interpolatedStandard, p.performance); + }); + + const activityLevelsAvg = Math.round( + activityLevels.reduce((sum, curr) => sum + curr, 0) / activityLevels.length, + ); + + return activityLevelsAvg; + } + + // ------------------------------------------------------------------------------------------------- + // Standards interpolation (heavy math bits) + // ------------------------------------------------------------------------------------------------- + + private getInterpolatedStandard( + activity: Activity, + metrics: Metrics, + ): Standard { + const interpolateByWeight = (targetAge: number): Levels => { + // check if this is a weight calibrated activity + const standard = this.standards.byActivity(activity).getOne(); + if (standard.metrics.weight === -1) return standard.levels; + + const { upper: upperAgeWeightStandard, lower: lowerAgeWeightStandard } = this.standards + .byActivity(activity) + .byGender(metrics.gender) + .byAge(targetAge) + .getNearest("weight", metrics.weight); + const weightLower = lowerAgeWeightStandard.metrics.weight; + const weightUpper = upperAgeWeightStandard.metrics.weight; + + let weightRatio = weightUpper === weightLower ? 1 : (metrics.weight - weightLower) / (weightUpper - weightLower); + weightRatio = Math.max(0, Math.min(1, weightRatio)); + + return this.interpolateLevels(lowerAgeWeightStandard.levels, upperAgeWeightStandard.levels, weightRatio); + } + + // Find nearest age standards + const { lower: lowerAgeStandard, upper: upperAgeStandard } = this.standards + .byActivity(activity) + .byGender(metrics.gender) + .getNearest("age", metrics.age); + + const ageLower = lowerAgeStandard.metrics.age; + const ageUpper = upperAgeStandard.metrics.age; + + // Interpolate by age and weight + let ageRatio = ageUpper === ageLower ? 1 : (metrics.age - ageLower) / (ageUpper - ageLower); + ageRatio = Math.max(0, Math.min(1, ageRatio)); + const interpolatedLevels = this.interpolateLevels( + interpolateByWeight(ageLower), + interpolateByWeight(ageUpper), + ageRatio + ); + + return { + metrics: metrics, + levels: interpolatedLevels + }; + } + + private interpolateLevels( + lower: Levels, + upper: Levels, + ratio: number, + ): Levels { + if (Object.keys(lower).length !== Object.keys(upper).length) + throw new Error("Cannot interpolate between varying number of levels"); + + function lerp(lvl: number): number { + return (lower[lvl] as number) + ((upper[lvl] as number) - (lower[lvl] as number)) * ratio; + } + + const interpolatedLevels = Object.keys(lower).map(lvl => lerp(+lvl)); + return interpolatedLevels; } // ------------------------------------------------------------------------------------------------- @@ -55,45 +194,74 @@ export class LevelCalculator { } return resultLevel; } +} - private findNearestStandards(standards: Standard[], target: number, getValue: (x: Metrics) => number) { - const lowerStandard = [...standards] - .sort((a, b) => getValue(a.metrics) - getValue(b.metrics)) - .reverse() - .find((s) => getValue(s.metrics) <= target) ?? standards.at(0)!; - const upperStandard = [...standards] - .sort((a, b) => getValue(a.metrics) - getValue(b.metrics)) - .find((s) => getValue(s.metrics) >= target) ?? standards.at(-1)!; - return { lowerStandard, upperStandard }; +export class Standards { + private standardsMap: StandardsMap; + + constructor(standardsMap: StandardsMap) { + this.standardsMap = standardsMap; + for (const activity of Object.keys(this.standardsMap) as Activity[]) { + for (const standard of this.standardsMap[activity]) { + const expandedLevels = this.expandLevels(standard.levels, 5); + const compressedLevels = this.compressLevels(expandedLevels, 100); + standard.levels = compressedLevels; + } + } } - private compressLevels( - levels: Levels, - targetLevelsAmount: number, - ): Levels { - const levelsAmount = Object.keys(levels).length; - if (levelsAmount < targetLevelsAmount) { - throw new Error( - "Target levels amount must be greater than or equal to the current levels amount", - ); + public byActivity(activity: Activity) { + const self = this; + + const state: { + gender?: Gender; + age?: number; + weight?: number; + } = {}; + + const execMethods = { + getAll: function() { + let filtered = [...self.standardsMap[activity]]; + if (state.gender) + filtered = filtered.filter((s) => s.metrics.gender === state.gender); + if (state.age) + filtered = filtered.filter((s) => s.metrics.age === state.age); + if (state.weight) + filtered = filtered.filter((s) => s.metrics.weight === state.weight); + return filtered; + }, + getOne: function() { + return execMethods.getAll()[0]; + }, + getNearest(metric: "age" | "weight", target: number) { + const standards = execMethods.getAll(); + const lower = [...standards] + .sort((a, b) => a.metrics[metric] - b.metrics[metric]) + .reverse() + .find((s) => s.metrics[metric] <= target) ?? standards.at(0)!; + const upper = [...standards] + .sort((a, b) => a.metrics[metric] - b.metrics[metric]) + .find((s) => s.metrics[metric] >= target) ?? standards.at(-1)!; + return { lower, upper }; + } + }; + + const byGender = (gender: Gender) => { + state.gender = gender; + return { byAge, ...execMethods }; } - const ratio = levelsAmount / targetLevelsAmount; - const compressedLevels: Levels = {}; - - for (let i = 0; i < targetLevelsAmount; ++i) { - const ratioIndex = i * ratio; - const lowerIndex = Math.floor(ratioIndex); - const upperIndex = Math.ceil(ratioIndex); - - const lowerValue = levels[lowerIndex + 1]; - const upperValue = levels[upperIndex + 1]; - - const weight = ratioIndex - lowerIndex; - compressedLevels[i + 1] = lowerValue + (upperValue - lowerValue) * weight; + const byAge = (age: number) => { + state.age = age; + return { byWeight, ...execMethods }; } - return compressedLevels; + const byWeight = (weight: number) => { + state.weight = weight; + return { ...execMethods }; + } + + return { byGender, ...execMethods } } private expandLevels( @@ -119,150 +287,32 @@ export class LevelCalculator { return this.expandLevels(newLevels, i - 1); } - // ------------------------------------------------------------------------------------------------- - // Standards interpolation (heavy math bits) - // ------------------------------------------------------------------------------------------------- - - private interpolateLevels( - lower: Levels, - upper: Levels, - ratio: number, + private compressLevels( + levels: Levels, + targetLevel: number, ): Levels { - if (Object.keys(lower).length !== Object.keys(upper).length) - throw new Error("Cannot interpolate between varying number of levels"); - - function lerp(lvl: number): number { - return (lower[lvl] as number) + ((upper[lvl] as number) - (lower[lvl] as number)) * ratio; - } - - const interpolatedLevels = Object.keys(lower).map(lvl => lerp(+lvl)); - return interpolatedLevels; - } - - private getInterpolatedActivityStandard( - activity: Activity, - metrics: Metrics, - ): Standard { - const interpolatedStandard: Standard = { - metrics: metrics, - levels: {} - }; - - // Filter by gender - const standardsByGender = this.standardsMap[activity] - .filter(a => a.metrics.gender === metrics.gender); - if (standardsByGender.length === 0) return interpolatedStandard; - - // Find nearest age standards - const { lowerStandard, upperStandard } = this.findNearestStandards(standardsByGender, metrics.age, m => m.age); - const ageLower = lowerStandard.metrics.age; - const ageUpper = upperStandard.metrics.age; - - // Interpolate by weight - const interpolateByWeight = (targetAge: number): Levels => { - const ageFilteredStandards = standardsByGender.filter((s) => s.metrics.age === targetAge); - if (ageFilteredStandards[0].metrics.weight === -1) return ageFilteredStandards[0].levels; - - const { upperStandard, lowerStandard } = this.findNearestStandards(ageFilteredStandards, metrics.weight, m => m.weight); - const weightLower = lowerStandard.metrics.weight; - const weightUpper = upperStandard.metrics.weight; - - let weightRatio = weightUpper === weightLower ? 1 : (metrics.weight - weightLower) / (weightUpper - weightLower); - weightRatio = Math.max(0, Math.min(1, weightRatio)); - - return this.interpolateLevels(lowerStandard.levels, upperStandard.levels, weightRatio); - } - // Interpolate by age - let ageRatio = ageUpper === ageLower ? 1 : (metrics.age - ageLower) / (ageUpper - ageLower); - ageRatio = Math.max(0, Math.min(1, ageRatio)); - interpolatedStandard.levels = this.interpolateLevels( - interpolateByWeight(ageLower), - interpolateByWeight(ageUpper), - ageRatio - ); - - return interpolatedStandard; - } - - // ------------------------------------------------------------------------------------------------- - // Level calculations (public API) - // ------------------------------------------------------------------------------------------------- - - public calcAttributeLevel( - attribute: Attribute, - player: Player, - activityPerformances: ActivityPerformance[], - ): number { - // must be activities of the given attribute - if (activityPerformances.some((p) => getActivityAttribute(p.activity) !== attribute)) { - throw new Error("Wrong activity performance attribute"); - } - - // must perform all of an attributes activities - for (const activity of getAttributeActivities(attribute)) { - const filteredActivites = activityPerformances.map((p) => p.activity); - if (!filteredActivites.includes(activity)) - return 0; - } - - // must have all activties using a valid performance value (> 0) - for (const activityPerformance of activityPerformances) { - if (activityPerformance.performance <= 0) - return 0 - } - - const activityLevels = activityPerformances.map((p) => { - const interpolatedStandard = this.getInterpolatedActivityStandard(p.activity, player.metrics); - return this.findLevel(interpolatedStandard, p.performance); - }); - - const activityLevelsAvg = Math.round( - activityLevels.reduce((sum, curr) => sum + curr, 0) / activityLevels.length, - ); - - return activityLevelsAvg; - } - - public calcAllAttributeLevels( - player: Player, - activityPerformances: ActivityPerformance[], - ): Record { - const attrLevels: Record = { - [attributes.STRENGTH]: 0, - [attributes.POWER]: 0, - [attributes.ENDURANCE]: 0, - // [attributes.SPEED]: 0, - [attributes.AGILITY]: 0, - } as const; - - for (const value of Object.values(player)) { - if (!value) - return attrLevels; - } - - (Object.values(attributes) as Attribute[]).forEach((attribute) => { - const attrActivityPerformances = activityPerformances.filter( - (p) => getActivityAttribute(p.activity) === attribute, + const levelsAmount = Object.keys(levels).length; + if (levelsAmount < targetLevel) { + throw new Error( + "Target levels amount must be greater than or equal to the current levels amount", ); - attrLevels[attribute] = this.calcAttributeLevel(attribute, player, attrActivityPerformances); - }); - - return attrLevels; - } - - public calcPlayerLevel(player: Player, activityPerformances: ActivityPerformance[]): number { - for (const value of Object.values(player)) { - if (!value) - return 0; } - const attrLevels = this.calcAllAttributeLevels(player, activityPerformances); - for (const level of Object.values(attrLevels)) { - if (!level) - return 0; + const ratio = levelsAmount / targetLevel; + const compressedLevels: Levels = {}; + + for (let i = 0; i < targetLevel; ++i) { + const ratioIndex = i * ratio; + const lowerIndex = Math.floor(ratioIndex); + const upperIndex = Math.ceil(ratioIndex); + + const lowerValue = levels[lowerIndex + 1]; + const upperValue = levels[upperIndex + 1]; + + const weight = ratioIndex - lowerIndex; + compressedLevels[i + 1] = lowerValue + (upperValue - lowerValue) * weight; } - const attrLevelsSum = Object.values(attrLevels).reduce((sum, lvl) => sum + lvl, 0); - return Math.round(attrLevelsSum / Object.keys(attributes).length); + return compressedLevels; } } diff --git a/calculator/standards.json b/calculator/standards.json deleted file mode 100644 index 89a52ee..0000000 --- a/calculator/standards.json +++ /dev/null @@ -1,5814 +0,0 @@ -{ - "Back Squat": [ - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 34, - "2": 59, - "3": 78, - "4": 107, - "5": 136 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 38, - "2": 65, - "3": 87, - "4": 120, - "5": 158 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 80, - "3": 106, - "4": 146, - "5": 192 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 49, - "2": 85, - "3": 113, - "4": 155, - "5": 205 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 52, - "2": 89, - "3": 118, - "4": 162, - "5": 209 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 90, - "3": 120, - "4": 165, - "5": 213 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 56, - "2": 97, - "3": 129, - "4": 177, - "5": 219 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 38, - "2": 65, - "3": 87, - "4": 120, - "5": 153 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 78, - "3": 104, - "4": 143, - "5": 189 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 51, - "2": 87, - "3": 116, - "4": 160, - "5": 210 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 58, - "2": 98, - "3": 130, - "4": 179, - "5": 236 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 57, - "2": 98, - "3": 131, - "4": 180, - "5": 232 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 70, - "2": 120, - "3": 160, - "4": 220, - "5": 285 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 68, - "2": 116, - "3": 164, - "4": 226, - "5": 282 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 40, - "2": 68, - "3": 91, - "4": 125, - "5": 159 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 82, - "3": 110, - "4": 151, - "5": 199 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 91, - "3": 122, - "4": 167, - "5": 220 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 58, - "2": 99, - "3": 132, - "4": 181, - "5": 238 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 62, - "2": 106, - "3": 142, - "4": 195, - "5": 252 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 66, - "2": 113, - "3": 150, - "4": 206, - "5": 267 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 74, - "2": 127, - "3": 169, - "4": 232, - "5": 291 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 38, - "2": 65, - "3": 86, - "4": 118, - "5": 142 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 43, - "2": 73, - "3": 98, - "4": 134, - "5": 161 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 79, - "3": 105, - "4": 144, - "5": 173 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 92, - "3": 123, - "4": 169, - "5": 203 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 56, - "2": 97, - "3": 129, - "4": 177, - "5": 213 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 61, - "2": 104, - "3": 139, - "4": 191, - "5": 229 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 66, - "2": 113, - "3": 150, - "4": 206, - "5": 248 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 32, - "2": 55, - "3": 73, - "4": 100, - "5": 132 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 37, - "2": 64, - "3": 85, - "4": 117, - "5": 154 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 42, - "2": 71, - "3": 95, - "4": 131, - "5": 172 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 80, - "3": 106, - "4": 146, - "5": 192 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 86, - "3": 114, - "4": 157, - "5": 207 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 90, - "3": 120, - "4": 165, - "5": 218 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 93, - "3": 124, - "4": 171, - "5": 225 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 23, - "2": 40, - "3": 53, - "4": 73, - "5": 96 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 33, - "2": 57, - "3": 76, - "4": 105, - "5": 138 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 40, - "2": 68, - "3": 91, - "4": 125, - "5": 165 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 43, - "2": 74, - "3": 98, - "4": 135, - "5": 178 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 47, - "2": 80, - "3": 107, - "4": 147, - "5": 194 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 83, - "3": 110, - "4": 151, - "5": 199 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 86, - "3": 115, - "4": 158, - "5": 208 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 22, - "2": 38, - "3": 51, - "4": 70, - "5": 92 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 30, - "2": 51, - "3": 68, - "4": 94, - "5": 123 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 33, - "2": 56, - "3": 75, - "4": 103, - "5": 136 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 34, - "2": 59, - "3": 78, - "4": 107, - "5": 141 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 35, - "2": 59, - "3": 79, - "4": 109, - "5": 143 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 35, - "2": 60, - "3": 80, - "4": 110, - "5": 145 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 62, - "3": 82, - "4": 113, - "5": 149 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 18, - "2": 30, - "3": 40, - "4": 55, - "5": 73 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 24, - "2": 40, - "3": 54, - "4": 74, - "5": 97 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 26, - "2": 44, - "3": 59, - "4": 81, - "5": 107 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 27, - "2": 46, - "3": 62, - "4": 85, - "5": 112 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 28, - "2": 46, - "3": 62, - "4": 86, - "5": 113 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 28, - "2": 47, - "3": 63, - "4": 87, - "5": 115 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 28, - "2": 49, - "3": 65, - "4": 89, - "5": 117 - } - }, - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 32, - "3": 44, - "4": 61, - "5": 84 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 41, - "3": 56, - "4": 77, - "5": 106 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 32, - "2": 44, - "3": 61, - "4": 84, - "5": 116 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 48, - "3": 66, - "4": 91, - "5": 126 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 48, - "3": 66, - "4": 91, - "5": 125 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 50, - "3": 68, - "4": 94, - "5": 130 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 53, - "2": 73, - "3": 100, - "4": 138, - "5": 190 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 27, - "2": 37, - "3": 51, - "4": 70, - "5": 97 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 32, - "2": 45, - "3": 61, - "4": 85, - "5": 118 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 49, - "3": 67, - "4": 93, - "5": 128 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 50, - "3": 69, - "4": 95, - "5": 132 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 40, - "2": 55, - "3": 76, - "4": 105, - "5": 145 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 46, - "2": 63, - "3": 87, - "4": 120, - "5": 165 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 57, - "2": 75, - "3": 105, - "4": 140, - "5": 195 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 28, - "2": 43, - "3": 65, - "4": 89, - "5": 112 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 34, - "2": 48, - "3": 71, - "4": 97, - "5": 128 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 55, - "3": 80, - "4": 110, - "5": 144 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 38, - "2": 59, - "3": 85, - "4": 117, - "5": 154 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 44, - "2": 62, - "3": 89, - "4": 123, - "5": 157 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 51, - "2": 68, - "3": 97, - "4": 134, - "5": 171 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 60, - "2": 81, - "3": 114, - "4": 157, - "5": 192 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 38, - "3": 41, - "4": 69, - "5": 78 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 49, - "3": 55, - "4": 90, - "5": 100 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 33, - "2": 53, - "3": 59, - "4": 96, - "5": 108 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 34, - "2": 55, - "3": 62, - "4": 101, - "5": 114 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 58, - "3": 65, - "4": 105, - "5": 119 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 38, - "2": 61, - "3": 69, - "4": 111, - "5": 126 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 40, - "2": 64, - "3": 73, - "4": 117, - "5": 133 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 19, - "2": 33, - "3": 40, - "4": 60, - "5": 76 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 41, - "3": 54, - "4": 74, - "5": 97 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 42, - "3": 56, - "4": 76, - "5": 102 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 44, - "3": 59, - "4": 81, - "5": 107 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 49, - "3": 64, - "4": 90, - "5": 118 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 50, - "3": 67, - "4": 92, - "5": 121 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 59, - "3": 70, - "4": 111, - "5": 130 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 26, - "3": 35, - "4": 48, - "5": 63 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 33, - "3": 44, - "4": 62, - "5": 81 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 35, - "3": 47, - "4": 65, - "5": 83 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 37, - "3": 48, - "4": 66, - "5": 85 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 40, - "3": 54, - "4": 74, - "5": 93 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 42, - "3": 56, - "4": 78, - "5": 99 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 45, - "3": 58, - "4": 79, - "5": 102 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 24, - "3": 32, - "4": 44, - "5": 58 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 25, - "3": 33, - "4": 46, - "5": 60 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 27, - "3": 36, - "4": 50, - "5": 65 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 28, - "3": 37, - "4": 52, - "5": 69 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 29, - "3": 39, - "4": 54, - "5": 71 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 30, - "3": 40, - "4": 55, - "5": 73 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 30, - "3": 40, - "4": 55, - "5": 73 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 11, - "2": 19, - "3": 25, - "4": 35, - "5": 46 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 11, - "2": 20, - "3": 26, - "4": 36, - "5": 48 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 12, - "2": 21, - "3": 28, - "4": 39, - "5": 52 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 13, - "2": 23, - "3": 30, - "4": 41, - "5": 54 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 13, - "2": 23, - "3": 31, - "4": 42, - "5": 56 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 24, - "3": 32, - "4": 43, - "5": 57 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 24, - "3": 32, - "4": 43, - "5": 57 - } - } - ], - "Deadlift": [ - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 45, - "2": 74, - "3": 93, - "4": 103, - "5": 115 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 58, - "2": 97, - "3": 121, - "4": 134, - "5": 149 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 73, - "2": 122, - "3": 152, - "4": 169, - "5": 188 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 77, - "2": 129, - "3": 161, - "4": 179, - "5": 199 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 81, - "2": 135, - "3": 169, - "4": 188, - "5": 209 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 82, - "2": 137, - "3": 172, - "4": 191, - "5": 212 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 84, - "2": 139, - "3": 174, - "4": 194, - "5": 215 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 47, - "2": 81, - "3": 101, - "4": 127, - "5": 141 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 64, - "2": 112, - "3": 139, - "4": 186, - "5": 207 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 76, - "2": 131, - "3": 164, - "4": 219, - "5": 243 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 83, - "2": 144, - "3": 180, - "4": 240, - "5": 266 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 84, - "2": 146, - "3": 182, - "4": 243, - "5": 270 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 85, - "2": 147, - "3": 184, - "4": 245, - "5": 273 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 86, - "2": 149, - "3": 187, - "4": 249, - "5": 276 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 51, - "2": 89, - "3": 112, - "4": 149, - "5": 175 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 64, - "2": 112, - "3": 140, - "4": 186, - "5": 219 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 76, - "2": 132, - "3": 165, - "4": 220, - "5": 259 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 81, - "2": 142, - "3": 177, - "4": 236, - "5": 278 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 83, - "2": 145, - "3": 181, - "4": 242, - "5": 284 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 84, - "2": 146, - "3": 183, - "4": 244, - "5": 287 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 89, - "2": 154, - "3": 192, - "4": 257, - "5": 302 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 80, - "3": 100, - "4": 118, - "5": 131 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 92, - "3": 115, - "4": 154, - "5": 181 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 63, - "2": 109, - "3": 137, - "4": 182, - "5": 214 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 65, - "2": 113, - "3": 141, - "4": 188, - "5": 222 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 71, - "2": 124, - "3": 154, - "4": 206, - "5": 242 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 75, - "2": 130, - "3": 162, - "4": 217, - "5": 255 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 76, - "2": 133, - "3": 166, - "4": 221, - "5": 260 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 40, - "2": 69, - "3": 86, - "4": 102, - "5": 113 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 84, - "3": 105, - "4": 140, - "5": 164 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 56, - "2": 97, - "3": 121, - "4": 161, - "5": 190 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 60, - "2": 104, - "3": 130, - "4": 173, - "5": 204 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 63, - "2": 110, - "3": 138, - "4": 183, - "5": 216 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 64, - "2": 111, - "3": 139, - "4": 185, - "5": 218 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 65, - "2": 114, - "3": 142, - "4": 190, - "5": 223 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 35, - "2": 61, - "3": 79, - "4": 95, - "5": 109 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 46, - "2": 79, - "3": 103, - "4": 124, - "5": 142 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 52, - "2": 90, - "3": 117, - "4": 141, - "5": 162 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 57, - "2": 98, - "3": 128, - "4": 155, - "5": 177 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 61, - "2": 107, - "3": 138, - "4": 167, - "5": 191 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 62, - "2": 109, - "3": 140, - "4": 170, - "5": 194 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 64, - "2": 112, - "3": 144, - "4": 175, - "5": 200 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 29, - "2": 51, - "3": 68, - "4": 85, - "5": 98 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 62, - "3": 82, - "4": 103, - "5": 121 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 42, - "2": 74, - "3": 98, - "4": 123, - "5": 144 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 45, - "2": 79, - "3": 105, - "4": 131, - "5": 155 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 49, - "2": 86, - "3": 114, - "4": 143, - "5": 168 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 87, - "3": 116, - "4": 145, - "5": 170 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 52, - "2": 90, - "3": 120, - "4": 150, - "5": 176 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 21, - "2": 36, - "3": 48, - "4": 60, - "5": 68 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 25, - "2": 43, - "3": 58, - "4": 72, - "5": 85 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 30, - "2": 51, - "3": 69, - "4": 86, - "5": 101 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 32, - "2": 55, - "3": 74, - "4": 92, - "5": 108 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 35, - "2": 60, - "3": 80, - "4": 100, - "5": 118 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 35, - "2": 61, - "3": 81, - "4": 101, - "5": 119 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 63, - "3": 84, - "4": 105, - "5": 123 - } - }, - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 39, - "3": 51, - "4": 62, - "5": 82 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 51, - "3": 65, - "4": 80, - "5": 102 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 56, - "3": 72, - "4": 88, - "5": 108 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 59, - "3": 75, - "4": 92, - "5": 113 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 61, - "3": 79, - "4": 99, - "5": 118 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 27, - "2": 62, - "3": 80, - "4": 103, - "5": 123 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 69, - "3": 89, - "4": 109, - "5": 129 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 58, - "3": 74, - "4": 91, - "5": 120 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 70, - "3": 90, - "4": 110, - "5": 140 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 33, - "2": 77, - "3": 99, - "4": 121, - "5": 150 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 34, - "2": 79, - "3": 101, - "4": 124, - "5": 154 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 82, - "3": 107, - "4": 133, - "5": 162 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 82, - "3": 106, - "4": 134, - "5": 164 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 84, - "3": 108, - "4": 132, - "5": 159 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 70, - "3": 90, - "4": 110, - "5": 145 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 32, - "2": 74, - "3": 96, - "4": 117, - "5": 149 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 81, - "3": 104, - "4": 127, - "5": 157 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 36, - "2": 83, - "3": 107, - "4": 131, - "5": 162 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 39, - "2": 91, - "3": 118, - "4": 147, - "5": 179 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 40, - "2": 93, - "3": 119, - "4": 151, - "5": 185 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 40, - "2": 94, - "3": 120, - "4": 147, - "5": 178 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 54, - "3": 70, - "4": 85, - "5": 112 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 67, - "3": 86, - "4": 105, - "5": 133 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 69, - "3": 89, - "4": 109, - "5": 134 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 32, - "2": 74, - "3": 95, - "4": 116, - "5": 143 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 33, - "2": 78, - "3": 101, - "4": 126, - "5": 153 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 81, - "3": 104, - "4": 132, - "5": 160 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 82, - "3": 106, - "4": 129, - "5": 156 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 51, - "3": 65, - "4": 80, - "5": 105 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 57, - "3": 73, - "4": 89, - "5": 114 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 60, - "3": 78, - "4": 95, - "5": 117 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 28, - "2": 65, - "3": 83, - "4": 102, - "5": 126 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 29, - "2": 69, - "3": 90, - "4": 112, - "5": 136 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 69, - "3": 89, - "4": 114, - "5": 137 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 31, - "2": 72, - "3": 92, - "4": 113, - "5": 135 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 43, - "3": 55, - "4": 67, - "5": 89 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 53, - "3": 69, - "4": 84, - "5": 107 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 56, - "3": 72, - "4": 89, - "5": 109 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 58, - "3": 74, - "4": 91, - "5": 112 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 60, - "3": 77, - "4": 97, - "5": 116 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 60, - "3": 77, - "4": 99, - "5": 118 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 60, - "3": 78, - "4": 95, - "5": 112 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 42, - "3": 53, - "4": 66, - "5": 84 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 43, - "3": 55, - "4": 67, - "5": 86 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 46, - "3": 59, - "4": 72, - "5": 92 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 47, - "3": 60, - "4": 73, - "5": 93 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 47, - "3": 61, - "4": 79, - "5": 94 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 47, - "3": 61, - "4": 79, - "5": 95 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 48, - "3": 61, - "4": 79, - "5": 95 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 34, - "3": 44, - "4": 53, - "5": 68 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 35, - "3": 45, - "4": 55, - "5": 69 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 37, - "3": 48, - "4": 58, - "5": 74 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 38, - "3": 48, - "4": 59, - "5": 75 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 38, - "3": 50, - "4": 65, - "5": 76 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 38, - "3": 49, - "4": 65, - "5": 77 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 39, - "3": 50, - "4": 65, - "5": 77 - } - } - ], - "Bench Press": [ - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 34, - "2": 47, - "3": 61, - "4": 74, - "5": 85 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 42, - "2": 59, - "3": 76, - "4": 92, - "5": 107 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 43, - "2": 60, - "3": 77, - "4": 94, - "5": 110 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 51, - "2": 71, - "3": 91, - "4": 111, - "5": 132 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 74, - "3": 95, - "4": 116, - "5": 134 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 74, - "3": 96, - "4": 117, - "5": 137 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 74, - "3": 95, - "4": 116, - "5": 138 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 51, - "3": 65, - "4": 80, - "5": 92 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 70, - "3": 90, - "4": 110, - "5": 130 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 70, - "3": 90, - "4": 110, - "5": 150 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 52, - "2": 73, - "3": 93, - "4": 114, - "5": 161 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 55, - "2": 77, - "3": 99, - "4": 121, - "5": 170 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 59, - "2": 82, - "3": 106, - "4": 129, - "5": 181 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 61, - "2": 85, - "3": 109, - "4": 133, - "5": 182 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 39, - "2": 55, - "3": 71, - "4": 87, - "5": 114 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 75, - "3": 96, - "4": 117, - "5": 155 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 75, - "3": 97, - "4": 119, - "5": 156 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 59, - "2": 83, - "3": 107, - "4": 131, - "5": 173 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 61, - "2": 84, - "3": 108, - "4": 135, - "5": 176 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 62, - "2": 85, - "3": 110, - "4": 139, - "5": 177 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 67, - "2": 94, - "3": 121, - "4": 148, - "5": 195 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 37, - "2": 52, - "3": 66, - "4": 81, - "5": 105 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 41, - "2": 57, - "3": 73, - "4": 89, - "5": 116 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 67, - "3": 86, - "4": 105, - "5": 135 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 75, - "3": 97, - "4": 118, - "5": 143 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 56, - "2": 78, - "3": 100, - "4": 122, - "5": 154 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 58, - "2": 81, - "3": 104, - "4": 127, - "5": 164 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 62, - "2": 87, - "3": 111, - "4": 136, - "5": 166 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 29, - "2": 41, - "3": 53, - "4": 65, - "5": 74 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 40, - "2": 56, - "3": 72, - "4": 88, - "5": 104 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 43, - "2": 60, - "3": 77, - "4": 94, - "5": 111 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 49, - "2": 68, - "3": 88, - "4": 107, - "5": 129 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 53, - "2": 74, - "3": 95, - "4": 116, - "5": 140 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 75, - "3": 97, - "4": 118, - "5": 143 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 54, - "2": 76, - "3": 98, - "4": 120, - "5": 145 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 25, - "2": 35, - "3": 45, - "4": 55, - "5": 68 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 32, - "2": 45, - "3": 57, - "4": 70, - "5": 88 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 50, - "3": 64, - "4": 78, - "5": 99 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 47, - "2": 66, - "3": 84, - "4": 103, - "5": 131 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 67, - "3": 87, - "4": 106, - "5": 134 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 49, - "2": 68, - "3": 88, - "4": 107, - "5": 136 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 50, - "2": 69, - "3": 89, - "4": 109, - "5": 138 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 23, - "2": 32, - "3": 41, - "4": 50, - "5": 60 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 29, - "2": 40, - "3": 52, - "4": 63, - "5": 78 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 33, - "2": 46, - "3": 59, - "4": 72, - "5": 89 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 34, - "2": 48, - "3": 62, - "4": 76, - "5": 94 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 36, - "2": 51, - "3": 65, - "4": 80, - "5": 99 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 44, - "2": 61, - "3": 79, - "4": 96, - "5": 121 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 48, - "2": 67, - "3": 86, - "4": 105, - "5": 131 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "male" - }, - "levels": { - "1": 16, - "2": 22, - "3": 28, - "4": 34, - "5": 41 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "male" - }, - "levels": { - "1": 20, - "2": 28, - "3": 36, - "4": 44, - "5": 54 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "male" - }, - "levels": { - "1": 22, - "2": 31, - "3": 40, - "4": 49, - "5": 61 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "male" - }, - "levels": { - "1": 24, - "2": 33, - "3": 43, - "4": 52, - "5": 65 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "male" - }, - "levels": { - "1": 25, - "2": 35, - "3": 45, - "4": 55, - "5": 69 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "male" - }, - "levels": { - "1": 30, - "2": 42, - "3": 54, - "4": 66, - "5": 83 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "male" - }, - "levels": { - "1": 33, - "2": 46, - "3": 59, - "4": 72, - "5": 91 - } - }, - { - "metrics": { - "age": 17, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 19, - "3": 27, - "4": 37, - "5": 51 - } - }, - { - "metrics": { - "age": 17, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 23, - "3": 32, - "4": 44, - "5": 61 - } - }, - { - "metrics": { - "age": 17, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 19, - "2": 27, - "3": 37, - "4": 51, - "5": 70 - } - }, - { - "metrics": { - "age": 17, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 21, - "2": 28, - "3": 39, - "4": 54, - "5": 75 - } - }, - { - "metrics": { - "age": 17, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 30, - "3": 41, - "4": 57, - "5": 78 - } - }, - { - "metrics": { - "age": 17, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 31, - "3": 42, - "4": 58, - "5": 81 - } - }, - { - "metrics": { - "age": 17, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 32, - "3": 44, - "4": 61, - "5": 84 - } - }, - { - "metrics": { - "age": 25, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 19, - "3": 26, - "4": 36, - "5": 49 - } - }, - { - "metrics": { - "age": 25, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 19, - "2": 27, - "3": 37, - "4": 51, - "5": 70 - } - }, - { - "metrics": { - "age": 25, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 21, - "2": 29, - "3": 40, - "4": 56, - "5": 77 - } - }, - { - "metrics": { - "age": 25, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 30, - "3": 42, - "4": 57, - "5": 79 - } - }, - { - "metrics": { - "age": 25, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 34, - "3": 47, - "4": 64, - "5": 89 - } - }, - { - "metrics": { - "age": 25, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 25, - "2": 35, - "3": 48, - "4": 66, - "5": 91 - } - }, - { - "metrics": { - "age": 25, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 28, - "2": 39, - "3": 54, - "4": 75, - "5": 103 - } - }, - { - "metrics": { - "age": 35, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 12, - "2": 17, - "3": 22, - "4": 27, - "5": 57 - } - }, - { - "metrics": { - "age": 35, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 30, - "2": 41, - "3": 53, - "4": 65, - "5": 83 - } - }, - { - "metrics": { - "age": 35, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 33, - "2": 45, - "3": 60, - "4": 73, - "5": 89 - } - }, - { - "metrics": { - "age": 35, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 35, - "2": 51, - "3": 66, - "4": 80, - "5": 98 - } - }, - { - "metrics": { - "age": 35, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 38, - "2": 51, - "3": 67, - "4": 84, - "5": 100 - } - }, - { - "metrics": { - "age": 35, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 39, - "2": 52, - "3": 66, - "4": 86, - "5": 102 - } - }, - { - "metrics": { - "age": 35, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 41, - "2": 58, - "3": 74, - "4": 90, - "5": 106 - } - }, - { - "metrics": { - "age": 45, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 14, - "3": 25, - "4": 25, - "5": 46 - } - }, - { - "metrics": { - "age": 45, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 31, - "3": 36, - "4": 56, - "5": 66 - } - }, - { - "metrics": { - "age": 45, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 23, - "2": 37, - "3": 41, - "4": 67, - "5": 75 - } - }, - { - "metrics": { - "age": 45, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 24, - "2": 44, - "3": 44, - "4": 80, - "5": 81 - } - }, - { - "metrics": { - "age": 45, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 32, - "3": 44, - "4": 59, - "5": 85 - } - }, - { - "metrics": { - "age": 45, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 26, - "2": 41, - "3": 48, - "4": 75, - "5": 87 - } - }, - { - "metrics": { - "age": 45, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 28, - "2": 44, - "3": 51, - "4": 79, - "5": 93 - } - }, - { - "metrics": { - "age": 55, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 7, - "2": 13, - "3": 17, - "4": 23, - "5": 43 - } - }, - { - "metrics": { - "age": 55, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 22, - "3": 32, - "4": 37, - "5": 61 - } - }, - { - "metrics": { - "age": 55, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 30, - "3": 40, - "4": 55, - "5": 68 - } - }, - { - "metrics": { - "age": 55, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 31, - "3": 41, - "4": 56, - "5": 69 - } - }, - { - "metrics": { - "age": 55, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 27, - "3": 35, - "4": 49, - "5": 72 - } - }, - { - "metrics": { - "age": 55, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 32, - "3": 42, - "4": 58, - "5": 75 - } - }, - { - "metrics": { - "age": 55, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 21, - "2": 36, - "3": 48, - "4": 66, - "5": 82 - } - }, - { - "metrics": { - "age": 65, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 9, - "2": 13, - "3": 17, - "4": 38, - "5": 38 - } - }, - { - "metrics": { - "age": 65, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 33, - "3": 44, - "4": 40, - "5": 53 - } - }, - { - "metrics": { - "age": 65, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 25, - "3": 34, - "4": 46, - "5": 61 - } - }, - { - "metrics": { - "age": 65, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 22, - "2": 33, - "3": 48, - "4": 66, - "5": 62 - } - }, - { - "metrics": { - "age": 65, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 12, - "2": 20, - "3": 27, - "4": 37, - "5": 65 - } - }, - { - "metrics": { - "age": 65, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 31, - "3": 41, - "4": 56, - "5": 69 - } - }, - { - "metrics": { - "age": 65, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 20, - "2": 45, - "3": 58, - "4": 65, - "5": 70 - } - }, - { - "metrics": { - "age": 75, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 9, - "2": 12, - "3": 16, - "4": 21, - "5": 28 - } - }, - { - "metrics": { - "age": 75, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 18, - "3": 24, - "4": 32, - "5": 43 - } - }, - { - "metrics": { - "age": 75, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 16, - "2": 21, - "3": 28, - "4": 37, - "5": 49 - } - }, - { - "metrics": { - "age": 75, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 23, - "3": 30, - "4": 40, - "5": 54 - } - }, - { - "metrics": { - "age": 75, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 17, - "2": 23, - "3": 31, - "4": 41, - "5": 55 - } - }, - { - "metrics": { - "age": 75, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 18, - "2": 24, - "3": 32, - "4": 42, - "5": 56 - } - }, - { - "metrics": { - "age": 75, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 19, - "2": 25, - "3": 33, - "4": 44, - "5": 59 - } - }, - { - "metrics": { - "age": 85, - "weight": 57, - "gender": "female" - }, - "levels": { - "1": 8, - "2": 10, - "3": 14, - "4": 18, - "5": 24 - } - }, - { - "metrics": { - "age": 85, - "weight": 68, - "gender": "female" - }, - "levels": { - "1": 9, - "2": 14, - "3": 19, - "4": 25, - "5": 34 - } - }, - { - "metrics": { - "age": 85, - "weight": 79, - "gender": "female" - }, - "levels": { - "1": 12, - "2": 16, - "3": 22, - "4": 29, - "5": 39 - } - }, - { - "metrics": { - "age": 85, - "weight": 91, - "gender": "female" - }, - "levels": { - "1": 13, - "2": 18, - "3": 24, - "4": 32, - "5": 43 - } - }, - { - "metrics": { - "age": 85, - "weight": 102, - "gender": "female" - }, - "levels": { - "1": 14, - "2": 19, - "3": 25, - "4": 33, - "5": 44 - } - }, - { - "metrics": { - "age": 85, - "weight": 113, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 19, - "3": 26, - "4": 34, - "5": 46 - } - }, - { - "metrics": { - "age": 85, - "weight": 136, - "gender": "female" - }, - "levels": { - "1": 15, - "2": 20, - "3": 27, - "4": 36, - "5": 48 - } - } - ], - "Run": [ - { - "metrics": { - "age": 10, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 676000, - "2": 560000, - "3": 475000, - "4": 414000, - "5": 369000 - } - }, - { - "metrics": { - "age": 15, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 585000, - "2": 485000, - "3": 411000, - "4": 358000, - "5": 319000 - } - }, - { - "metrics": { - "age": 20, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 565000, - "2": 468000, - "3": 398000, - "4": 346000, - "5": 308000 - } - }, - { - "metrics": { - "age": 25, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 565000, - "2": 468000, - "3": 398000, - "4": 346000, - "5": 308000 - } - }, - { - "metrics": { - "age": 30, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 566000, - "2": 469000, - "3": 398000, - "4": 346000, - "5": 309000 - } - }, - { - "metrics": { - "age": 35, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 575000, - "2": 476000, - "3": 404000, - "4": 352000, - "5": 314000 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 595000, - "2": 493000, - "3": 418000, - "4": 364000, - "5": 325000 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 617000, - "2": 511000, - "3": 434000, - "4": 378000, - "5": 337000 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 642000, - "2": 531000, - "3": 451000, - "4": 393000, - "5": 350000 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 668000, - "2": 553000, - "3": 469000, - "4": 409000, - "5": 364000 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 696000, - "2": 577000, - "3": 489000, - "4": 426000, - "5": 380000 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 727000, - "2": 602000, - "3": 511000, - "4": 445000, - "5": 397000 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 763000, - "2": 632000, - "3": 537000, - "4": 467000, - "5": 417000 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 820000, - "2": 680000, - "3": 577000, - "4": 502000, - "5": 448000 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 908000, - "2": 752000, - "3": 638000, - "4": 556000, - "5": 495000 - } - }, - { - "metrics": { - "age": 85, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 1045000, - "2": 866000, - "3": 735000, - "4": 640000, - "5": 570000 - } - }, - { - "metrics": { - "age": 90, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 1273000, - "2": 1055000, - "3": 895000, - "4": 779000, - "5": 695000 - } - }, - { - "metrics": { - "age": 10, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 749000, - "2": 632000, - "3": 543000, - "4": 477000, - "5": 428000 - } - }, - { - "metrics": { - "age": 15, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 672000, - "2": 567000, - "3": 488000, - "4": 428000, - "5": 384000 - } - }, - { - "metrics": { - "age": 20, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 640000, - "2": 540000, - "3": 464000, - "4": 408000, - "5": 366000 - } - }, - { - "metrics": { - "age": 25, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 640000, - "2": 540000, - "3": 464000, - "4": 408000, - "5": 366000 - } - }, - { - "metrics": { - "age": 30, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 640000, - "2": 540000, - "3": 464000, - "4": 408000, - "5": 366000 - } - }, - { - "metrics": { - "age": 35, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 644000, - "2": 544000, - "3": 467000, - "4": 410000, - "5": 368000 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 658000, - "2": 555000, - "3": 477000, - "4": 419000, - "5": 376000 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 681000, - "2": 575000, - "3": 494000, - "4": 434000, - "5": 389000 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 716000, - "2": 604000, - "3": 520000, - "4": 456000, - "5": 409000 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 757000, - "2": 639000, - "3": 550000, - "4": 482000, - "5": 433000 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 804000, - "2": 678000, - "3": 583000, - "4": 512000, - "5": 459000 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 856000, - "2": 722000, - "3": 621000, - "4": 545000, - "5": 489000 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 915000, - "2": 772000, - "3": 664000, - "4": 583000, - "5": 523000 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 983000, - "2": 830000, - "3": 713000, - "4": 626000, - "5": 562000 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 1065000, - "2": 898000, - "3": 772000, - "4": 678000, - "5": 608000 - } - }, - { - "metrics": { - "age": 85, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 1199000, - "2": 1012000, - "3": 870000, - "4": 763000, - "5": 685000 - } - }, - { - "metrics": { - "age": 90, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 1445000, - "2": 1219000, - "3": 1048000, - "4": 920000, - "5": 825000 - } - } - ], - "Dash": [ - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 14000, - "2": 13000, - "3": 12000, - "4": 11300, - "5": 10800 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 14500, - "2": 13500, - "3": 12400, - "4": 11700, - "5": 11200 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 15700, - "2": 14500, - "3": 13400, - "4": 12600, - "5": 12100 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 15900, - "2": 14800, - "3": 13600, - "4": 12800, - "5": 12300 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 16500, - "2": 15300, - "3": 14200, - "4": 13300, - "5": 12700 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 17100, - "2": 15900, - "3": 14700, - "4": 13800, - "5": 13200 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 18000, - "2": 16700, - "3": 15400, - "4": 14500, - "5": 13900 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 18400, - "2": 17100, - "3": 15800, - "4": 14900, - "5": 14200 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 19400, - "2": 18000, - "3": 16600, - "4": 15600, - "5": 14900 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 20800, - "2": 19300, - "3": 17800, - "4": 16800, - "5": 16100 - } - }, - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 15400, - "2": 14300, - "3": 13300, - "4": 12500, - "5": 11900 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 16100, - "2": 14900, - "3": 13900, - "4": 13100, - "5": 12400 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 16500, - "2": 15300, - "3": 14200, - "4": 13400, - "5": 12700 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 16900, - "2": 15700, - "3": 14600, - "4": 13700, - "5": 13100 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 17600, - "2": 16400, - "3": 15200, - "4": 14300, - "5": 13600 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 19200, - "2": 17800, - "3": 16500, - "4": 15600, - "5": 14800 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 20200, - "2": 18700, - "3": 17400, - "4": 16400, - "5": 15600 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 21400, - "2": 19900, - "3": 18500, - "4": 17400, - "5": 16500 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 21800, - "2": 20300, - "3": 18800, - "4": 17700, - "5": 16900 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 23600, - "2": 21900, - "3": 20300, - "4": 19100, - "5": 18200 - } - } - ], - "Treadmill Dash": [ - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.007142857142857143, - "2": 0.007692307692307693, - "3": 0.008333333333333333, - "4": 0.008849557522123894, - "5": 0.009259259259259259 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.006896551724137931, - "2": 0.007407407407407408, - "3": 0.008064516129032258, - "4": 0.008547008547008548, - "5": 0.008928571428571428 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.006369426751592357, - "2": 0.006896551724137931, - "3": 0.007462686567164179, - "4": 0.007936507936507936, - "5": 0.008264462809917356 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.006289308176100629, - "2": 0.006756756756756757, - "3": 0.007352941176470588, - "4": 0.0078125, - "5": 0.008130081300813009 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.006060606060606061, - "2": 0.006535947712418301, - "3": 0.007042253521126761, - "4": 0.007518796992481203, - "5": 0.007874015748031496 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.005847953216374269, - "2": 0.006289308176100629, - "3": 0.006802721088435374, - "4": 0.007246376811594203, - "5": 0.007575757575757576 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.005555555555555556, - "2": 0.005988023952095809, - "3": 0.006493506493506494, - "4": 0.006896551724137931, - "5": 0.007194244604316547 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.005434782608695652, - "2": 0.005847953216374269, - "3": 0.006329113924050633, - "4": 0.006711409395973154, - "5": 0.007042253521126761 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.005154639175257732, - "2": 0.005555555555555556, - "3": 0.006024096385542169, - "4": 0.00641025641025641, - "5": 0.006711409395973154 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 0.004807692307692308, - "2": 0.0051813471502590676, - "3": 0.0056179775280898875, - "4": 0.005952380952380952, - "5": 0.006211180124223602 - } - }, - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.006493506493506494, - "2": 0.006993006993006993, - "3": 0.007518796992481203, - "4": 0.008, - "5": 0.008403361344537815 - } - }, - { - "metrics": { - "age": 40, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.006211180124223602, - "2": 0.006711409395973154, - "3": 0.007194244604316547, - "4": 0.007633587786259542, - "5": 0.008064516129032258 - } - }, - { - "metrics": { - "age": 45, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.006060606060606061, - "2": 0.006535947712418301, - "3": 0.007042253521126761, - "4": 0.007462686567164179, - "5": 0.007874015748031496 - } - }, - { - "metrics": { - "age": 50, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.005917159763313609, - "2": 0.006369426751592357, - "3": 0.00684931506849315, - "4": 0.0072992700729927005, - "5": 0.007633587786259542 - } - }, - { - "metrics": { - "age": 55, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.005681818181818182, - "2": 0.006097560975609756, - "3": 0.006578947368421052, - "4": 0.006993006993006993, - "5": 0.007352941176470588 - } - }, - { - "metrics": { - "age": 60, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.005208333333333333, - "2": 0.0056179775280898875, - "3": 0.006060606060606061, - "4": 0.00641025641025641, - "5": 0.006756756756756757 - } - }, - { - "metrics": { - "age": 65, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.0049504950495049506, - "2": 0.0053475935828877, - "3": 0.005747126436781609, - "4": 0.006097560975609756, - "5": 0.00641025641025641 - } - }, - { - "metrics": { - "age": 70, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.004672897196261682, - "2": 0.005025125628140704, - "3": 0.005405405405405406, - "4": 0.005747126436781609, - "5": 0.006060606060606061 - } - }, - { - "metrics": { - "age": 75, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.0045871559633027525, - "2": 0.0049261083743842365, - "3": 0.005319148936170213, - "4": 0.005649717514124294, - "5": 0.005917159763313609 - } - }, - { - "metrics": { - "age": 80, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 0.00423728813559322, - "2": 0.0045662100456621, - "3": 0.0049261083743842365, - "4": 0.005235602094240838, - "5": 0.005494505494505495 - } - } - ], - "Broad Jump": [ - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 200, - "2": 214, - "3": 224, - "4": 234, - "5": 245 - } - }, - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 150, - "2": 164, - "3": 174, - "4": 184, - "5": 194 - } - } - ], - "Cone Drill": [ - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "male" - }, - "levels": { - "1": 9500, - "2": 8700, - "3": 7800, - "4": 7000, - "5": 6500 - } - }, - { - "metrics": { - "age": 18, - "weight": -1, - "gender": "female" - }, - "levels": { - "1": 10500, - "2": 9600, - "3": 8700, - "4": 7800, - "5": 7200 - } - } - ] -} diff --git a/calculator/test.ts b/calculator/test.ts index f3da977..0474bbf 100644 --- a/calculator/test.ts +++ b/calculator/test.ts @@ -1,5 +1,6 @@ -import { activities, ActivityPerformance, feetToCm, genders, inchesToCm, lbToKg, minToMs, Player, secToMs } from "./util"; -import { LevelCalculator } from "./calc.ts"; +import { activities, ActivityPerformance, feetToCm, genders, inchesToCm, lbToKg, minToMs, Player, secToMs, StandardsMap } from "./util"; +import { LevelCalculator, Standards } from "./calc.ts"; +import rawStandards from "../data/standards.json" assert { type: "json" } const player: Player = { metrics: { @@ -40,13 +41,12 @@ const computedPerformances: ActivityPerformance[] = [ }, ]; -console.log(Bun.argv); -// const levelCalculator = new LevelCalculator({ compressTo: +Bun.argv[2], expandIters: +Bun.argv[3] }); -const levelCalculator = new LevelCalculator(); +const standards = new Standards(rawStandards as StandardsMap); +const levelCalculator = new LevelCalculator(standards); const levels = { - attributes: levelCalculator.calcAllAttributeLevels(player, computedPerformances), - player: levelCalculator.calcPlayerLevel(player, computedPerformances) + attributes: levelCalculator.calculateAllAttributeLevels(player, computedPerformances), + player: levelCalculator.calculatePlayerLevel(player, computedPerformances) }; console.log(levels); diff --git a/main.ts b/main.ts index 7641bb1..cbe324e 100644 --- a/main.ts +++ b/main.ts @@ -1,7 +1,8 @@ -import { LevelCalculator } from "./calculator/calc.ts"; -import { ActivityPerformance, Player } from "./calculator/util.ts"; +import { LevelCalculator, Standards } from "./calculator/calc.ts"; +import { ActivityPerformance, Player, StandardsMap } from "./calculator/util.ts"; import { Printful } from "./commerce/printful.ts" import { Webflow } from "./commerce/webflow.ts"; +import rawStandards from "./data/standards.json" assert { type: "json" } interface CalcRequest { player: Player, @@ -25,6 +26,8 @@ export class ClientResponse extends Response { } } +const MAIN_STANDARDS = new Standards(rawStandards as StandardsMap); + const server = Bun.serve({ idleTimeout: 180, routes: { @@ -36,12 +39,12 @@ const server = Bun.serve({ const calcReq: CalcRequest = await req.json(); const { player, activityPerformances } = calcReq; - const levelCalculator = new LevelCalculator(); + const levelCalculator = new LevelCalculator(MAIN_STANDARDS); return ClientResponse.json({ levels: { - attributes: levelCalculator.calcAllAttributeLevels(player, activityPerformances), - player: levelCalculator.calcPlayerLevel(player, activityPerformances) + attributes: levelCalculator.calculateAllAttributeLevels(player, activityPerformances), + player: levelCalculator.calculatePlayerLevel(player, activityPerformances) } }) }