diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fe5d1ee --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +packages/website/frontend/** linguist-vendored=true +packages/website/frontend/**/*.elm linguist-language=Elm linguist-detectable=true +*.ps linguist-detectable=false +*.eps linguist-detectable=false diff --git a/flake.lock b/flake.lock index 4e1e77d..f92b563 100755 --- a/flake.lock +++ b/flake.lock @@ -79,7 +79,6 @@ "elm-spa_2": { "inputs": { "nixpkgs": [ - "upRootNutrition", "mkElmDerivation", "nixpkgs" ] @@ -125,7 +124,6 @@ "elm-watch_2": { "inputs": { "nixpkgs": [ - "upRootNutrition", "mkElmDerivation", "nixpkgs" ], @@ -362,42 +360,6 @@ "type": "github" } }, - "flake-parts_7": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_4" - }, - "locked": { - "lastModified": 1759362264, - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_8": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_5" - }, - "locked": { - "lastModified": 1759362264, - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "flake-root": { "locked": { "lastModified": 1723604017, @@ -1085,14 +1047,16 @@ "inputs": { "elm-spa": "elm-spa_2", "elm-watch": "elm-watch_2", - "nixpkgs": "nixpkgs_6" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1759023814, - "narHash": "sha256-uBmxzIRNLyW69/mOkSkbSTmuQG/zu68dNEnt0xTiYzs=", + "lastModified": 1763862901, + "narHash": "sha256-Ws6dceAR8Yr8EHwLBEcwZ4nD9kxACFurFO/UbCJor5g=", "owner": "jeslie0", "repo": "mkElmDerivation", - "rev": "f2b9966af4a7965cd47ac707ab81aeef9a8a3fa6", + "rev": "d91d3befe2292b42e1755407e08abc934269d8a1", "type": "github" }, "original": { @@ -1271,36 +1235,6 @@ "type": "github" } }, - "nixpkgs-lib_4": { - "locked": { - "lastModified": 1754788789, - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, - "nixpkgs-lib_5": { - "locked": { - "lastModified": 1754788789, - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, "nixpkgs-stable": { "locked": { "lastModified": 1762756533, @@ -1349,22 +1283,6 @@ "type": "github" } }, - "nixpkgs-stable_4": { - "locked": { - "lastModified": 1759281824, - "narHash": "sha256-FIBE1qXv9TKvSNwst6FumyHwCRH3BlWDpfsnqRDCll0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5b5be50345d4113d04ba58c444348849f5585b4a", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1696757521, @@ -1429,70 +1347,6 @@ "type": "github" } }, - "nixpkgs_6": { - "locked": { - "lastModified": 1696757521, - "narHash": "sha256-cfgtLNCBLFx2qOzRLI6DHfqTdfWI+UbvsKYa3b3fvaA=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2646b294a146df2781b1ca49092450e8a32814e1", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_7": { - "locked": { - "lastModified": 1759036355, - "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_8": { - "locked": { - "lastModified": 1754340878, - "narHash": "sha256-lgmUyVQL9tSnvvIvBp7x1euhkkCho7n3TMzgjdvgPoU=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "cab778239e705082fe97bb4990e0d24c50924c04", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1754340878, - "narHash": "sha256-lgmUyVQL9tSnvvIvBp7x1euhkkCho7n3TMzgjdvgPoU=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "cab778239e705082fe97bb4990e0d24c50924c04", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "npm-fix": { "inputs": { "nixpkgs": [ @@ -1519,7 +1373,6 @@ "npm-fix_2": { "inputs": { "nixpkgs": [ - "upRootNutrition", "mkElmDerivation", "elm-watch", "nixpkgs" @@ -1672,6 +1525,7 @@ "lix": "lix", "lix-module": "lix-module", "microvm": "microvm", + "mkElmDerivation": "mkElmDerivation_2", "niri": "niri", "nixcord": "nixcord", "nixpkgs": "nixpkgs_5", @@ -1683,10 +1537,8 @@ "systems": "systems_5", "treefmt-nix": "treefmt-nix_3", "tuios": "tuios", - "upRootNutrition": "upRootNutrition", "waybar": "waybar", - "wpaperd": "wpaperd", - "zookeeper": "zookeeper" + "wpaperd": "wpaperd" } }, "rust-overlay": { @@ -1913,42 +1765,6 @@ "type": "github" } }, - "treefmt-nix_5": { - "inputs": { - "nixpkgs": "nixpkgs_8" - }, - "locked": { - "lastModified": 1758728421, - "narHash": "sha256-ySNJ008muQAds2JemiyrWYbwbG+V7S5wg3ZVKGHSFu8=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "5eda4ee8121f97b218f7cc73f5172098d458f1d1", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "treefmt-nix_6": { - "inputs": { - "nixpkgs": "nixpkgs_9" - }, - "locked": { - "lastModified": 1760120816, - "narHash": "sha256-gq9rdocpmRZCwLS5vsHozwB6b5nrOBDNc2kkEaTXHfg=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "761ae7aff00907b607125b2f57338b74177697ed", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, "tuios": { "inputs": { "devshell": "devshell", @@ -1976,28 +1792,6 @@ "type": "github" } }, - "upRootNutrition": { - "inputs": { - "flake-parts": "flake-parts_7", - "mkElmDerivation": "mkElmDerivation_2", - "nixpkgs": "nixpkgs_7", - "nixpkgs-stable": "nixpkgs-stable_4", - "treefmt-nix": "treefmt-nix_5" - }, - "locked": { - "lastModified": 1761538643, - "narHash": "sha256-467x2JQVdMGnCuAn0Ci2MnRMYg7UwGtYywdI4Tyz4A8=", - "ref": "refs/heads/main", - "rev": "ab8a9b6ed63be60c3fd2f49ea2add13a40790c51", - "revCount": 255, - "type": "git", - "url": "ssh://git@gitlab.com/uprootnutrition/website.git" - }, - "original": { - "type": "git", - "url": "ssh://git@gitlab.com/uprootnutrition/website.git" - } - }, "waybar": { "inputs": { "flake-compat": "flake-compat_5", @@ -2114,28 +1908,6 @@ "repo": "xwayland-satellite", "type": "github" } - }, - "zookeeper": { - "inputs": { - "flake-parts": "flake-parts_8", - "nixpkgs": [ - "nixpkgs" - ], - "treefmt-nix": "treefmt-nix_6" - }, - "locked": { - "lastModified": 1763275059, - "narHash": "sha256-ovKjevjjHhWqkq8iP3nvnoRwOQGX2hVGthykrDwR7LY=", - "ref": "refs/heads/main", - "rev": "940000066b81f4c7cb277f4f23ab4a0e32b8ce77", - "revCount": 9, - "type": "git", - "url": "ssh://git@gitlab.com/uprootnutrition/zookeeper.git" - }, - "original": { - "type": "git", - "url": "ssh://git@gitlab.com/uprootnutrition/zookeeper.git" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 4c4d320..fa3799c 100755 --- a/flake.nix +++ b/flake.nix @@ -76,9 +76,6 @@ url = "github:microvm-nix/microvm.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; - upRootNutrition = { - url = "git+ssh://git@gitlab.com/uprootnutrition/website.git"; - }; linkpage = { url = "git+ssh://git@gitlab.com/uprootnutrition/linkpage.git"; }; @@ -86,8 +83,8 @@ url = "git+ssh://git@gitlab.com/uprootnutrition/filesorter.git"; inputs.nixpkgs.follows = "nixpkgs"; }; - zookeeper = { - url = "git+ssh://git@gitlab.com/uprootnutrition/zookeeper.git"; + mkElmDerivation = { + url = "github:jeslie0/mkElmDerivation"; inputs.nixpkgs.follows = "nixpkgs"; }; }; @@ -99,6 +96,7 @@ inputs.treefmt-nix.flakeModule ./lib ./modules + ./packages ./parts ]; diff --git a/modules/home/cli/fun/mpd/default.nix b/modules/home/cli/fun/mpd/default.nix index 47ba57b..aee45c1 100755 --- a/modules/home/cli/fun/mpd/default.nix +++ b/modules/home/cli/fun/mpd/default.nix @@ -22,7 +22,7 @@ format = { hosts = [ "localhost:6600" ]; details = "$title"; - state = "🥒💦$artist"; + state = "$artist"; display_type = "state"; }; }; @@ -38,4 +38,20 @@ }; }; }; + + systemd.user.services.mpd-discord-rpc = { + Unit = { + After = [ + "mpd.service" + "graphical-session.target" + ]; + Requires = [ "mpd.service" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Restart = "on-failure"; + RestartSec = "10s"; + }; + }; + } diff --git a/modules/nixos/guests/website/default.nix b/modules/nixos/guests/website/default.nix index f873f93..d175677 100755 --- a/modules/nixos/guests/website/default.nix +++ b/modules/nixos/guests/website/default.nix @@ -2,6 +2,7 @@ config, flake, pkgs, + lib, ... }: let @@ -9,8 +10,7 @@ let inherit (flake.config.services) instances; serviceCfg = instances.upRootNutrition; host = serviceCfg.domains.url0; - websitePkg = - flake.inputs.upRootNutrition.packages.${pkgs.stdenv.hostPlatform.system}.websiteFrontend; + websitePkg = flake.self.packages.${pkgs.system}.website; in { microvm.vms.${serviceCfg.name} = { @@ -25,16 +25,20 @@ in enable = true; settings.PasswordAuthentication = false; }; + environment.etc."website".source = websitePkg; + users.users.root.openssh.authorizedKeys.keys = flake.config.people.users.${user0}.sshKeys; - systemd.network = { - enable = true; - networks."10-enp" = { - matchConfig.Name = "enp0s3"; - addresses = [ - { Address = "${serviceCfg.interface.ip}/24"; } - ]; - gateway = [ serviceCfg.interface.gate ]; + systemd = { + network = { + enable = true; + networks."10-enp" = { + matchConfig.Name = "enp0s3"; + addresses = [ + { Address = "${serviceCfg.interface.ip}/24"; } + ]; + gateway = [ serviceCfg.interface.gate ]; + }; }; }; services.caddy = { @@ -46,8 +50,8 @@ in ''; }; microvm = { - vcpu = 2; - mem = 3072; + vcpu = 1; + mem = 1024; hypervisor = "qemu"; interfaces = [ { diff --git a/modules/nixos/guests/zookeeper/default.nix b/modules/nixos/guests/zookeeper/default.nix index 069183c..97859b0 100755 --- a/modules/nixos/guests/zookeeper/default.nix +++ b/modules/nixos/guests/zookeeper/default.nix @@ -1,5 +1,7 @@ { flake, + pkgs, + lib, ... }: let @@ -16,33 +18,30 @@ in config = { system.stateVersion = "24.05"; time.timeZone = "America/Winnipeg"; - imports = [ - flake.inputs.zookeeper.nixosModules.default - ]; users.users.root.openssh.authorizedKeys.keys = flake.config.people.users.${user0}.sshKeys; - services = { - zookeeperbot.enable = true; - openssh = { - enable = true; - settings = { - PasswordAuthentication = false; - PermitRootLogin = "prohibit-password"; - }; - }; + services.openssh = { + enable = true; + settings.PasswordAuthentication = false; }; - - networking.firewall.allowedTCPPorts = [ - 22 - ]; - + networking.firewall.allowedTCPPorts = [ 22 ]; systemd = { + services = { + zookeeper = { + serviceConfig = { + ExecStart = lib.getExe flake.self.packages.${pkgs.system}.zookeeper; + Restart = "always"; + RestartSec = 2; + EnvironmentFile = "/run/secrets/env"; + }; + wantedBy = [ "multi-user.target" ]; + }; + systemd-networkd.wantedBy = [ "multi-user.target" ]; + }; network = { enable = true; networks."20-lan" = { - matchConfig.Name = "enp0s5"; - addresses = [ - { Address = "${serviceCfg.interface.ip}/24"; } - ]; + matchConfig.Name = "enp0s3"; + addresses = [ { Address = "${serviceCfg.interface.ip}/24"; } ]; routes = [ { Destination = "${hostCfg.localhost.address1}/0"; @@ -55,18 +54,10 @@ in ]; }; }; - - tmpfiles.rules = [ - "Z ${serviceCfg.varPaths.path0} 0755 ${serviceCfg.name} ${serviceCfg.name} -" - ]; - }; - - systemd.services.systemd-networkd.wantedBy = [ "multi-user.target" ]; - microvm = { - vcpu = 2; - mem = 3072; + vcpu = 1; + mem = 1024; hypervisor = "qemu"; interfaces = [ { @@ -105,12 +96,10 @@ in }; }; }; - sops.secrets = { "${serviceCfg.name}/env" = { owner = "root"; mode = "0600"; }; }; - } diff --git a/packages/default.nix b/packages/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/packages/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/packages/website/default.nix b/packages/website/default.nix new file mode 100755 index 0000000..abe8e66 --- /dev/null +++ b/packages/website/default.nix @@ -0,0 +1,51 @@ +{ + inputs, + lib, + ... +}: +{ + perSystem = + { pkgs, system, ... }: + { + devShells.website = pkgs.mkShell { + buildInputs = builtins.attrValues { + inherit (pkgs) nil; + inherit (inputs.nixpkgs-stable.legacyPackages.${system}.elmPackages) + elm + elm-format + elm-land + elm-language-server + elm-review + elm-test + ; + }; + }; + + packages = + let + pkgs' = pkgs.extend inputs.mkElmDerivation.overlays.mkElmDerivation; + in + { + website = pkgs'.mkElmDerivation { + name = "upRootNutrition"; + src = ./frontend; + + nativeBuildInputs = builtins.attrValues { + inherit (inputs.nixpkgs-stable.legacyPackages.${system}.elmPackages) + elm + elm-land + ; + }; + + buildPhase = '' + ${lib.getExe pkgs'.elm-land} build + ''; + + installPhase = '' + mkdir -p "$out" + cp -r dist/* "$out/" + ''; + }; + }; + }; +} diff --git a/packages/website/frontend/.gitignore b/packages/website/frontend/.gitignore new file mode 100755 index 0000000..7295c4f --- /dev/null +++ b/packages/website/frontend/.gitignore @@ -0,0 +1,7 @@ +/dist +/.elm-land +/.env +/elm-stuff +/node_modules +.DS_Store +*.pem \ No newline at end of file diff --git a/packages/website/frontend/README.md b/packages/website/frontend/README.md new file mode 100755 index 0000000..35f05d1 --- /dev/null +++ b/packages/website/frontend/README.md @@ -0,0 +1,17 @@ +# frontend + +> Built with [Elm Land](https://elm.land) 🌈 + +## Local development + +```bash +# Requires Node.js v18+ (https://nodejs.org) +npx elm-land server +``` + +## Deploying to production + +Elm Land projects are most commonly deployed as static websites. + +Please visit [the "Deployment" guide](https://elm.land/guide/deploying) to learn more +about deploying your app for free using Netlify or Vercel. diff --git a/packages/website/frontend/elm-land.json b/packages/website/frontend/elm-land.json new file mode 100755 index 0000000..0e22621 --- /dev/null +++ b/packages/website/frontend/elm-land.json @@ -0,0 +1,76 @@ +{ + "app": { + "elm": { + "development": { "debugger": true }, + "production": { "debugger": false } + }, + "env": [], + "html": { + "attributes": { + "html": { "lang": "en" }, + "head": {} + }, + "title": "upRootNutrition", + "meta": [ + { "charset": "UTF-8" }, + { "http-equiv": "X-UA-Compatible", "content": "IE=edge" }, + { + "name": "viewport", + "content": "width=device-width, initial-scale=1.0" + }, + { + "property": "og:title", + "content": "upRootNutrition" + }, + { + "property": "og:image", + "content": "/assets/meta.png" + }, + { + "property": "og:url", + "content": "https://upRootNutrition.com" + }, + { + "name": "twitter:card", + "content": "summary_large_image" + }, + { + "name": "twitter:title", + "content": "upRootNutrition" + }, + { + "name": "twitter:description", + "content": "upRootNutrition is an open source project, created by Nick Hiebert, designed to elevate the quality of nutrition science communication in online discourse. By applying more rigorous systems of reasoning, such as formal logic and semantic analysis, upRootNutrition aims to cut through the misinformation and sophistry that are endemic on social media." + }, + { + "name": "twitter:image", + "content": "https://upRootNutrition.com/assets/twittercard.png" + }, + { + "name": "twitter:site", + "content": "@upRootNutrition" + }, + { + "name": "twitter:creator", + "content": "@upRootNutrition" + }, + { + "property": "og:description", + "content": "upRootNutrition is an open source project, created by Nick Hiebert, designed to elevate the quality of nutrition science communication in online discourse. By applying more rigorous systems of reasoning, such as formal logic and semantic analysis, upRootNutrition aims to cut through the misinformation and sophistry that are endemic on social media." + } + ], + "link": [ + { "rel": "icon", "type": "png", "href": "/assets/favicon.png" }, + { "rel": "stylesheet", "href": "/styles.css" }, + { + "rel": "stylesheet", + "href": "https://fonts.googleapis.com/css2?family=League+Spartan:wght@100..900&display=swap" + } + ], + "script": [] + }, + "router": { + "useHashRouting": false + } + } +} diff --git a/packages/website/frontend/elm.json b/packages/website/frontend/elm.json new file mode 100755 index 0000000..ee3a344 --- /dev/null +++ b/packages/website/frontend/elm.json @@ -0,0 +1,35 @@ +{ + "type": "application", + "source-directories": [ + "src", + ".elm-land/src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "dillonkearns/elm-markdown": "7.0.1", + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0", + "elm/json": "1.1.3", + "elm/svg": "1.0.1", + "elm/url": "1.0.0", + "elm-community/list-extra": "8.7.0", + "elm-community/maybe-extra": "5.3.0", + "hecrj/html-parser": "2.4.0", + "juliusl/elm-ui-hexcolor": "1.0.0", + "mdgriffith/elm-ui": "1.1.8" + }, + "indirect": { + "elm/parser": "1.1.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3", + "rtfeldman/elm-hex": "1.0.0" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/packages/website/frontend/review/elm.json b/packages/website/frontend/review/elm.json new file mode 100755 index 0000000..fd4ba17 --- /dev/null +++ b/packages/website/frontend/review/elm.json @@ -0,0 +1,39 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/core": "1.0.5", + "elm/json": "1.1.3", + "elm/project-metadata-utils": "1.0.2", + "jfmengels/elm-review": "2.14.1", + "jfmengels/elm-review-code-style": "1.2.0", + "jfmengels/elm-review-common": "1.3.3", + "jfmengels/elm-review-debug": "1.0.8", + "jfmengels/elm-review-documentation": "2.0.4", + "jfmengels/elm-review-simplify": "2.1.5", + "jfmengels/elm-review-unused": "1.2.3", + "stil4m/elm-syntax": "7.3.7" + }, + "indirect": { + "elm/bytes": "1.0.8", + "elm/html": "1.0.0", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3", + "elm-explorations/test": "2.2.0", + "pzp1997/assoc-list": "1.0.0", + "rtfeldman/elm-hex": "1.0.0", + "stil4m/structured-writer": "1.0.3" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} \ No newline at end of file diff --git a/packages/website/frontend/review/src/ReviewConfig.elm b/packages/website/frontend/review/src/ReviewConfig.elm new file mode 100755 index 0000000..2a3a988 --- /dev/null +++ b/packages/website/frontend/review/src/ReviewConfig.elm @@ -0,0 +1,58 @@ +module ReviewConfig exposing (config) + +{-| Do not rename the ReviewConfig module or the config function, because +`elm-review` will look for these. + +To add packages that contain rules, add them to this review project using + + `elm install author/packagename` + +when inside the directory containing this file. + +-} + +import Docs.ReviewAtDocs +import NoConfusingPrefixOperator +import NoDebug.Log +import NoDebug.TodoOrToString +import NoExposingEverything +import NoImportingEverything +import NoMissingTypeAnnotation +import NoMissingTypeAnnotationInLetIn +import NoMissingTypeExpose +import NoPrematureLetComputation +import NoSimpleLetBody +import NoUnused.CustomTypeConstructorArgs +import NoUnused.CustomTypeConstructors +import NoUnused.Dependencies +import NoUnused.Exports +import NoUnused.Parameters +import NoUnused.Patterns +import NoUnused.Variables +import Review.Rule as Rule exposing (Rule) +import Simplify + + +config : List Rule +config = + [ Docs.ReviewAtDocs.rule + , NoConfusingPrefixOperator.rule + , NoDebug.Log.rule + , NoDebug.TodoOrToString.rule + |> Rule.ignoreErrorsForDirectories [ "tests/" ] + , NoExposingEverything.rule + , NoImportingEverything.rule [] + , NoMissingTypeAnnotation.rule + , NoMissingTypeAnnotationInLetIn.rule + , NoMissingTypeExpose.rule + , NoSimpleLetBody.rule + , NoPrematureLetComputation.rule + , NoUnused.CustomTypeConstructors.rule [] + , NoUnused.CustomTypeConstructorArgs.rule + , NoUnused.Dependencies.rule + , NoUnused.Exports.rule + , NoUnused.Parameters.rule + , NoUnused.Patterns.rule + , NoUnused.Variables.rule + , Simplify.rule Simplify.defaults + ] diff --git a/packages/website/frontend/scripts/directoryconverter.sh b/packages/website/frontend/scripts/directoryconverter.sh new file mode 100755 index 0000000..8e4db34 --- /dev/null +++ b/packages/website/frontend/scripts/directoryconverter.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +for file in *; do + # Check if it's a file (not a directory) + if [ -f "$file" ]; then + # Get filename without extension + dirname="${file%.*}" + + # Create directory if it doesn't exist + if [ ! -d "$dirname" ]; then + mkdir "$dirname" + echo "Created directory: $dirname" + fi + + # Move the file into its directory + mv "$file" "$dirname/" + echo "Moved $file to $dirname/" + fi +done \ No newline at end of file diff --git a/packages/website/frontend/scripts/imagedownloader.sh b/packages/website/frontend/scripts/imagedownloader.sh new file mode 100755 index 0000000..d0300fa --- /dev/null +++ b/packages/website/frontend/scripts/imagedownloader.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +if [ $# -eq 0 ]; then + echo "Usage: $0 " + exit 1 +fi + +# Create a directory to store images +mkdir -p downloaded_images +cd downloaded_images + +# Counter for image naming, start at 1 +counter=1 + +# Extract image URLs and download +wget -q -O- "$1" | grep -oE 'https?://[^"]+\.(jpg|jpeg|png|gif)' | while read -r img_url; do + # Download image + wget -q "$img_url" -O "temp_image" + + # Get image width using file size and basic check (approximate) + width=$(file "temp_image" | grep -oE '[0-9]+ x [0-9]+' | cut -d' ' -f1) + + # Check if width is over 400 + if [ -n "$width" ] && [ "$width" -gt 400 ]; then + # Rename to sequential PNG starting from image1.png + mv "temp_image" "image$counter.png" + ((counter++)) + else + # Remove images that don't meet criteria + rm "temp_image" + fi +done + +echo "Downloaded $((counter-1)) images larger than 400px wide" \ No newline at end of file diff --git a/packages/website/frontend/src/Config/Data/Hashtags/Helpers.elm b/packages/website/frontend/src/Config/Data/Hashtags/Helpers.elm new file mode 100755 index 0000000..4fec7b5 --- /dev/null +++ b/packages/website/frontend/src/Config/Data/Hashtags/Helpers.elm @@ -0,0 +1,1282 @@ +module Config.Data.Hashtags.Helpers exposing (hashtagList) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) + + +hashtagList : Hashtags -> String +hashtagList hashtag = + case hashtag of + Agriculture -> + "#agriculture" + + AgricultureAnimal -> + "#animal_agirculture" + + AgriculturePlant -> + "#plant_agirculture" + + AllCauseMortality -> + "#all_cause_mortality" + + AncestryAntagonisticPleiotropy -> + "#antogonistic_pleiotropy" + + AncestryHunterGatherers -> + "#hunter_gatherers" + + AncestryPrimitiveCultures -> + "#primitive_cultures" + + Animals -> + "#animals" + + AnimalsBivalves -> + "#vbivalves" + + AnimalsCats -> + "#cats" + + AnimalsChickens -> + "#chickens" + + AnimalsCrustaceans -> + "#crustaceans" + + AnimalsDogs -> + "#dogs" + + AnimalsOrca -> + "#orcas" + + AnimalsPredators -> + "#predators" + + AnimalsShellfish -> + "#shellfish" + + Assays4E6 -> + "#4E6_assay" + + AssaysE06 -> + "#E06_assay" + + BloodGlucose -> + "#blood_glucose" + + BloodLipids -> + "#blood_lipids" + + BloodLipidsCholesterol -> + "#cholesterol" + + BloodLipidsTriglycerides -> + "#triglycerides" + + Cancer -> + "#cancer" + + CancerBladderCancer -> + "#bladder_cancer" + + CancerBreastCancer -> + "#breast_cancer" + + CancerColonCancer -> + "#colon_cancer" + + CancerColorectalCancer -> + "#colorectal_cancer" + + CancerDistalColonCancer -> + "#distal_colon_cancer" + + CancerEndometrialCancer -> + "#endometrial_cancer" + + CancerEsophagealCancer -> + "#esophageal_cancer" + + CancerGasticCancer -> + "#gastric_cancer" + + CancerLungCancer -> + "#lung_cancer" + + CancerOvarianCancer -> + "#ovarian_cancer" + + CancerPancreaticCancer -> + "#pancreatic_cancer" + + CancerProstateCancer -> + "#prostate_cancer" + + CancerRectalCancer -> + "#rectal_cancer" + + CancerSkinCancer -> + "#skin_cancer" + + CancerStomachCancer -> + "#stomach_cancer" + + Carbohydrates -> + "#carbohydrates" + + CarbohydratesFructose -> + "#fructose" + + CarbohydratesGlucose -> + "#glucose" + + CarbohydratesSugar -> + "#sugar" + + Cuckery -> + "#cuckery" + + CuckeryFlatEarth -> + "#flat_earth_retardation" + + CuckeryLMHR -> + "#lmhr_retardation" + + CuckPapers -> + "#published_retardation" + + Cucks -> + "#cucks" + + Debate -> + "#debate" + + DebateArguments -> + "#debate_arguments" + + DebateCoursework -> + "#debate_coursework" + + DebateModeration -> + "#debate_moderation" + + DebateOpponents -> + "#debate_opponents" + + DietsAncestral -> + "#ancestral_diet" + + DietsAnimalBased -> + "#animal_based_diet" + + DietsCarnivore -> + "#carnivore_diet" + + DietsDietaryGuidelines -> + "#dietary_guidelines_diet" + + DietsEucaloric -> + "#eucaloric_diet" + + DietsFasting -> + "#fasting_diet" + + DietsHighCarbohydrate -> + "#high_carb_diet" + + DietsHypercaloric -> + "#hypercaloric_diet" + + DietsHypocaloric -> + "#hypocaloric_diet" + + DietsKeto -> + "#ketogenic_diet" + + DietsLowCarbohydrate -> + "#low_carb_diet" + + DietsMediterraneanDiet -> + "#mediterranean_diet" + + DietsPaleo -> + "#paleo_diet" + + DietsPlantBased -> + "#plant_based_diet" + + DietsStandardAmericanDiet -> + "#standard_american_diet" + + DietsTimeRestrictedFeeding -> + "#time_restricted_feeding" + + DietsVegetarian -> + "#vegetarian_diet" + + Disease -> + "#disease" + + DiseaseAFib -> + "#afib" + + DiseaseAnemia -> + "#anemia" + + DiseaseArrythmia -> + "#arrythmia" + + DiseaseAtherosclerosis -> + "#atherosclerosis" + + DiseaseAutoImmune -> + "#auto_immune_disease" + + DiseaseBronchitis -> + "#bronchitis" + + DiseaseCardiovascular -> + "#cardiovascular_disease" + + DiseaseCeliacDisease -> + "#celiac_disease" + + DiseaseCholestasis -> + "#cholestasis" + + DiseaseCognitiveDecline -> + "#cognitive_decline" + + DiseaseColonPolyops -> + "#colon_polyps" + + DiseaseConstipation -> + "#constipation" + + DiseaseCoronaryArteryCalcification -> + "#coronary_artery_calcification" + + DiseaseCoronaryHeart -> + "#coronary_heart_disease" + + DiseaseCOVID19 -> + "#covid19" + + DiseaseDementia -> + "#dementia" + + DiseaseDepression -> + "#depression" + + DiseaseDisability -> + "#disability" + + DiseaseDiverticularDisease -> + "#diverticular_disease" + + DiseaseEmphysema -> + "#emphysema" + + DiseaseErectileDysfunction -> + "#erectile_dysfunction" + + DiseaseFracture -> + "#bone_fracture" + + DiseaseFrailty -> + "#frailty" + + DiseaseGallstones -> + "#gallstones" + + DiseaseHeartAttack -> + "#heart_attack" + + DiseaseHeartDisease -> + "#heart_disease" + + DiseaseHeartFailure -> + "#heart_failure" + + DiseaseHyperphagia -> + "#hyperphagia" + + DiseaseHypertensions -> + "#hypertension" + + DiseaseHypothyroidism -> + "#hypothyroidism" + + DiseaseInflammation -> + "#inflammation" + + DiseaseKidneyDisease -> + "#kidney_disease" + + DiseaseKidneyStones -> + "#kidney_stones" + + DiseaseLupus -> + "#lupus" + + DiseaseMacularDegeneration -> + "#macular_degeneration" + + DiseaseMentalIllness -> + "#mental_illness" + + DiseaseMetabolicSyndrome -> + "#metabolic_syndrome" + + DiseaseMoodDisorders -> + "#mood_disorder" + + DiseaseMortality -> + "#mortality" + + DiseaseNAFLD -> + "#non_alcoholic_fatty_liver_disease" + + DiseaseNeuroDegenerative -> + "#neurodegeneration" + + DiseaseNutrientDeficiency -> + "#nutrient_deficiency" + + DiseaseObesity -> + "#obesity" + + DiseaseOsteoporosis -> + "#osteoporosis" + + DiseaseOverweight -> + "#overweight" + + DiseaseRespiratoryDisease -> + "#respiratory_disease" + + DiseaseSchizophrenia -> + "#schizophrenia" + + DiseaseScurvy -> + "#scurvy" + + DiseaseSepsis -> + "#sepsis" + + DiseaseStenosis -> + "#stenosis" + + DiseaseStroke -> + "#stroke" + + DiseaseSunburn -> + "#sunburn" + + DiseaseThrombosis -> + "#thrombosis" + + DiseaseTinnitus -> + "#tinnitus" + + DiseaseType1Diabetes -> + "#type_1_diabetes" + + DiseaseType2Diabetes -> + "#type_2_diabetes" + + DiseaseUlcerativeColitis -> + "#ulcerative_colitis" + + DiseaseUnderweight -> + "#underweight" + + DiseaseVisionLoss -> + "#vision_loss" + + Evolution -> + "#evolution" + + Exercise -> + "#exercise" + + ExerciseAgility -> + "#agility" + + ExerciseFitness -> + "#fitness" + + ExerciseHypertrophy -> + "#muscle_hypertrophy" + + Fallacies -> + "#logical_fallacies" + + FallaciesAppealFromIncredulity -> + "#appeal_from_incredulity" + + FallaciesAppealToAuthority -> + "#appeal_to_authority" + + FallaciesAppealToIgnorance -> + "#appeal_to_ignorance" + + FallaciesAppealToNature -> + "#appeal_to_nature" + + FallaciesBeggingTheQuestion -> + "#begging_the_question" + + FallaciesEcological -> + "#ecological_fallacy" + + FallaciesEquivocation -> + "#equivocation" + + FallaciesGeneticFallacy -> + "#genetic_fallacy" + + FallaciesMechanisticSpeculation -> + "#mechanistic_speculation" + + FallaciesMuddyingTheWaters -> + "#muddying_the_waters" + + FallaciesRedHerring -> + "#red_herring" + + FallaciesStrawman -> + "#strawman" + + FatMonounsaturated -> + "#monounsaturated_fat" + + FatPolyunsaturated -> + "#polyunsaturated_fat" + + FatsAnimal -> + "#animal_fat" + + FatsArachidonicAcid -> + "#arachidonic_acid" + + FatSaturated -> + "#saturated_fat" + + FatsDHA -> + "#docosahexaenoic_acid" + + FatsDietary -> + "#dietary_fat" + + FatsEPA -> + "#eicosapentaenoic_acid" + + FatsLinoleicAcid -> + "#linoleic_acid" + + FatsMCTs -> + "#medium_chain_triglycerides" + + FatsOmega3 -> + "#omega_3" + + FatsOmega6 -> + "#omega_6" + + FatsPlant -> + "#plant_fat" + + FatsStearicAcid -> + "#stearic_acid" + + FatsTrans -> + "#trans_fat" + + FoodsAlmonds -> + "#almonds" + + FoodsAnimal -> + "#animal_food" + + FoodsAvocado -> + "#avocado" + + FoodsBeef -> + "#beef" + + FoodsBread -> + "#bread" + + FoodsBreakfastCereals -> + "#breakfast_cereal" + + FoodsBreastMilk -> + "#breast_milk" + + FoodsBrewedDrinks -> + "#brewed_drink" + + FoodsButter -> + "#butter" + + FoodsCanolaOil -> + "#canola_oil" + + FoodsCereals -> + "#cereal" + + FoodsCheese -> + "#cheese" + + FoodsChocolate -> + "#chocolate" + + FoodsCoconutOil -> + "#coconut_oil" + + FoodsCoffee -> + "#coffee" + + FoodsCulturedMeat -> + "#cultured_meat" + + FoodsDairy -> + "#dairy" + + FoodsEggs -> + "#eggs" + + FoodsFermentedFoods -> + "#fermented_foods" + + FoodsFish -> + "#fish" + + FoodsFishOil -> + "#fish_oil" + + FoodsFlaxseeds -> + "#flaxseeds" + + FoodsFrenchFries -> + "#french_fries" + + FoodsFriedFoods -> + "#fried_foods" + + FoodsFruit -> + "#fruit" + + FoodsGoldenRice -> + "#golden_rice" + + FoodsGreenTea -> + "#green_tea" + + FoodsHazelnuts -> + "#hazelnuts" + + FoodsJuice -> + "#juice" + + FoodsLegumes -> + "#legumes" + + FoodsMargarine -> + "#margarine" + + FoodsMayonnaise -> + "#mayonnaise" + + FoodsMeat -> + "#meat" + + FoodsMilk -> + "#milk" + + FoodsMockMeats -> + "#mock_meat" + + FoodsMushroom -> + "#mushrooms" + + FoodsNuts -> + "#nuts" + + FoodsOats -> + "#oats" + + FoodsOliveOil -> + "#olive_oil" + + FoodsOrgans -> + "#organ_meat" + + FoodsPalmOil -> + "#palm_oil" + + FoodsPlant -> + "#plant_food" + + FoodsPork -> + "#pork" + + FoodsPotatoes -> + "#potatoes" + + FoodsPoultry -> + "#poultry" + + FoodsProcessedFood -> + "#processed_food" + + FoodsProcessedMeat -> + "#processed_meat" + + FoodsRedMeat -> + "#red_meat" + + FoodsRefinedGrains -> + "#refined_grains" + + FoodsSeafood -> + "#seafood" + + FoodsSeedOils -> + "#seed_oils" + + FoodsSoybeanOil -> + "#soybean_oil" + + FoodsSoyProducts -> + "#soy_products" + + FoodsSugarSweetenedBeverages -> + "#sugar_sweetened_beverages" + + FoodsTofu -> + "#tofu" + + FoodsTomatoes -> + "#tomato" + + FoodsTurmeric -> + "#turmeric" + + FoodsUltraProcessed -> + "#ultraprocessed_food" + + FoodsVegetables -> + "#vegetables" + + FoodsWalnuts -> + "#walnuts" + + FoodsWheat -> + "#wheat" + + FoodsWhey -> + "#whey" + + FoodsWhiteMeat -> + "#white_meat" + + FoodsWholeFoods -> + "#whole_foods" + + FoodsWholeGrains -> + "#whole_grains" + + FoodsYeast -> + "#yeast" + + FoodsYogurt -> + "#yogurt" + + HealthAnthropometrics -> + "#anthropometrics" + + HealthBodyWeight -> + "#body_weight" + + HealthDigestion -> + "#digestion" + + HealthEnergyIntake -> + "#energy_intake" + + HealthFertility -> + "#fertility" + + HealthGutHealth -> + "#gut_health" + + HealthLifestyle -> + "#lifestyle" + + HealthLongevity -> + "#longevity" + + HealthMasturbation -> + "#masturbation" + + HealthNutritionalStatus -> + "#nutritional_status" + + HealthSelfImprovement -> + "#self_improvement" + + HealthSkin -> + "#skin_health" + + HealthSmoking -> + "#smoking" + + HealthSunlight -> + "#sunlight" + + HealthTattooing -> + "#tattoos" + + HealthWeightGain -> + "#weight_gain" + + HealthWeightLoss -> + "#weight_loss" + + Humans -> + "#humans" + + HumansAdolescents -> + "#adolescents" + + HumansChildDevelopment -> + "#child_development" + + HumansChildren -> + "#children" + + HumansFemaleHealth -> + "#female_health" + + HumansGrowth -> + "#human_growth" + + HumansInfants -> + "#infants" + + HumansMaleHealth -> + "#male_health" + + HumansTransGender -> + "#transgender" + + LipoProteinsApoA -> + "#apoa" + + LipoProteinsApoB -> + "#apob" + + LipoproteinsChylomicrons -> + "#chylomicrons" + + LipoProteinsHighDensity -> + "#high_density_lipoproteins" + + LipoProteinsLowDensity -> + "#low_density_lipoproteins" + + LipoProteinsLPA -> + "#lpa" + + LipoProteinsNonHDL -> + "#non_hdl_cholesterol" + + LipoProteinsOxidizedLowDensity -> + "#oxidized_low_density_lipoproteins" + + LipoProteinsVeryLowDensity -> + "#very_low_density_lipoproteins" + + MarkersAbdominalFat -> + "#abdominal_fat" + + MarkersAcrylamide -> + "#acrylamide" + + MarkersAutoAntibodies -> + "#auto_antibodies" + + MarkersBiomarkers -> + "#biomarkers" + + MarkersBloodPressure -> + "#blood_pressure" + + MarkersBMI -> + "#body_mass_index" + + MarkersBodyOdour -> + "#body_odour" + + MarkersBoneMineralDensity -> + "#bone_mineral_density" + + MarkersCognitiveFunction -> + "#cognitive_function" + + MarkersCReactiveProtein -> + "#c_reactive_protein" + + MarkersEndothelialFunction -> + "#endothelial_function" + + MarkersEnergyExpenditure -> + "#energy_expenditure" + + MarkersFlowMediatedDilation -> + "#flow_mediated_dilation" + + MarkersGlucoseTolerance -> + "#glucose_tolerance" + + MarkersHbA1C -> + "#hba1c" + + MarkersHeartRate -> + "#heart_rate" + + MarkersHOMAIR -> + "#homa_ir" + + MarkersHormones -> + "#hormones" + + MarkersIGF1 -> + "#igf1" + + MarkersImmuneFunction -> + "#immune_function" + + MarkersInsulin -> + "#insulin" + + MarkersInsulinSensitivity -> + "#insulin_sensitivity" + + MarkersInterleukin6 -> + "#interleukin_6" + + MarkersKetones -> + "#ketones" + + MarkersLiverEnzymes -> + "#liver_enzymes" + + MarkersLiverFunction -> + "#liver_function" + + MarkersLPS -> + "#lipopolysaccharide" + + MarkersMalondialdehyde -> + "#malondialdehyde" + + MarkersMicrobiome -> + "#microbiome" + + MarkersOxidativeStress -> + "#oxidative_stress" + + MarkersPCSK9 -> + "#pcsk9" + + MarkersSatiety -> + "#satiety" + + MarkersSexHormones -> + "#sex_hormones" + + MarkersSNPs -> + "#single_nucleotide_polymorphism" + + MarkersTestosterone -> + "#testosterone" + + MarkersTMAO -> + "#tmao" + + MarkersTNF -> + "#tumour_necrosis_factor" + + MarkersVisceralFat -> + "#visceral_fat" + + MedicationsCETPInhibitors -> + "#cetp_inhibitors" + + MedicationsPCSK9Inhibitors -> + "#pcsk9_inhibitors" + + MedicationsStatins -> + "#statins" + + Nutrients -> + "#nutrients" + + NutrientsAlcohol -> + "#alcohol" + + NutrientsAnimal -> + "#animal_nutrients" + + NutrientsAntiNutrient -> + "#anti_nutrients" + + NutrientsAntioxidants -> + "#antioxidants" + + NutrientsArtificialSweeteners -> + "#artificial_sweeteners" + + NutrientsB12 -> + "#vitamin_b12" + + NutrientsBetaCarotene -> + "#beta_carotene" + + NutrientsBioavailability -> + "#bioavailability" + + NutrientsBiotin -> + "#biotin" + + NutrientsCalcium -> + "#calcium" + + NutrientsCarotenoids -> + "#carotenoids" + + NutrientsCasein -> + "#casein" + + NutrientsCholine -> + "#choline" + + NutrientsCreatine -> + "#creatine" + + NutrientsDietaryCholesterol -> + "#dietary_cholesterol" + + NutrientsFat -> + "#dietary_fat" + + NutrientsFibre -> + "#fibre" + + NutrientsFibreInsoluble -> + "#insoluble_fibre" + + NutrientsFibreSoluble -> + "#soluble_fibre" + + NutrientsFODMAPs -> + "#fodmaps" + + NutrientsGluten -> + "#gluten" + + NutrientsGoitrogens -> + "#goitrogens" + + NutrientsIsoflavones -> + "#isoflavones" + + NutrientsK2 -> + "#vitamin_k2" + + NutrientsLCarnitine -> + "#l_carnitine" + + NutrientsLectins -> + "#lectins" + + NutrientsManganese -> + "#manganese" + + NutrientsMinerals -> + "#minerals" + + NutrientSodium -> + "#sodium" + + NutrientsOxalate -> + "#oxalate" + + NutrientsPhosphorus -> + "#phosphorus" + + NutrientsPhytate -> + "#phytate" + + NutrientsPhytoEstrogens -> + "#phytoestrogens" + + NutrientsPhytosterols -> + "#phytosterols" + + NutrientsPolyphenols -> + "#polyphenols" + + NutrientsSupplements -> + "#supplements" + + NutrientsTannins -> + "#tannins" + + NutrientsTaurine -> + "#taurine" + + NutrientsVitaminA -> + "#vitamin_A" + + NutrientsVitaminB5 -> + "#vimtain_b5" + + NutrientsVitaminB6 -> + "#vitamin_b6" + + NutrientsVitaminC -> + "#vitamin_c" + + NutrientsVitaminD -> + "#vitamin_d" + + NutrientsVitaminE -> + "#vitamin_e" + + Nutrition -> + "#nutrition" + + Philosophy -> + "#philosophy" + + PhilosophyAntiNatalism -> + "#antinatalism" + + PhilosophyAutopoiesis -> + "#autopoiesis" + + PhilosophyCausalInference -> + "#causal_inference" + + PhilosophyDeMorgansLaw -> + "#de_morgans_law" + + PhilosophyEfilism -> + "#efilism" + + PhilosophyEpistemology -> + "#epistemology" + + PhilosophyEthics -> + "#ethics" + + PhilosophyLinguisticPrescriptivism -> + "#linguistic_prescriptivism" + + PhilosophyModalLogic -> + "#model_logic" + + PhilosophyMoralRealism -> + "#moral_realism" + + PhilosophyMoralSubjectivism -> + "#moral_subjectivism" + + PhilosophyPredicateLogic -> + "#predicate_logic" + + PhilosophyPropositionalLogic -> + "#propositional_logic" + + PhilosophySentience -> + "#sentience" + + PhysiologyAdiposeTissue -> + "#adipose_tissue" + + PhysiologyAndrogens -> + "#androgens" + + PhysiologyDeNovoLipogenesis -> + "#de_novo_lipogenesis" + + PhysiologyEjaculation -> + "#ejaculation" + + PhysiologyGluconeogenesis -> + "#gluconeogenesis" + + PhysiologyGlycogen -> + "#glycogen" + + PhysiologyLPL -> + "#liproprotein_lipase" + + PhysiologyMetabolism -> + "#metabolism" + + PhysiologyPostMenopause -> + "#post_menopause" + + PhysiologyPreMenopause -> + "#pre_menopause" + + PhysiologySenescence -> + "#senescence" + + PhysiologySubendothelialSpace -> + "#subendothelial_space" + + PlantsAlgae -> + "#algae" + + PoliticsAbortion -> + "#abortion" + + PoliticsIsraelPalestine -> + "#israel_palestine" + + ProteinAnimal -> + "#animal_protein" + + ProteinPlant -> + "#plant_protein" + + Proteoglycans -> + "#proteoglycans" + + ResearchAnthropology -> + "#anthropology" + + ResearchArcheology -> + "#archeology" + + ResearchBradfordHill -> + "#bradford_hill" + + ResearchCardiology -> + "#cardiology" + + ResearchCaseControl -> + "#case_control_study" + + ResearchClimateScience -> + "#climate_science" + + ResearchClinicalTrials -> + "#clinical_trial" + + ResearchCohortStudies -> + "#prospective_cohort_study" + + ResearchDermatology -> + "#dermatology" + + ResearchDIAAS -> + "#diaas" + + ResearchDoseResponse -> + "#dose_response" + + ResearchEconomics -> + "#economics" + + ResearchEpidemiology -> + "#epidemiology" + + ResearchEvidenceHierarchy -> + "#evidence_hierarchy" + + ResearchFFQs -> + "#food_frequency_questionnaire" + + ResearchGenetics -> + "#genetics" + + ResearchGlycemicIndex -> + "#glycemic_index" + + ResearchGlycemicLoad -> + "#glycemic_load" + + ResearchImmunology -> + "#immunology" + + ResearchKinetics -> + "#kinetics" + + ResearchLipidology -> + "#lipidology" + + ResearchMendelianRandomization -> + "#mendelian_randomization" + + ResearchMetaAnalysis -> + "#meta_analysis" + + ResearchMetaRegression -> + "#meta_regression" + + ResearchMice -> + "#mice" + + ResearchMulticollinearity -> + "#multicollinearity" + + ResearchNutritionScience -> + "#nutrition_science" + + ResearchOphthalmology -> + "#ophthalmology" + + ResearchPDCAAS -> + "#pdcaas" + + ResearchPhysiology -> + "#physiology" + + ResearchPsychology -> + "#psychology" + + ResearchRandomizedControlledTrial -> + "#randomized_controlled_trial" + + ResearchSexuality -> + "#sexuality" + + ResearchSubstitionAnalysis -> + "#analysis" + + ResearchSurvivorshipBias -> + "#survivorship_bias" + + ResearchSystematicReview -> + "#systematic_review" + + ResearchVirology -> + "#virology" + + SocioEconomicStatus -> + "#economic_status" + + Veganism -> + "#veganism" + + VeganismCropDeaths -> + "#crop_deaths" + + VeganismNameTheTrait -> + "#name_the_trait" diff --git a/packages/website/frontend/src/Config/Data/Hashtags/Types.elm b/packages/website/frontend/src/Config/Data/Hashtags/Types.elm new file mode 100755 index 0000000..8f20474 --- /dev/null +++ b/packages/website/frontend/src/Config/Data/Hashtags/Types.elm @@ -0,0 +1,429 @@ +module Config.Data.Hashtags.Types exposing (Hashtags(..)) + + +type Hashtags + = Agriculture + | AgricultureAnimal + | AgriculturePlant + | AllCauseMortality + | AncestryAntagonisticPleiotropy + | AncestryHunterGatherers + | AncestryPrimitiveCultures + | Animals + | AnimalsBivalves + | AnimalsCats + | AnimalsChickens + | AnimalsCrustaceans + | AnimalsDogs + | AnimalsOrca + | AnimalsPredators + | AnimalsShellfish + | Assays4E6 + | AssaysE06 + | BloodGlucose + | BloodLipids + | BloodLipidsCholesterol + | BloodLipidsTriglycerides + | Cancer + | CancerBladderCancer + | CancerBreastCancer + | CancerColonCancer + | CancerColorectalCancer + | CancerDistalColonCancer + | CancerEndometrialCancer + | CancerEsophagealCancer + | CancerGasticCancer + | CancerLungCancer + | CancerOvarianCancer + | CancerPancreaticCancer + | CancerProstateCancer + | CancerRectalCancer + | CancerSkinCancer + | CancerStomachCancer + | Carbohydrates + | CarbohydratesFructose + | CarbohydratesGlucose + | CarbohydratesSugar + | Cuckery + | CuckeryFlatEarth + | CuckeryLMHR + | CuckPapers + | Cucks + | Debate + | DebateArguments + | DebateCoursework + | DebateModeration + | DebateOpponents + | DietsAncestral + | DietsAnimalBased + | DietsCarnivore + | DietsDietaryGuidelines + | DietsEucaloric + | DietsFasting + | DietsHighCarbohydrate + | DietsHypercaloric + | DietsHypocaloric + | DietsKeto + | DietsLowCarbohydrate + | DietsMediterraneanDiet + | DietsPaleo + | DietsPlantBased + | DietsStandardAmericanDiet + | DietsTimeRestrictedFeeding + | DietsVegetarian + | Disease + | DiseaseAFib + | DiseaseAnemia + | DiseaseArrythmia + | DiseaseAtherosclerosis + | DiseaseAutoImmune + | DiseaseBronchitis + | DiseaseCardiovascular + | DiseaseCeliacDisease + | DiseaseCholestasis + | DiseaseCognitiveDecline + | DiseaseColonPolyops + | DiseaseConstipation + | DiseaseCoronaryArteryCalcification + | DiseaseCoronaryHeart + | DiseaseCOVID19 + | DiseaseDementia + | DiseaseDepression + | DiseaseDisability + | DiseaseDiverticularDisease + | DiseaseEmphysema + | DiseaseErectileDysfunction + | DiseaseFracture + | DiseaseFrailty + | DiseaseGallstones + | DiseaseHeartAttack + | DiseaseHeartDisease + | DiseaseHeartFailure + | DiseaseHyperphagia + | DiseaseHypertensions + | DiseaseHypothyroidism + | DiseaseInflammation + | DiseaseKidneyDisease + | DiseaseKidneyStones + | DiseaseLupus + | DiseaseMacularDegeneration + | DiseaseMentalIllness + | DiseaseMetabolicSyndrome + | DiseaseMoodDisorders + | DiseaseMortality + | DiseaseNAFLD + | DiseaseNeuroDegenerative + | DiseaseNutrientDeficiency + | DiseaseObesity + | DiseaseOsteoporosis + | DiseaseOverweight + | DiseaseRespiratoryDisease + | DiseaseSchizophrenia + | DiseaseScurvy + | DiseaseSepsis + | DiseaseStenosis + | DiseaseStroke + | DiseaseSunburn + | DiseaseThrombosis + | DiseaseTinnitus + | DiseaseType1Diabetes + | DiseaseType2Diabetes + | DiseaseUlcerativeColitis + | DiseaseUnderweight + | DiseaseVisionLoss + | Evolution + | Exercise + | ExerciseAgility + | ExerciseFitness + | ExerciseHypertrophy + | Fallacies + | FallaciesAppealFromIncredulity + | FallaciesAppealToAuthority + | FallaciesAppealToIgnorance + | FallaciesAppealToNature + | FallaciesBeggingTheQuestion + | FallaciesEcological + | FallaciesEquivocation + | FallaciesGeneticFallacy + | FallaciesMechanisticSpeculation + | FallaciesMuddyingTheWaters + | FallaciesRedHerring + | FallaciesStrawman + | FatMonounsaturated + | FatPolyunsaturated + | FatsAnimal + | FatsArachidonicAcid + | FatSaturated + | FatsDHA + | FatsDietary + | FatsEPA + | FatsLinoleicAcid + | FatsMCTs + | FatsOmega3 + | FatsOmega6 + | FatsPlant + | FatsStearicAcid + | FatsTrans + | FoodsAlmonds + | FoodsAnimal + | FoodsAvocado + | FoodsBeef + | FoodsBread + | FoodsBreakfastCereals + | FoodsBreastMilk + | FoodsBrewedDrinks + | FoodsButter + | FoodsCanolaOil + | FoodsCereals + | FoodsCheese + | FoodsChocolate + | FoodsCoconutOil + | FoodsCoffee + | FoodsCulturedMeat + | FoodsDairy + | FoodsEggs + | FoodsFermentedFoods + | FoodsFish + | FoodsFishOil + | FoodsFlaxseeds + | FoodsFrenchFries + | FoodsFriedFoods + | FoodsFruit + | FoodsGoldenRice + | FoodsGreenTea + | FoodsHazelnuts + | FoodsJuice + | FoodsLegumes + | FoodsMargarine + | FoodsMayonnaise + | FoodsMeat + | FoodsMilk + | FoodsMockMeats + | FoodsMushroom + | FoodsNuts + | FoodsOats + | FoodsOliveOil + | FoodsOrgans + | FoodsPalmOil + | FoodsPlant + | FoodsPork + | FoodsPotatoes + | FoodsPoultry + | FoodsProcessedFood + | FoodsProcessedMeat + | FoodsRedMeat + | FoodsRefinedGrains + | FoodsSeafood + | FoodsSeedOils + | FoodsSoybeanOil + | FoodsSoyProducts + | FoodsSugarSweetenedBeverages + | FoodsTofu + | FoodsTomatoes + | FoodsTurmeric + | FoodsUltraProcessed + | FoodsVegetables + | FoodsWalnuts + | FoodsWheat + | FoodsWhey + | FoodsWhiteMeat + | FoodsWholeFoods + | FoodsWholeGrains + | FoodsYeast + | FoodsYogurt + | HealthAnthropometrics + | HealthBodyWeight + | HealthDigestion + | HealthEnergyIntake + | HealthFertility + | HealthGutHealth + | HealthLifestyle + | HealthLongevity + | HealthMasturbation + | HealthNutritionalStatus + | HealthSelfImprovement + | HealthSkin + | HealthSmoking + | HealthSunlight + | HealthTattooing + | HealthWeightGain + | HealthWeightLoss + | Humans + | HumansAdolescents + | HumansChildDevelopment + | HumansChildren + | HumansFemaleHealth + | HumansGrowth + | HumansInfants + | HumansMaleHealth + | HumansTransGender + | LipoProteinsApoA + | LipoProteinsApoB + | LipoproteinsChylomicrons + | LipoProteinsHighDensity + | LipoProteinsLowDensity + | LipoProteinsLPA + | LipoProteinsNonHDL + | LipoProteinsOxidizedLowDensity + | LipoProteinsVeryLowDensity + | MarkersAbdominalFat + | MarkersAcrylamide + | MarkersAutoAntibodies + | MarkersBiomarkers + | MarkersBloodPressure + | MarkersBMI + | MarkersBodyOdour + | MarkersBoneMineralDensity + | MarkersCognitiveFunction + | MarkersCReactiveProtein + | MarkersEndothelialFunction + | MarkersEnergyExpenditure + | MarkersFlowMediatedDilation + | MarkersGlucoseTolerance + | MarkersHbA1C + | MarkersHeartRate + | MarkersHOMAIR + | MarkersHormones + | MarkersIGF1 + | MarkersImmuneFunction + | MarkersInsulin + | MarkersInsulinSensitivity + | MarkersInterleukin6 + | MarkersKetones + | MarkersLiverEnzymes + | MarkersLiverFunction + | MarkersLPS + | MarkersMalondialdehyde + | MarkersMicrobiome + | MarkersOxidativeStress + | MarkersPCSK9 + | MarkersSatiety + | MarkersSexHormones + | MarkersSNPs + | MarkersTestosterone + | MarkersTMAO + | MarkersTNF + | MarkersVisceralFat + | MedicationsCETPInhibitors + | MedicationsPCSK9Inhibitors + | MedicationsStatins + | Nutrients + | NutrientsAlcohol + | NutrientsAnimal + | NutrientsAntiNutrient + | NutrientsAntioxidants + | NutrientsArtificialSweeteners + | NutrientsB12 + | NutrientsBetaCarotene + | NutrientsBioavailability + | NutrientsBiotin + | NutrientsCalcium + | NutrientsCarotenoids + | NutrientsCasein + | NutrientsCholine + | NutrientsCreatine + | NutrientsDietaryCholesterol + | NutrientsFat + | NutrientsFibre + | NutrientsFibreInsoluble + | NutrientsFibreSoluble + | NutrientsFODMAPs + | NutrientsGluten + | NutrientsGoitrogens + | NutrientsIsoflavones + | NutrientsK2 + | NutrientsLCarnitine + | NutrientsLectins + | NutrientsManganese + | NutrientsMinerals + | NutrientSodium + | NutrientsOxalate + | NutrientsPhosphorus + | NutrientsPhytate + | NutrientsPhytoEstrogens + | NutrientsPhytosterols + | NutrientsPolyphenols + | NutrientsSupplements + | NutrientsTannins + | NutrientsTaurine + | NutrientsVitaminA + | NutrientsVitaminB5 + | NutrientsVitaminB6 + | NutrientsVitaminC + | NutrientsVitaminD + | NutrientsVitaminE + | Nutrition + | Philosophy + | PhilosophyAntiNatalism + | PhilosophyAutopoiesis + | PhilosophyCausalInference + | PhilosophyDeMorgansLaw + | PhilosophyEfilism + | PhilosophyEpistemology + | PhilosophyEthics + | PhilosophyLinguisticPrescriptivism + | PhilosophyModalLogic + | PhilosophyMoralRealism + | PhilosophyMoralSubjectivism + | PhilosophyPredicateLogic + | PhilosophyPropositionalLogic + | PhilosophySentience + | PhysiologyAdiposeTissue + | PhysiologyAndrogens + | PhysiologyDeNovoLipogenesis + | PhysiologyEjaculation + | PhysiologyGluconeogenesis + | PhysiologyGlycogen + | PhysiologyLPL + | PhysiologyMetabolism + | PhysiologyPostMenopause + | PhysiologyPreMenopause + | PhysiologySenescence + | PhysiologySubendothelialSpace + | PlantsAlgae + | PoliticsAbortion + | PoliticsIsraelPalestine + | ProteinAnimal + | ProteinPlant + | Proteoglycans + | ResearchAnthropology + | ResearchArcheology + | ResearchBradfordHill + | ResearchCardiology + | ResearchCaseControl + | ResearchClimateScience + | ResearchClinicalTrials + | ResearchCohortStudies + | ResearchDermatology + | ResearchDIAAS + | ResearchDoseResponse + | ResearchEconomics + | ResearchEpidemiology + | ResearchEvidenceHierarchy + | ResearchFFQs + | ResearchGenetics + | ResearchGlycemicIndex + | ResearchGlycemicLoad + | ResearchImmunology + | ResearchKinetics + | ResearchLipidology + | ResearchMendelianRandomization + | ResearchMetaAnalysis + | ResearchMetaRegression + | ResearchMice + | ResearchMulticollinearity + | ResearchNutritionScience + | ResearchOphthalmology + | ResearchPDCAAS + | ResearchPhysiology + | ResearchPsychology + | ResearchRandomizedControlledTrial + | ResearchSexuality + | ResearchSubstitionAnalysis + | ResearchSurvivorshipBias + | ResearchSystematicReview + | ResearchVirology + | SocioEconomicStatus + | Veganism + | VeganismCropDeaths + | VeganismNameTheTrait diff --git a/packages/website/frontend/src/Config/Data/Identity.elm b/packages/website/frontend/src/Config/Data/Identity.elm new file mode 100755 index 0000000..ef5d833 --- /dev/null +++ b/packages/website/frontend/src/Config/Data/Identity.elm @@ -0,0 +1,36 @@ +module Config.Data.Identity exposing (pageNames) + + +type alias PageInput = + { pageHome : String + , pageContact : String + , pageArguments : String + , pageDebate : String + , pageCucks : String + , pageGibberish : String + , pageHyperBlog : String + , pageInterviews : String + , pageNutriDex : String + , pageServices : String + , pageDonate : String + , pageNotFound : String + , pageJournal : String + } + + +pageNames : PageInput +pageNames = + { pageHome = "home" + , pageServices = "services" + , pageCucks = "cuckList" + , pageArguments = "arguments" + , pageDebate = "debate" + , pageGibberish = "gibberish" + , pageHyperBlog = "blog" + , pageNutriDex = "nutriDex" + , pageInterviews = "interviews" + , pageContact = "contact" + , pageDonate = "donate" + , pageNotFound = "notFound" + , pageJournal = "journal" + } diff --git a/packages/website/frontend/src/Config/Data/ImageFolders.elm b/packages/website/frontend/src/Config/Data/ImageFolders.elm new file mode 100755 index 0000000..f0014cf --- /dev/null +++ b/packages/website/frontend/src/Config/Data/ImageFolders.elm @@ -0,0 +1,74 @@ +module Config.Data.ImageFolders exposing + ( ImageFolder(..) + , getImageFolderString + , imagePathMaker + ) + + +imagePathMaker : ImageFolder -> String -> String +imagePathMaker imageFolder name = + case imageFolder of + Cuck -> + "/" ++ getImageFolderString imageFolder ++ "/" ++ name ++ "/" ++ name ++ ".png" + + _ -> + "/" ++ getImageFolderString imageFolder ++ "/" ++ name ++ ".png" + + +getImageFolderString : ImageFolder -> String +getImageFolderString imageFolder = + case imageFolder of + Interviews -> + "interviews" + + Gibberish -> + "gibberish" + + Cuck -> + "cucks" + + BlogArticle -> + "blog" + + BlogCard -> + "blog/thumbs" + + Argument -> + "arguments" + + Service -> + "services" + + Debate -> + "debate" + + Donate -> + "donate" + + NutriDex -> + "nutridex" + + ServicePage -> + "services" + + Contact -> + "contact" + + Journal -> + "journal" + + +type ImageFolder + = Interviews + | Contact + | Gibberish + | Cuck + | BlogArticle + | BlogCard + | Argument + | Service + | Debate + | Donate + | NutriDex + | ServicePage + | Journal diff --git a/packages/website/frontend/src/Config/Data/Language.elm b/packages/website/frontend/src/Config/Data/Language.elm new file mode 100755 index 0000000..30ff70a --- /dev/null +++ b/packages/website/frontend/src/Config/Data/Language.elm @@ -0,0 +1,118 @@ +module Config.Data.Language exposing + ( Language(..) + , MultilingualTextElement + ) + +{-| Types for facilitating multilingual functionality. +-} + +import Element exposing (Element) + + +{-| A list of all currently supported languages. DeepL seems to +have the best translations, so we're just using those. Arabic will need some custom work though +since it runs right to left. It will be nice to expand this list over time as DeepL adds support +for more languages. Eventually it could be nice to host some local AI to do translation so we can +reduce lines of code by writing all text only once in English then automatically generating +translations. +-} +type Language + = -- Arabic + Bulgarian + | Chinese + | Czech + | Danish + | Dutch + | English + | Estonian + | Finnish + | French + | German + | Greek + | Hungarian + | Indonesian + | Italian + | Japanese + | Korean + | Latvian + | Lithuanian + | Norwegian + | Polish + | Portuguese + | Romanian + | Russian + | Slovak + | Slovenian + | Spanish + | Swedish + | Turkish + | Ukranian + + + +-- type alias MultilingualText = +-- { bulgarian : String +-- , chinese : String +-- , czech : String +-- , danish : String +-- , dutch : String +-- , english : String +-- , estonian : String +-- , finnish : String +-- , french : String +-- , german : String +-- , greek : String +-- , hungarian : String +-- , indonesian : String +-- , italian : String +-- , japanese : String +-- , korean : String +-- , latvian : String +-- , lithuanian : String +-- , norwegian : String +-- , polish : String +-- , portuguese : String +-- , romanian : String +-- , russian : String +-- , slovak : String +-- , slovenian : String +-- , spanish : String +-- , swedish : String +-- , turkish : String +-- , ukranian : String +-- } + + +{-| We need a type that returns a different element based on which language is selected. +-} +type alias MultilingualTextElement msg = + { bulgarian : Element msg + , chinese : Element msg + , czech : Element msg + , danish : Element msg + , dutch : Element msg + , english : Element msg + , estonian : Element msg + , finnish : Element msg + , french : Element msg + , german : Element msg + , greek : Element msg + , hungarian : Element msg + , indonesian : Element msg + , italian : Element msg + , japanese : Element msg + , korean : Element msg + , latvian : Element msg + , lithuanian : Element msg + , norwegian : Element msg + , polish : Element msg + , portuguese : Element msg + , romanian : Element msg + , russian : Element msg + , slovak : Element msg + , slovenian : Element msg + , spanish : Element msg + , swedish : Element msg + , turkish : Element msg + , ukranian : Element msg + } diff --git a/packages/website/frontend/src/Config/Helpers/Articles/Article.elm b/packages/website/frontend/src/Config/Helpers/Articles/Article.elm new file mode 100755 index 0000000..5c050e5 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Articles/Article.elm @@ -0,0 +1,116 @@ +module Config.Helpers.Articles.Article exposing (..) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Markdown as Markdown + exposing + ( articleImage + , renderDeviceMarkdown + , renderDeviceMarkdownNoToc + ) +import Config.Helpers.Articles.Types exposing (References) +import Config.Helpers.Cards.Inner.Text exposing (detailFormat) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleFast + ) +import Element as E exposing (..) +import Element.Background as B exposing (color) +import Element.Border as D exposing (width) +import Element.Font as F + exposing + ( alignLeft + , bold + , color + , regular + ) +import Ports + + +contentList : BlogArticle -> List (Element msg) -> (Markdown.Msg -> msg) -> List (Element msg) +contentList article extraElements toMsg = + [ case article.articleImage of + "" -> + none + + _ -> + articleImage article.articleImage + , case article.hasTableOfContents of + True -> + E.map toMsg (renderDeviceMarkdown article.articleBody) + + False -> + E.map toMsg (renderDeviceMarkdownNoToc article.articleBody) + , case article.hasReferences of + True -> + articleReferences article + + False -> + none + , detailFormat column extraElements + ] + + +articleReferences : BlogArticle -> Element msg +articleReferences article = + column [ E.width fill, F.size 15, spacing 10 ] <| + List.map2 (\x y -> makeReference x y) + article.articleReferences + (List.range 1 (List.length article.articleReferences)) + + +makeReference : References -> Int -> Element msg +makeReference references index = + let + comma = + ", " + in + el + [ F.regular + , F.alignLeft + ] + <| + paragraph [] + [ newTabLink + [ F.bold + , F.color (getThemeColor TextLightOrange) + , hoverFontDarkOrange + , transitionStyleFast + ] + { url = references.link, label = text (String.fromInt index ++ ". ") } + , text (references.author ++ comma) + , text (references.title ++ comma) + , text (references.journal ++ comma) + , text references.year + ] + + +extractFirstWords : String -> String +extractFirstWords text = + let + words = + text + |> String.split " " + |> List.filter (not << String.isEmpty) + + truncatedWords = + List.take 80 words + + wasTextTruncated = + List.length words > 80 + + result = + String.join " " truncatedWords + in + if wasTextTruncated then + result ++ "..." + + else + result diff --git a/packages/website/frontend/src/Config/Helpers/Articles/Markdown.elm b/packages/website/frontend/src/Config/Helpers/Articles/Markdown.elm new file mode 100755 index 0000000..e2b6810 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Articles/Markdown.elm @@ -0,0 +1,976 @@ +module Config.Helpers.Articles.Markdown exposing (..) + +-- import Config.Style.Colour.Helpers exposing (colourTheme) + +import Config.Helpers.Cards.Inner.Text exposing (divider) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Style.Colour.Helpers exposing (ThemeColor(..), getThemeColor) +import Config.Style.Fonts + exposing + ( defaultFontSize + , headerFontSizeBig + , headerFontSizeMedium + ) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleFast + ) +import Element as E exposing (..) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , widthEach + ) +import Element.Font as F exposing (color) +import Element.Input as Input +import Element.Region as Region +import Html exposing (Attribute, Html) +import Html.Attributes +import Html.Events +import Markdown.Block as Block + exposing + ( Block + , Inline + , ListItem(..) + , Task(..) + ) +import Markdown.Html +import Markdown.Parser +import Markdown.Renderer +import Ports + + +articleImage : String -> Element msg +articleImage pic = + el + [ centerX + , width fill + ] + <| + column + [ E.paddingEach + { top = 20 + , bottom = 20 + , left = 20 + , right = 20 + } + ] + [ image + [ width fill + ] + { src = "/blog/" ++ pic ++ ".png", description = "" } + ] + + +type Msg + = ScrollToElement String + + +renderDeviceMarkdown : String -> Element Msg +renderDeviceMarkdown markdown = + case renderMarkdown markdown of + Ok ( toc, renderedMarkdown ) -> + paragraph [] + [ column + [ width fill + , centerX + , spacing 10 + ] + (tocView toc :: renderedMarkdown) + ] + + Err error -> + E.text error + + +renderDeviceMarkdownGeneric : String -> Element msg +renderDeviceMarkdownGeneric markdown = + case renderMarkdownGeneric markdown of + Ok ( toc, renderedMarkdown ) -> + paragraph [] + [ column + [ width fill + , centerX + , spacing 10 + ] + (tocViewGeneric toc :: renderedMarkdown) + ] + + Err error -> + E.text error + + +renderMarkdown : String -> Result String ( TableOfContents, List (Element Msg) ) +renderMarkdown markdown = + case + markdown + |> Markdown.Parser.parse + of + Ok okAst -> + case + Markdown.Renderer.render elmUiRenderer okAst + of + Ok rendered -> + Ok ( buildToc okAst, rendered ) + + Err errors -> + Err errors + + Err error -> + Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n") + + +renderMarkdownGeneric : String -> Result String ( TableOfContents, List (Element msg) ) +renderMarkdownGeneric markdown = + case + markdown + |> Markdown.Parser.parse + of + Ok okAst -> + case + Markdown.Renderer.render elmUiRendererGeneric okAst + of + Ok rendered -> + Ok ( buildToc okAst, rendered ) + + Err errors -> + Err errors + + Err error -> + Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n") + + +renderDeviceMarkdownNoToc : String -> Element Msg +renderDeviceMarkdownNoToc markdown = + case renderMarkdownNoToc markdown of + Ok ( _, renderedMarkdown ) -> + paragraph [] + [ column + [ width fill + , centerX + , spacing 10 + ] + renderedMarkdown + ] + + Err error -> + E.text error + + +renderDeviceMarkdownNoTocGeneric : String -> Element msg +renderDeviceMarkdownNoTocGeneric markdown = + case renderMarkdownNoTocGeneric markdown of + Ok ( _, renderedMarkdown ) -> + paragraph [] + [ column + [ width fill + , centerX + , spacing 10 + ] + renderedMarkdown + ] + + Err error -> + E.text error + + +renderMarkdownNoToc : + String + -> Result String ( TableOfContents, List (Element Msg) ) -- Keep original return type +renderMarkdownNoToc markdown = + case + markdown + |> Markdown.Parser.parse + of + Ok okAst -> + case + Markdown.Renderer.render elmUiRenderer okAst + of + Ok rendered -> + Ok ( buildToc okAst, rendered ) + + -- Keep building TOC but don't use it + Err errors -> + Err errors + + Err error -> + Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n") + + +renderMarkdownNoTocGeneric : + String + -> Result String ( TableOfContents, List (Element msg) ) +renderMarkdownNoTocGeneric markdown = + case + markdown + |> Markdown.Parser.parse + of + Ok okAst -> + case + Markdown.Renderer.render elmUiRendererGeneric okAst + of + Ok rendered -> + Ok ( buildToc okAst, rendered ) + + Err errors -> + Err errors + + Err error -> + Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n") + + +tocView : TableOfContents -> Element Msg +tocView toc = + column + [ alignTop + , width fill + , spacing 10 + ] + [ paragraph + [ F.bold + , headerFontSizeBig + , F.center + , width fill + , F.color (getThemeColor TextLightOrange) + ] + [ text "TABLE OF CONTENTS" ] + , column + [ E.spacing 3 + , defaultFontSize + , E.width fill + ] + (toc + |> List.indexedMap + (\index headingBlock -> + row + [ E.width fill ] + [ el + [ E.alignTop + , width <| px 30 + , F.bold + , alignRight + , alignBottom + ] + (text (String.fromInt (index + 1) ++ ".")) + , el + [ F.alignLeft + , E.width fill + , defaultFontSize + , alignTop + ] + <| + Input.button + [ F.color (getThemeColor TextLightOrange) + , transitionStyleFast + , hoverFontDarkOrange + , width fill + , paddingEach { top = 0, bottom = 0, left = 0, right = 0 } + ] + { onPress = Just (ScrollToElement headingBlock.anchorId) + , label = + el + [ alignLeft ] + <| + text (toTitleCase headingBlock.name) + } + ] + ) + ) + , el + [ width fill + , height fill + , spacing 20 + , paddingEach + { top = 0 + , bottom = 0 + , left = 100 + , right = 100 + } + ] + <| + divider + , el + [] + <| + text "" + ] + + +tocViewGeneric : TableOfContents -> Element msg +tocViewGeneric toc = + column + [ alignTop + , width fill + , spacing 10 + ] + [ paragraph + [ F.bold + , headerFontSizeBig + , F.center + , width fill + , F.color (getThemeColor TextLightOrange) + ] + [ text "TABLE OF CONTENTS" ] + , column + [ E.spacing 3 + , defaultFontSize + , E.width fill + ] + (toc + |> List.indexedMap + (\index headingBlock -> + row + [ E.width fill ] + [ el + [ E.alignTop + , width <| px 30 + , F.bold + , alignRight + , alignBottom + ] + (text (String.fromInt (index + 1) ++ ".")) + , el + [ F.alignLeft + , E.width fill + , defaultFontSize + , alignTop + ] + <| + link + [] + { url = "#" ++ headingBlock.anchorId + , label = + el + [ F.color (getThemeColor TextLightOrange) + , transitionStyleFast + , hoverFontDarkOrange + ] + <| + text (toTitleCase headingBlock.name) + } + ] + ) + ) + , el + [ width fill + , height fill + , spacing 20 + , paddingEach + { top = 0 + , bottom = 0 + , left = 100 + , right = 100 + } + ] + <| + divider + , el + [] + <| + text "" + ] + + +buildToc : List Block -> TableOfContents +buildToc blocks = + let + headings = + gatherHeadings blocks + in + headings + |> List.map Tuple.second + |> List.map + (\styledList -> + { anchorId = styledList |> Block.extractInlineText |> rawTextToId + , name = styledToString styledList + , level = 1 + } + ) + + +styledToString : List Inline -> String +styledToString list = + list + |> Block.extractInlineText + + +gatherHeadings : List Block -> List ( Block.HeadingLevel, List Inline ) +gatherHeadings blocks = + List.filterMap + (\block -> + case block of + Block.Heading level content -> + Just ( level, content ) + + _ -> + Nothing + ) + blocks + + +elmUiRenderer : Markdown.Renderer.Renderer (Element Msg) +elmUiRenderer = + { heading = heading + , paragraph = + E.paragraph + [ E.spacing 3 + , defaultFontSize + , F.alignLeft + , width fill + ] + , thematicBreak = E.none + , text = E.text + , strong = + \content -> + E.row + [ F.bold + ] + content + , emphasis = + \content -> + E.row + [ F.italic + ] + content + , strikethrough = + \content -> + E.row + [ F.strike + ] + content + , codeSpan = code + , link = + \{ title, destination } body -> + E.newTabLink + [ width fill ] + { url = destination + , label = + E.paragraph + [ F.color (getThemeColor TextLightOrange) + , defaultFontSize + , transitionStyleFast + , hoverFontDarkOrange + ] + body + } + , hardLineBreak = Html.br [] [] |> E.html + , image = + \image -> + case image.title of + Just title -> + el + [ width fill ] + <| + column + [ E.centerX + , E.centerY + , width fill + , E.paddingEach + { top = 0 + , bottom = 10 + , left = 10 + , right = 10 + } + ] + [ E.image + [ E.centerX + , width (fill |> maximum 600) + ] + { src = image.src + , description = image.alt + } + ] + + Nothing -> + el + [ width fill ] + <| + column + [ E.centerX + , E.centerY + , width fill + , E.paddingEach + { top = 3 + , bottom = 10 + , left = 10 + , right = 10 + } + ] + [ E.image + [ E.centerX + , width (fill |> maximum 600) + ] + { src = image.src + , description = image.alt + } + ] + , blockQuote = + \children -> + E.column + [ D.widthEach + { top = 0 + , right = 0 + , bottom = 0 + , left = 5 + } + , D.rounded 10 + , E.paddingEach + { top = 13 + , bottom = 10 + , left = 10 + , right = 10 + } + , D.color (getThemeColor TextLightOrange) + , B.color (getThemeColor BackgroundLightGrey) + , defaultFontSize + , width fill + , spacing 10 + ] + children + , unorderedList = + \items -> + E.column + [ E.spacing 10 + , defaultFontSize + ] + (items + |> List.map + (\(ListItem task children) -> + E.row + [ E.width fill + ] + [ E.el + [ E.width <| E.px 20 + , E.alignTop + , alignRight + ] + (case task of + IncompleteTask -> + Input.defaultCheckbox False + + CompletedTask -> + Input.defaultCheckbox True + + NoTask -> + E.text "•" + ) + , E.column + [ E.width fill, F.alignLeft ] + children + ] + ) + ) + , orderedList = + \startingIndex items -> + E.column + [ E.spacing 10 + , E.width fill + ] + (items + |> List.indexedMap + (\index itemBlocks -> + E.row + [ E.width fill + ] + [ E.el + [ E.alignTop + , width <| px 25 + , F.bold + , alignRight + , defaultFontSize + ] + (E.text (String.fromInt (index + startingIndex) ++ ".")) + , E.column + [ alignLeft + , defaultFontSize + , E.width fill + ] + itemBlocks + ] + ) + ) + , codeBlock = codeBlock + , html = Markdown.Html.oneOf [] + , table = E.column [ width fill ] + , tableHeader = E.column [ width fill ] + , tableBody = E.column [ width fill ] + , tableRow = E.row [ width fill ] + , tableHeaderCell = + \maybeAlignment children -> + E.paragraph [ width fill ] children + , tableCell = + \maybeAlignment children -> + E.paragraph [ width fill ] children + } + + +code : String -> Element msg +code snippet = + E.el + [ B.color (getThemeColor BackgroundLightGrey) + , D.rounded 2 + , E.paddingXY 5 3 + , width fill + , F.family + [ F.external + { url = "https://fonts.googleapis.com/css?family=Source+Code+Pro" + , name = "Source Code Pro" + } + ] + ] + (E.text snippet) + + +codeBlock : { body : String, language : Maybe String } -> Element msg +codeBlock details = + E.el + [ B.color (getThemeColor BackgroundLightGrey) + , E.htmlAttribute (Html.Attributes.style "white-space" "pre") + , width fill + , E.paddingEach + { top = 23 + , bottom = 20 + , left = 20 + , right = 20 + } + , defaultFontSize + , F.family + [ F.external + { url = "https://fonts.googleapis.com/css?family=Source+Code+Pro" + , name = "Source Code Pro" + } + ] + ] + (E.text details.body) + + +elmUiRendererGeneric : Markdown.Renderer.Renderer (Element msg) +elmUiRendererGeneric = + { heading = headingGeneric + , paragraph = + E.paragraph + [ E.spacing 3 + , defaultFontSize + , F.alignLeft + , width fill + ] + , thematicBreak = E.none + , text = E.text + , strong = + \content -> + E.row + [ F.bold + ] + content + , emphasis = + \content -> + E.row + [ F.italic + ] + content + , strikethrough = + \content -> + E.row + [ F.strike + ] + content + , codeSpan = codeGeneric + , link = + \{ title, destination } body -> + E.newTabLink + [ width fill ] + { url = destination + , label = + E.paragraph + [ F.color (getThemeColor TextLightOrange) + , defaultFontSize + , transitionStyleFast + , hoverFontDarkOrange + ] + body + } + , hardLineBreak = Html.br [] [] |> E.html + , image = + \image -> + case image.title of + Just title -> + el + [ width fill ] + <| + column + [ E.centerX + , E.centerY + , width fill + , E.paddingEach + { top = 0 + , bottom = 10 + , left = 10 + , right = 10 + } + ] + [ E.image + [ E.centerX + , width (fill |> maximum 600) + ] + { src = image.src + , description = image.alt + } + ] + + Nothing -> + el + [ width fill ] + <| + column + [ E.centerX + , E.centerY + , width fill + , E.paddingEach + { top = 3 + , bottom = 10 + , left = 10 + , right = 10 + } + ] + [ E.image + [ E.centerX + , width (fill |> maximum 600) + ] + { src = image.src + , description = image.alt + } + ] + , blockQuote = + \children -> + E.column + [ D.widthEach + { top = 0 + , right = 0 + , bottom = 0 + , left = 5 + } + , D.rounded 10 + , E.paddingEach + { top = 13 + , bottom = 10 + , left = 10 + , right = 10 + } + , D.color (getThemeColor TextLightOrange) + , B.color (getThemeColor BackgroundLightGrey) + , defaultFontSize + , width fill + , spacing 10 + ] + children + , unorderedList = + \items -> + E.column + [ E.spacing 10 + , defaultFontSize + ] + (items + |> List.map + (\(ListItem task children) -> + E.row + [ E.width fill + ] + [ E.el + [ E.width <| E.px 20 + , E.alignTop + , alignRight + ] + (case task of + IncompleteTask -> + Input.defaultCheckbox False + + CompletedTask -> + Input.defaultCheckbox True + + NoTask -> + E.text "•" + ) + , E.column + [ E.width fill, F.alignLeft ] + children + ] + ) + ) + , orderedList = + \startingIndex items -> + E.column + [ E.spacing 10 + , E.width fill + ] + (items + |> List.indexedMap + (\index itemBlocks -> + E.row + [ E.width fill + ] + [ E.el + [ E.alignTop + , width <| px 25 + , F.bold + , alignRight + , defaultFontSize + ] + (E.text (String.fromInt (index + startingIndex) ++ ".")) + , E.column + [ alignLeft + , defaultFontSize + , E.width fill + ] + itemBlocks + ] + ) + ) + , codeBlock = codeBlockGeneric + , html = Markdown.Html.oneOf [] + , table = E.column [ width fill ] + , tableHeader = E.column [ width fill ] + , tableBody = E.column [ width fill ] + , tableRow = E.row [ width fill ] + , tableHeaderCell = + \maybeAlignment children -> + E.paragraph [ width fill ] children + , tableCell = + \maybeAlignment children -> + E.paragraph [ width fill ] children + } + + +codeGeneric : String -> Element msg +codeGeneric snippet = + E.el + [ B.color (getThemeColor BackgroundLightGrey) + , D.rounded 2 + , E.paddingXY 5 3 + , width fill + , F.family + [ F.external + { url = "https://fonts.googleapis.com/css?family=Source+Code+Pro" + , name = "Source Code Pro" + } + ] + ] + (E.text snippet) + + +codeBlockGeneric : { body : String, language : Maybe String } -> Element msg +codeBlockGeneric details = + E.el + [ B.color (getThemeColor BackgroundLightGrey) + , E.htmlAttribute (Html.Attributes.style "white-space" "pre") + , width fill + , E.paddingEach + { top = 23 + , bottom = 20 + , left = 20 + , right = 20 + } + , defaultFontSize + , F.family + [ F.external + { url = "https://fonts.googleapis.com/css?family=Source+Code+Pro" + , name = "Source Code Pro" + } + ] + ] + (E.text details.body) + + +headingGeneric : { level : Block.HeadingLevel, rawText : String, children : List (Element msg) } -> Element msg +headingGeneric { level, rawText, children } = + column [ width fill, spacing 20 ] + [ case level of + Block.H1 -> + divider + + _ -> + none + , E.paragraph + [ case level of + Block.H1 -> + headerFontSizeBig + + Block.H2 -> + headerFontSizeMedium + + _ -> + defaultFontSize + , F.bold + , case level of + Block.H1 -> + F.center + + _ -> + F.alignLeft + , width fill + , F.color (getThemeColor TextLightOrange) + , Region.heading (Block.headingLevelToInt level) + , E.htmlAttribute + (Html.Attributes.attribute "name" (rawTextToId rawText)) + , E.htmlAttribute + (Html.Attributes.id (rawTextToId rawText)) + ] + children + ] + + +heading : { level : Block.HeadingLevel, rawText : String, children : List (Element Msg) } -> Element Msg +heading { level, rawText, children } = + column [ width fill, spacing 20 ] + [ case level of + Block.H1 -> + divider + + _ -> + none + , E.paragraph + [ case level of + Block.H1 -> + headerFontSizeBig + + Block.H2 -> + headerFontSizeMedium + + _ -> + defaultFontSize + , F.bold + , case level of + Block.H1 -> + F.center + + _ -> + F.alignLeft + , width fill + , F.color (getThemeColor TextLightOrange) + , Region.heading (Block.headingLevelToInt level) + , E.htmlAttribute + (Html.Attributes.attribute "name" (rawTextToId rawText)) + , E.htmlAttribute + (Html.Attributes.id (rawTextToId rawText)) + ] + children + ] + + +rawTextToId rawText = + rawText + |> String.split " " + -- |> Debug.log "split" + |> String.join "-" + -- |> Debug.log "joined" + |> String.toLower + + + +-- Types + + +type alias TableOfContents = + List { anchorId : String, name : String, level : Int } diff --git a/packages/website/frontend/src/Config/Helpers/Articles/Types.elm b/packages/website/frontend/src/Config/Helpers/Articles/Types.elm new file mode 100755 index 0000000..32ec998 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Articles/Types.elm @@ -0,0 +1,10 @@ +module Config.Helpers.Articles.Types exposing (References) + + +type alias References = + { author : String + , title : String + , link : String + , year : String + , journal : String + } diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Inner/BuyButton.elm b/packages/website/frontend/src/Config/Helpers/Cards/Inner/BuyButton.elm new file mode 100755 index 0000000..d87ad73 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Inner/BuyButton.elm @@ -0,0 +1,67 @@ +module Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) + +import Config.Style.Colour.Helpers exposing (colourTheme) +import Config.Style.Fonts exposing (headerFontSizeBig) +import Config.Style.Glow exposing (glowDeepDarkGrey) +import Config.Style.Transitions exposing (hoverPageButtonDeepDarkOrange, transitionStyleMedium) +import Element as E + exposing + ( Element + , centerX + , el + , newTabLink + , paddingEach + , pointer + , row + , text + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (rounded) +import Element.Font as F + exposing + ( bold + , center + ) + + +buyButton : String -> String -> Element msg +buyButton price url = + el + [ D.width 5 + , D.rounded 30 + , centerX + , glowDeepDarkGrey + , D.color colourTheme.backgroundLightGrey + , B.color colourTheme.backgroundLightGrey + , pointer + ] + <| + el + [ B.color colourTheme.textDarkOrange + , D.rounded 30 + , headerFontSizeBig + , F.bold + , transitionStyleMedium + , hoverPageButtonDeepDarkOrange + , paddingEach + { top = 10 + , right = 25 + , bottom = 10 + , left = 25 + } + ] + <| + newTabLink [] + { url = url + , label = + row + [ F.center + , paddingEach + { top = 3 + , right = 0 + , bottom = 0 + , left = 0 + } + ] + [ text price ] + } diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Inner/CopyButton.elm b/packages/website/frontend/src/Config/Helpers/Cards/Inner/CopyButton.elm new file mode 100755 index 0000000..b09dd1b --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Inner/CopyButton.elm @@ -0,0 +1,30 @@ +module Config.Helpers.Cards.Inner.CopyButton exposing (..) + +import Config.Helpers.Cards.Inner.Text + exposing + ( getHoverColours + ) +import Config.Helpers.Cards.Inner.ToolTip exposing (tooltip) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + , getThemeColor + ) +import Config.Style.Icons.Icons exposing (copyLink) +import Config.Style.Icons.Types as TySvg exposing (..) +import Config.Style.Transitions exposing (transitionStyleSlow) +import Element as E exposing (..) +import Element.Background as B +import Element.Border as D +import Element.Font as F +import Element.Input as Input +import Ports +import Shared +import Shared.Msg exposing (Msg(..)) +import Svg.Attributes as SvgAttr +import Task + + +sdafasd = + [] diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Inner/StrengthBar.elm b/packages/website/frontend/src/Config/Helpers/Cards/Inner/StrengthBar.elm new file mode 100755 index 0000000..85b86fc --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Inner/StrengthBar.elm @@ -0,0 +1,77 @@ +module Config.Helpers.Cards.Inner.StrengthBar exposing + ( barMaker + , barPadding + ) + +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , column + , el + , fill + , height + , none + , px + , width + ) +import Element.Background as B exposing (gradient) +import Element.Border as D + exposing + ( color + , rounded + , width + ) +import Shared exposing (Model) + + +barMaker : Shared.Model -> (Int -> String) -> Int -> Element msg +barMaker shared getTooltip num = + let + strengthBarAttr = + [ height <| px 12 + , E.width fill + , D.rounded 10 + , D.color colourTheme.textDarkGrey + , D.width 2 + , B.gradient + { angle = 1.57 + , steps = + List.concat + [ List.repeat num colourTheme.barGreen + , List.repeat (10 - num) colourTheme.barRed + ] + } + ] + in + el + (strengthBarAttr + ++ (case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + [ tooltip IsLeft (getTooltip num) ] + ) + ) + none + + +barPadding : List (Element msg) -> Element msg +barPadding = + column + [ E.width fill + , alignLeft + ] diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Inner/Text.elm b/packages/website/frontend/src/Config/Helpers/Cards/Inner/Text.elm new file mode 100755 index 0000000..1e7f40a --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Inner/Text.elm @@ -0,0 +1,351 @@ +module Config.Helpers.Cards.Inner.Text exposing + ( bodyFormat + , detailBodyLink + , detailBodyMaker + , detailFormat + , detailFormatEl + , detailHeader + , detailSpacing + , detailTitleLink + , detailTitleLinkWide + , detailTitleMaker + , divider + , generalButton + , getHoverColours + , listCounter + , listItem + , listMaker + , listMaker2 + , numberedListItem + , renderCodeLine + , socialMaker + , titleFormat + ) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Converters exposing (formatSocial) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Colour.Types exposing (SyntaxColors) +import Config.Style.Fonts + exposing + ( defaultFontSize + , headerFontSizeBig + , paragraphSpacing + ) +import Config.Style.Icons.Types as TySvg exposing (..) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleMedium + , transitionStyleSlow + ) +import Element as E + exposing + ( Attribute + , Element + , alignLeft + , alignTop + , centerX + , column + , el + , fill + , height + , maximum + , mouseOver + , newTabLink + , none + , paddingEach + , paddingXY + , paragraph + , pointer + , row + , spacing + , text + , width + ) +import Element.Border as D + exposing + ( color + , rounded + , widthEach + ) +import Element.Font as F + exposing + ( alignLeft + , bold + , color + , family + ) +import Shared +import Svg.Attributes as SvgAttr + + +detailSpacing : Attribute msg +detailSpacing = + spacing 5 + + +detailFormat : (List (Attribute msg) -> List (Element msg) -> Element msg) -> List (Element msg) -> Element msg +detailFormat block elements = + block + [ detailSpacing + , width fill + ] + elements + + +detailFormatEl : Element msg -> Element msg +detailFormatEl element = + el + [ detailSpacing + , width fill + ] + element + + +titleFormat : ThemeColor -> List (Attribute msg) +titleFormat colour = + [ alignTop + , F.bold + , F.color (getThemeColor colour) + , defaultFontSize + , paragraphSpacing + ] + + +bodyFormat : ThemeColor -> List (Attribute msg) +bodyFormat colour = + [ F.regular + , defaultFontSize + , F.color (getThemeColor colour) + , width fill + , F.alignLeft + ] + + +detailTitleMaker : ThemeColor -> String -> Element msg +detailTitleMaker colour item = + el + (titleFormat colour) + <| + text item + + +detailTitleLink : ThemeColor -> String -> Element msg +detailTitleLink colour item = + el + (getHoverColours colour + ++ (titleFormat colour + ++ [ pointer + ] + ) + ) + <| + text item + + +detailTitleLinkWide : ThemeColor -> String -> Element msg +detailTitleLinkWide colour item = + paragraph + (getHoverColours colour + ++ (titleFormat colour + ++ [ width fill + , pointer + ] + ) + ) + [ text item ] + + +detailBodyLink : ThemeColor -> String -> Element msg +detailBodyLink colour item = + el + (getHoverColours colour + ++ (bodyFormat colour + ++ [ width fill + , pointer + ] + ) + ) + <| + text item + + +getHoverColours : ThemeColor -> List (Attribute msg) +getHoverColours colour = + [ transitionStyleMedium + , mouseOver + [ case colour of + TextLightGrey -> + F.color (getThemeColor TextLightOrange) + + TextLightOrange -> + F.color (getThemeColor TextDarkOrange) + + TextDarkOrange -> + F.color (getThemeColor TextDeepDarkOrange) + + _ -> + F.color (getThemeColor TextDeepDarkOrange) + ] + ] + + +detailBodyMaker : ThemeColor -> Element msg -> Element msg +detailBodyMaker colour item = + paragraph + (bodyFormat colour) + [ item ] + + +listMaker : (a -> Element msg) -> List a -> Element msg +listMaker makeItem itemInfo = + detailFormat column <| + List.map2 (\x y -> makeItem x) + itemInfo + (List.range 1 (List.length itemInfo)) + + +listMaker2 : (a -> Int -> Element msg) -> List a -> Element msg +listMaker2 makeItem itemInfo = + detailFormat column <| + List.map2 + (\x y -> makeItem x y) + itemInfo + (List.range 1 (List.length itemInfo)) + + +listItem : ThemeColor -> String -> Element msg +listItem colour item = + el + [ defaultFontSize + , F.bold + , E.alignLeft + , width fill + , F.color (getThemeColor colour) + ] + <| + paragraph [ F.regular ] + [ E.text ("• " ++ item) ] + + +numberedListItem : ThemeColor -> Int -> Element msg +numberedListItem colour index = + el + [ alignTop + , F.bold + , F.color (getThemeColor colour) + , defaultFontSize + ] + <| + text (String.fromInt index ++ ". ") + + +generalButton : Shared.Model -> String -> (OuterPart msg -> Element msg) -> Element msg +generalButton shared url icon = + newTabLink + ([ alignTop + , paddingXY 0 5 + , F.color (getThemeColor TextLightOrange) + ] + ++ getHoverColours TextLightOrange + ) + { url = url + , label = + el + [ transitionStyleSlow + , paddingXY 7 7 + , D.rounded 10 + ] + <| + icon + { elementAttributes = + [] + , sharedModel = shared + , svgAttributes = [ SvgAttr.width "20" ] + } + } + + +socialMaker : String -> String -> Element msg +socialMaker link item = + newTabLink + [] + { url = link + , label = + detailTitleLink + TextLightOrange + (formatSocial item) + } + + +listCounter : Int -> Element msg +listCounter index = + detailTitleMaker TextLightGrey + (String.fromInt index ++ ". ") + + +divider : Element msg +divider = + el + [ width fill + , height fill + , centerX + , width (fill |> maximum 600) + , D.widthEach + { bottom = 1 + , top = 0 + , left = 0 + , right = 0 + } + , D.color (getThemeColor TextLightOrange) + , paddingEach + { top = 10 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + <| + none + + +renderCodeLine : SyntaxColors -> List (Element msg) -> Element msg +renderCodeLine colors elements = + paragraph + [ F.color colors.text + , F.alignLeft + , F.family + [ F.monospace ] + ] + elements + + +detailHeader : String -> Element msg +detailHeader title = + column + [ centerX + , width fill + ] + [ divider + , paragraph + [ F.color (getThemeColor TextLightGrey) + , paragraphSpacing + , F.bold + , centerX + , F.center + , headerFontSizeBig + , F.color (getThemeColor TextLightOrange) + , paddingEach + { top = 20 + , right = 0 + , bottom = 0 + , left = 0 + } + ] + [ text (String.toUpper title) ] + ] diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Inner/ToolTip.elm b/packages/website/frontend/src/Config/Helpers/Cards/Inner/ToolTip.elm new file mode 100755 index 0000000..01ef031 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Inner/ToolTip.elm @@ -0,0 +1,148 @@ +module Config.Helpers.Cards.Inner.ToolTip exposing + ( ToolTipPosition(..) + , tooltip + , tooltipImage + ) + +import Config.Style.Colour.Helpers exposing (colourTheme) +import Config.Style.Transitions exposing (transitionStyleSlow) +import Element as E + exposing + ( Attribute + , alignLeft + , alignRight + , below + , centerX + , centerY + , el + , fill + , height + , htmlAttribute + , image + , inFront + , mouseOver + , moveLeft + , none + , padding + , pointer + , px + , rgba + , text + , transparent + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , shadow + , width + ) +import Element.Font as F + exposing + ( center + , regular + , size + ) +import Html.Attributes as H exposing (style) + + +tooltip : ToolTipPosition -> String -> Attribute msg +tooltip toolTipPosition content = + let + tooltipContent : Attribute msg + tooltipContent = + below <| + el + [ htmlAttribute (H.style "pointerEvents" "none") + , case toolTipPosition of + IsLeft -> + alignLeft + + IsRight -> + alignRight + ] + <| + el + [ E.width fill + , htmlAttribute <| H.style "z-index" "4" + , F.size 15 + , F.center + , F.regular + , B.color colourTheme.backgroundLightGrey + , F.color colourTheme.textLightGrey + , padding 15 + , D.color colourTheme.textLightOrange + , D.rounded 5 + , D.width 2 + , D.shadow + { offset = ( 0, 3 ) + , blur = 6 + , size = 0 + , color = rgba 0 0 0 0.32 + } + ] + (text content) + in + inFront <| + el + [ E.width fill + , height fill + , pointer + , transparent True + , mouseOver [ transparent False ] + , htmlAttribute <| H.style "z-index" "4" + , transitionStyleSlow + , tooltipContent + ] + none + + +type ToolTipPosition + = IsLeft + | IsRight + + +tooltipImage : String -> Attribute msg +tooltipImage content = + inFront <| + el + [ E.width fill + , height fill + , transparent True + , mouseOver [ transparent False ] + , htmlAttribute <| H.style "z-index" "4" + , transitionStyleSlow + , below <| + el + [ htmlAttribute (H.style "pointerEvents" "none") + , moveLeft 200 + ] + <| + el + [ E.width <| px 400 + , htmlAttribute <| H.style "z-index" "4" + , B.color colourTheme.backgroundLightGrey + , D.color colourTheme.textLightOrange + , D.rounded 5 + , D.width 2 + , D.shadow + { offset = ( 0, 3 ) + , blur = 6 + , size = 0 + , color = rgba 0 0 0 0.32 + } + ] + (image + [ E.width fill + , height fill + , centerX + , centerY + ] + { src = content + , description = "Tooltip image" + } + ) + ] + none diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Outer/Helpers.elm b/packages/website/frontend/src/Config/Helpers/Cards/Outer/Helpers.elm new file mode 100755 index 0000000..da374cd --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Outer/Helpers.elm @@ -0,0 +1,576 @@ +module Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) + +-- import Config.Style.Colour.Helpers exposing (colourTheme) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , getImageFolderString + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.Text exposing (divider) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Helpers.Response exposing (contentContainer) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Fonts + exposing + ( defaultFontSize + , headerFontSizeBig + ) +import Config.Style.Glow + exposing + ( glowDeepDarkGrey + , glowDeepDarkOrange + ) +import Config.Style.Transitions exposing (transitionStyleSlow) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignRight + , alignTop + , centerX + , column + , el + , fill + , height + , image + , link + , mouseOver + , newTabLink + , none + , padding + , paddingEach + , paddingXY + , paragraph + , row + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , roundEach + , rounded + , width + ) +import Element.Font as F + exposing + ( alignLeft + , bold + , center + , color + ) +import Html.Attributes as H exposing (id) + + +cardMaker : Device -> Cardable -> List (Element msg) -> Element msg +cardMaker device cardable contents = + let + hasLink : Bool + hasLink = + case cardable of + C.Contact _ -> + True + + C.Cuck c -> + False + + C.BlogArticle _ -> + False + + C.BlogCard _ -> + True + + C.Argument _ -> + False + + C.Gibberish _ -> + True + + C.Service _ -> + True + + C.Debate _ -> + True + + C.Donate _ -> + True + + C.Interview _ -> + False + + C.NutriDex _ -> + False + + C.ServicePage _ -> + False + + C.ContactPage _ -> + False + + cardTitleMaker : String -> String -> Maybe String -> Element msg + cardTitleMaker htmlId title maybeUrl = + el + ([ headerFontSizeBig + , F.bold + , F.color (getThemeColor TextLightGrey) + , E.width fill + , E.htmlAttribute (H.id (formatName htmlId)) + ] + ++ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + [ F.center + , B.color (getThemeColor TextDarkOrange) + , D.roundEach + { topLeft = 26 + , topRight = 26 + , bottomRight = 0 + , bottomLeft = 0 + } + , paddingEach + { top = 6 + , bottom = 3 + , left = 20 + , right = 20 + } + ] + ) + ) + <| + column + [ E.width fill + , spacing 10 + ] + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + case cardable of + C.NutriDex _ -> + none + + _ -> + divider + + ( Tablet, Portrait ) -> + case cardable of + C.NutriDex _ -> + none + + _ -> + divider + + _ -> + none + , case cardable of + C.BlogCard blogArticle -> + case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + image + [ E.width fill + , paddingEach + { top = 8 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + { src = "/blog/" ++ blogArticle.articleImage ++ ".png", description = "" } + + ( Tablet, Portrait ) -> + image + [ E.width fill + , paddingEach + { top = 8 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + { src = "/blog/" ++ blogArticle.articleImage ++ ".png", description = "" } + + _ -> + none + + _ -> + none + , row + [ E.width fill + , spacing 10 + , case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + F.alignLeft + + ( Tablet, Portrait ) -> + F.alignLeft + + _ -> + F.center + , paddingXY 0 + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + 10 + + ( Tablet, Portrait ) -> + 10 + + _ -> + 0 + ) + ] + [ case cardable of + C.NutriDex _ -> + case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + paragraph [] [ text title ] + + _ -> + paragraph [] [ text title ] + , el + [ alignRight + ] + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + case maybeUrl of + Just url -> + readMoreLink url + + Nothing -> + none + + ( Tablet, Portrait ) -> + case maybeUrl of + Just url -> + readMoreLink url + + Nothing -> + none + + _ -> + none + ) + ] + ] + + readMoreLink : String -> Element msg + readMoreLink url = + link [ alignTop, paddingXY 0 5 ] + { url = url + , label = + el + [ F.color (getThemeColor TextLightGrey) + , B.color (getThemeColor TextDarkOrange) + , D.rounded 10 + , paddingEach + { top = 6 + , bottom = 3 + , left = 10 + , right = 10 + } + , mouseOver + [ F.color (getThemeColor TextLightOrange) + , B.color (getThemeColor TextDeepDarkOrange) + ] + , transitionStyleSlow + , defaultFontSize + ] + <| + text + (case cardable of + C.Donate _ -> + "Support!" + + C.Argument _ -> + "Proof Tree!" + + _ -> + "Read More!" + ) + } + + cardInner : String -> String -> Maybe String -> List (Element msg) -> Element msg + cardInner htmlId title maybeUrl elements = + column + [ E.width fill + , spacing 0 + ] + [ cardTitleMaker htmlId title maybeUrl + , (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + el + [ E.width fill + , centerX + ] + + ( Tablet, Portrait ) -> + el + [ E.width fill + , centerX + ] + + _ -> + cardStuff + ) + <| + row + [ E.width fill + ] + elements + ] + + cardOuter : Element msg -> Element msg + cardOuter elements = + contentContainer <| + el + ([ E.width fill + ] + ++ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + [ E.width fill + , D.width 5 + , D.color (getThemeColor BackgroundDarkGrey) + , D.rounded 32 + , glowDeepDarkGrey + ] + ++ (if hasLink then + [ mouseOver + [ D.color (getThemeColor TextDarkOrange) + , B.color (getThemeColor TextDarkOrange) + , glowDeepDarkOrange + ] + , transitionStyleSlow + ] + + else + [] + ) + ) + ) + elements + + cardWithImageWithLink : String -> Bool -> String -> String -> String -> List (Element msg) -> Element msg + cardWithImageWithLink htmlId linkBool title image url content = + linkChooser + linkBool + (cardInner htmlId + title + (if hasLink then + Just url + + else + Nothing + ) + [ cardContentMaker content + ] + ) + url + + cardWithNoImageWithLink : String -> Bool -> String -> String -> List (Element msg) -> Element msg + cardWithNoImageWithLink htmlId linkBool title url content = + linkChooser + linkBool + (cardInner htmlId + title + (Just url) + [ cardContentMaker content + ] + ) + url + + cardWithImage : String -> String -> String -> List (Element msg) -> Element msg + cardWithImage htmlId title image content = + cardOuter <| + cardInner htmlId + title + Nothing + [ cardContentMaker content + ] + + cardWithNoImage : String -> String -> List (Element msg) -> Element msg + cardWithNoImage htmlId title content = + cardOuter <| + cardInner htmlId + title + Nothing + [ cardContentMaker content + ] + + linkChooser : Bool -> Element msg -> String -> Element msg + linkChooser linkBool element url = + cardOuter <| + case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + el [ E.width fill ] <| element + + ( Tablet, Portrait ) -> + el [ E.width fill ] <| element + + _ -> + (if linkBool then + newTabLink + + else + link + ) + [ E.width fill ] + { url = url + , label = element + } + in + case cardable of + C.Contact contact -> + cardWithImageWithLink + contact.contactImage + contact.isNewTabLink + contact.contactName + (imagePathMaker M.Contact contact.contactImage) + contact.contactLink + contents + + C.Cuck cuck -> + cardWithImage + cuck.cuckImage + cuck.cuckName + (imagePathMaker M.Cuck cuck.cuckImage) + contents + + C.BlogArticle blogArticle -> + cardWithNoImage + blogArticle.articleImage + (String.toUpper blogArticle.articleName) + contents + + C.BlogCard blogArticle -> + cardWithImageWithLink + blogArticle.articleImage + blogArticle.isNewTabLink + blogArticle.articleName + (imagePathMaker M.BlogCard blogArticle.articleImage) + blogArticle.articleLink + contents + + C.Argument argument -> + cardWithNoImage + argument.argumentImage + argument.argumentTitle + contents + + C.Gibberish gibberish -> + cardWithImageWithLink + gibberish.gibberishImage + gibberish.isNewTabLink + gibberish.gibberishTitle + (imagePathMaker M.Gibberish gibberish.gibberishImage) + gibberish.gibberishLink + contents + + C.Service service -> + cardWithImageWithLink + service.serviceImage + service.isNewTabLink + service.serviceName + (imagePathMaker M.Service service.serviceImage) + service.serviceLink + contents + + C.Debate debate -> + cardWithImageWithLink + debate.debateImage + debate.isNewTabLink + debate.debateTitle + (imagePathMaker M.Debate debate.debateImage) + debate.debateLink + contents + + C.Donate donate -> + cardWithImageWithLink + donate.donateImage + donate.isNewTabLink + donate.donateName + (imagePathMaker M.Donate donate.donateImage) + donate.donateLink + contents + + C.Interview interview -> + cardWithImage + interview.interviewImage + interview.interviewName + (imagePathMaker M.Interviews interview.interviewImage) + contents + + C.NutriDex nutriDex -> + cardWithNoImage + nutriDex.nutriDexTitle + (String.toUpper nutriDex.nutriDexTitle) + contents + + C.ServicePage service -> + cardWithNoImage + service.serviceImage + (String.toUpper service.serviceName) + contents + + C.ContactPage contact -> + cardWithNoImage + contact.contactImage + (String.toUpper contact.contactName) + contents + + +cardContentMaker : List (Element msg) -> Element msg +cardContentMaker content = + column + [ spacing 8 + , E.width fill + ] + content + + +cardStuff : Element msg -> Element msg +cardStuff content = + el + [ E.width fill + , centerX + , B.color (getThemeColor BackgroundDarkGrey) + , padding 10 + , D.roundEach + { topLeft = 0 + , topRight = 0 + , bottomRight = 26 + , bottomLeft = 26 + } + ] + <| + el + [ paddingXY 15 0 + , E.width fill + , height fill + ] + content diff --git a/packages/website/frontend/src/Config/Helpers/Cards/Outer/Types.elm b/packages/website/frontend/src/Config/Helpers/Cards/Outer/Types.elm new file mode 100755 index 0000000..a7914fc --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Cards/Outer/Types.elm @@ -0,0 +1,28 @@ +module Config.Helpers.Cards.Outer.Types exposing (Cardable(..)) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Contact.Types exposing (Contact) +import Config.Pages.Debate.Arguments.Types exposing (Argument) +import Config.Pages.Debate.Cuckery.Types exposing (Cuck) +import Config.Pages.Debate.Gibberish.Types exposing (Gibberish) +import Config.Pages.Debate.Types exposing (Debate) +import Config.Pages.Donate.Types exposing (Donate) +import Config.Pages.Interviews.Types exposing (Interview) +import Config.Pages.Products.Types exposing (NutriDex) +import Config.Pages.Services.Types exposing (Service) + + +type Cardable + = Contact Contact + | ContactPage Contact + | Cuck Cuck + | BlogArticle BlogArticle + | BlogCard BlogArticle + | Argument Argument + | Gibberish Gibberish + | Service Service + | Debate Debate + | Donate Donate + | Interview Interview + | NutriDex NutriDex + | ServicePage Service diff --git a/packages/website/frontend/src/Config/Helpers/Converters.elm b/packages/website/frontend/src/Config/Helpers/Converters.elm new file mode 100755 index 0000000..2e36f2c --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Converters.elm @@ -0,0 +1,66 @@ +module Config.Helpers.Converters exposing + ( formatName + , formatSocial + , toTitleCase + , wordCount + ) + + +formatName : String -> String +formatName name = + name + |> String.toLower + |> String.replace " " "" + |> String.replace "'" "" + |> String.replace "." "" + |> String.replace "-" "" + |> String.replace "_" "" + + +formatSocial : String -> String +formatSocial name = + name + |> String.replace "https://x.com/" "@" + |> String.replace "https://www.threads.net/@" "@" + |> String.replace "https://bsky.app/profile/" "@" + |> String.replace "https://www.instagram.com/" "@" + |> String.replace "https://www.youtube.com/" "@" + + +wordCount : String -> Int +wordCount text = + text + |> String.words + |> List.length + + +toTitleCase : String -> String +toTitleCase input = + let + lowercaseWords = + [ "a", "an", "the", "and", "but", "or", "for", "nor", "on", "at", "to", "in", "of", "with", "by" ] + + words = + String.words input + + capitalizeFirst word = + case String.uncons word of + Just ( first, rest ) -> + String.toUpper (String.fromChar first) ++ String.toLower rest + + Nothing -> + "" + + capitalizeWord index word = + if index == 0 then + capitalizeFirst word + + else if not (List.member (String.toLower word) lowercaseWords) then + capitalizeFirst word + + else + String.toLower word + in + words + |> List.indexedMap capitalizeWord + |> String.join " " diff --git a/packages/website/frontend/src/Config/Helpers/Headers/Helpers.elm b/packages/website/frontend/src/Config/Helpers/Headers/Helpers.elm new file mode 100755 index 0000000..186fcac --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Headers/Helpers.elm @@ -0,0 +1,160 @@ +module Config.Helpers.Headers.Helpers exposing (headerMaker) + +import Config.Helpers.Cards.Inner.Text exposing (divider) +import Config.Helpers.Converters exposing (formatName) +import Config.Helpers.Headers.Types as C exposing (Headerable(..)) +import Config.Helpers.Response exposing (contentContainer) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Config.Style.Fonts + exposing + ( defaultFontSize + , headerFontSizeBig + ) +import Element as E + exposing + ( Element + , centerX + , column + , el + , fill + , maximum + , minimum + , padding + , paddingEach + , paragraph + , spacing + , text + , width + ) +import Element.Font as F + exposing + ( bold + , center + ) + + +headerMaker : Headerable msg -> Element msg +headerMaker headerable = + let + headerTitleMaker : String -> Element msg + headerTitleMaker title = + el + [ headerFontSizeBig + , F.bold + , width fill + , F.center + ] + <| + paragraph [] [ text title ] + + headerHelper : String -> List (Element msg) -> Element msg + headerHelper title body = + el + [ width (fill |> minimum 100) + , width (fill |> maximum 725) + , padding 10 + , centerX + ] + <| + column + [ width fill + ] + [ headerTitleMaker title + , divider + , el + [ E.height fill + , E.width fill + , centerX + , spacing 8 + , paddingEach + { top = 10 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + <| + el + [ paddingEach + { top = 0 + , bottom = 0 + , left = 15 + , right = 15 + } + , spacing 8 + , width fill + ] + <| + paragraph + [ width fill + , defaultFontSize + , F.center + ] + <| + body + ] + in + case headerable of + C.Arguments argument -> + headerHelper argument.headerTitle argument.headerBody + + C.BlogPage blog -> + headerHelper blog.headerTitle blog.headerBody + + C.CuckList cuck -> + headerHelper cuck.headerTitle cuck.headerBody + + C.Debate debate -> + headerHelper debate.headerTitle debate.headerBody + + C.Donate donate -> + headerHelper donate.headerTitle donate.headerBody + + C.Gibberish gibberish -> + headerHelper gibberish.headerTitle gibberish.headerBody + + C.Services service -> + headerHelper service.headerTitle service.headerBody + + C.Interviews interview -> + headerHelper interview.headerTitle interview.headerBody + + C.NutriDex nutriDex -> + headerHelper nutriDex.headerTitle nutriDex.headerBody + + C.Contact contact -> + headerHelper contact.headerTitle contact.headerBody + + C.Journal journal -> + headerHelper journal.headerTitle journal.headerBody + + +cardContentMaker : List (Element msg) -> Element msg +cardContentMaker content = + column + [ spacing 8 + , width fill + ] + content + + +cardStuff : Element msg -> Element msg +cardStuff content = + el + [ E.height fill + , E.width fill + , centerX + , spacing 8 + ] + <| + el + [ paddingEach + { top = 0 + , bottom = 0 + , left = 15 + , right = 15 + } + , spacing 8 + , width fill + ] + content diff --git a/packages/website/frontend/src/Config/Helpers/Headers/Records.elm b/packages/website/frontend/src/Config/Helpers/Headers/Records.elm new file mode 100755 index 0000000..c102823 --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Headers/Records.elm @@ -0,0 +1,151 @@ +module Config.Helpers.Headers.Records exposing + ( argumentHeader + , blogHeader + , contactHeader + , cuckListHeader + , debateHeader + , donateHeader + , gibberishHeader + , interviewHeader + , journalHeader + , nutriDexHeader + , servicesHeader + ) + +import Config.Helpers.Cards.Inner.Text exposing (detailBodyLink) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Style.Colour.Helpers exposing (ThemeColor(..)) +import Element as E + exposing + ( newTabLink + , text + ) +import Route.Path as Path + + +argumentHeader : Header msg +argumentHeader = + let + name = + "Arguments" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page features arguments that I hold to be sound. I'm open to hearing all challenges, as I am ready to engage with and defend any argument listed." ] + } + + +blogHeader : Header msg +blogHeader = + let + name = + "Blog" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page features blog articles written by me, along with contributions from guest authors, covering topics primarily related to nutrition science, health science, and article." ] + } + + +cuckListHeader : Header msg +cuckListHeader = + let + name = + "Cucklist" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page features a list of morons who wrote cheques with their mouths that their asses couldn't cash. Each person included in this list has dodged debating me." ] + } + + +debateHeader : Header msg +debateHeader = + let + name = + "Debate" + in + { headerTitle = String.toUpper name + , headerBody = [ text "Here you will find links to various pages relevant to debate, such as formal arguments and a list of debate-dodging cucks." ] + } + + +donateHeader : Header msg +donateHeader = + let + name = + "Donate" + in + { headerTitle = String.toUpper name + , headerBody = [ text "My site, research, and content all cost time and money to run. If you find my contributions valuable, please consider supporting my work on any of the platforms listed below!" ] + } + + +gibberishHeader : Header msg +gibberishHeader = + let + name = + "Gibberish" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page is specifically for terms and ostensible concepts that I think are either nonsensical or so practically useless that its intelligiblity is irrelevant." ] + } + + +servicesHeader : Header msg +servicesHeader = + let + name = + "Services" + in + { headerTitle = String.toUpper name + , headerBody = + [ text "Here are all the services I offer to interested clients. Feel free to " + , newTabLink [] + { url = Path.toString Path.Contact_Inquiry + , label = detailBodyLink TextLightOrange "reach out" + } + , text " with any questions or to receive a quote for bundled purchases." + ] + } + + +interviewHeader : Header msg +interviewHeader = + let + name = + "Interviews" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page showcases various podcasts and shows I've been on. If you’d like to have me as a guest on your podcast, feel free to reach out!" ] + } + + +nutriDexHeader : Header msg +nutriDexHeader = + let + name = + "The NutriDex" + in + { headerTitle = String.toUpper name + , headerBody = [ text "" ] + } + + +contactHeader : Header msg +contactHeader = + let + name = + "Contact" + in + { headerTitle = String.toUpper name + , headerBody = [ text "If you wish to contact me, please carefully choose from the following options before reaching out, to make sure that your communication ends up in the right place." ] + } + + +journalHeader : Header msg +journalHeader = + let + name = + "Journal" + in + { headerTitle = String.toUpper name + , headerBody = [ text "This page features blog articles on topics not necessarily related to nutrition science, such as technology, popular culture, veganism, etc." ] + } diff --git a/packages/website/frontend/src/Config/Helpers/Headers/Types.elm b/packages/website/frontend/src/Config/Helpers/Headers/Types.elm new file mode 100755 index 0000000..06bd25d --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Headers/Types.elm @@ -0,0 +1,26 @@ +module Config.Helpers.Headers.Types exposing + ( Header + , Headerable(..) + ) + +import Element exposing (Element) + + +type Headerable msg + = Arguments (Header msg) + | BlogPage (Header msg) + | CuckList (Header msg) + | Debate (Header msg) + | Donate (Header msg) + | Gibberish (Header msg) + | Services (Header msg) + | Interviews (Header msg) + | NutriDex (Header msg) + | Contact (Header msg) + | Journal (Header msg) + + +type alias Header msg = + { headerTitle : String + , headerBody : List (Element msg) + } diff --git a/packages/website/frontend/src/Config/Helpers/Response.elm b/packages/website/frontend/src/Config/Helpers/Response.elm new file mode 100755 index 0000000..647993a --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Response.elm @@ -0,0 +1,94 @@ +module Config.Helpers.Response exposing + ( contentContainer + , pageList + , pageListCenter + , pageListFormat + , topLevelContainer + ) + +import Config.Style.Colour.Helpers exposing (colourTheme) +import Element as E + exposing + ( Attribute + , Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignTop + , centerX + , centerY + , el + , fill + , height + , maximum + , minimum + , padding + , paddingXY + , scrollbarY + , spacing + , width + ) +import Element.Background as B exposing (color) +import Html.Attributes exposing (style) + + +topLevelContainer : Element msg -> Element msg +topLevelContainer = + el + [ width fill + , height fill + , B.color colourTheme.backgroundLightGrey + ] + + +pageListCenter : Device -> List (Attribute msg) +pageListCenter device = + [ centerY + ] + ++ pageListFormat device + + +pageList : Device -> List (Attribute msg) +pageList device = + [ alignTop + ] + ++ pageListFormat device + + +pageListFormat : Device -> List (Attribute msg) +pageListFormat device = + let + pageListAttr = + [ centerX + , width fill + , height fill + , scrollbarY + ] + in + pageListAttr + ++ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [ spacing 0 + , paddingXY 10 30 + ] + + ( Tablet, Portrait ) -> + [ spacing 0 + , paddingXY 10 30 + ] + + _ -> + [ spacing 20 + , paddingXY 30 30 + ] + ) + + +contentContainer : Element msg -> Element msg +contentContainer = + el + [ width (fill |> minimum 100) + , width (fill |> maximum 875) + , padding 10 + , centerX + ] diff --git a/packages/website/frontend/src/Config/Helpers/Viewport.elm b/packages/website/frontend/src/Config/Helpers/Viewport.elm new file mode 100755 index 0000000..0d9d44f --- /dev/null +++ b/packages/website/frontend/src/Config/Helpers/Viewport.elm @@ -0,0 +1,16 @@ +module Config.Helpers.Viewport exposing + ( Msg + , resetViewport + ) + +import Browser.Dom as Dom exposing (setViewport) +import Task exposing (attempt) + + +type Msg + = NoOp + + +resetViewport : Cmd Msg +resetViewport = + Task.attempt (\_ -> NoOp) (Dom.setViewportOf "scroll-container" 0 0) diff --git a/packages/website/frontend/src/Config/Pages/Blogs/Journal/DigitalPrivacy.elm b/packages/website/frontend/src/Config/Pages/Blogs/Journal/DigitalPrivacy.elm new file mode 100755 index 0000000..8d7e68c --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/Journal/DigitalPrivacy.elm @@ -0,0 +1,26 @@ +module Config.Pages.Blogs.Journal.DigitalPrivacy exposing (articleDigitalPrivacy) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleDigitalPrivacy : BlogArticle +articleDigitalPrivacy = + { articleName = "" + , articleLink = Path.toString Path.Journal_Digitalprivacy + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = True + , articleImage = "digitalprivacy" + , articlePublished = "" + , articleBody = """""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/BigFatSurprise.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/BigFatSurprise.elm new file mode 100755 index 0000000..f2bc2a5 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/BigFatSurprise.elm @@ -0,0 +1,2321 @@ +module Config.Pages.Blogs.MainBlog.BigFatSurprise exposing (articleBigFatSurprise) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleBigFatSurprise : BlogArticle +articleBigFatSurprise = + { articleName = "The Big Fat Surprise: A Critical Review" + , articleLink = Path.toString Path.Blog_Bigfatsurprise + , articleAuthor = "Seth Yoder" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "bigfatsurprise" + , articlePublished = "Aug 10, 2014" + , articleBody = """ +Nina Teicholz’s\u{00A0}_The Big Fat Surprise_\u{00A0}(BFS) is a book that claims to reveal “the unthinkable: that everything we thought we knew about dietary fats is wrong.” This is a trope that is often exploited to sell diet/nutrition books, and it works surprisingly well. + +What makes this particular book interesting is not so much that it is bad (which it is) or that it is extravagantly biased (which it also is). No, what really fascinates me about this book is that the author excessively and shamelessly lifts other people’s material. Most notably Teicholz lifts from another popular low-carb book called _Good Calories, Bad Calories_\u{00A0}(GCBC) by Gary Taubes. + +If I had written a book and I had “borrowed” other people’s work, here’s what I would do: I would cross my fingers and pray that no one ever notices. I would never bring it up, and diffuse it as quickly as I could if someone else brought it up. Not Teicholz. She gets in there and picks fights, accusing others of plagiarizing _her work_\u{00A0}if they write a piece that is also critical of low-fat diets. + +> .[@newscientist](https://twitter.com/newscientist)\u{00A0}hey, how can you list all arguments from The Big Fat Surprise without mentioning the book itself in yr article? Not ethical.. — Nina Teicholz (@bigfatsurprise) [August 2, 2014](https://twitter.com/bigfatsurprise/statuses/495419761019609088) + +> [@Dick_Muller](https://twitter.com/Dick_Muller)\u{00A0}That is so true. First [@TIMEHealth](https://twitter.com/TIMEHealth)\u{00A0}now [@newscientist](https://twitter.com/newscientist)\u{00A0}taking my work without attribution… — Nina Teicholz (@bigfatsurprise) [August 2, 2014](https://twitter.com/bigfatsurprise/statuses/495428132099616770) + +Despite all this finger-wagging Teicholz does try to bring something new to the table. She makes an effort to speak to some people involved that Taubes did not. Although given the excessive misrepresentation of not only her work but those of others I am deeply skeptical that Teicholz fairly represented her conversations with some of these individuals. + +Teicholz also attempts to appeal to the soccer mom demographic by writing a chapter about how women and children are not adequately studied when it comes to low-fat diets. However, any study she might cite in favor of her low-carb narrative (Shai, for example) has similar male:female ratios, and most don’t include children. There are good reasons for this, of course, but I won’t discuss them here. + +At any rate, to wrap up this introduction, the results of fact-checking the first five chapters of BFS are below. I posses all of the texts that are discussed. I will be happy to provide them if you like. Let me know. + +### CHAPTER 1: THE FAT PARADOX: GOOD HEALTH ON A HIGH-FAT DIET + +On page 11-12 Teicholz discusses the Masai tribe of Africa and how they consume quite a bit of milk daily yet have very low cholesterol (much like Taubes does in ch. 2 of GCBC). She also mentions that they are not fat and they don’t have high blood pressure. I don’t know why she throws the blood pressure and leanness in there since no one claims that milk causes high blood pressure, nor that these African tribes that walk about 30 miles per day and burn 300-500 kcals/hour would be fat because they drink milk. The real crime here is one of omission. + +In support of her argument that diets heavy in saturated fat won’t lead to high cholesterol because the Masai do it, she cites an article published in the _NEJM_\u{00A0}titled “Some Unique Biologic Characteristics of the Masai of East Africa” [[1](https://doi.org/10.1056/NEJM197104012841304)].\u{00A0}The _entire point_ of that article was to claim that the reason that the Masai have such low cholesterol levels despite a diet heavy in saturated fats was because they have a unique feedback mechanism that suppresses endogenous cholesterol synthesis that most of us don’t have. Yet there of course is no mention of this in the text (or GCBC) because to suggest that their low cholesterol was due to genetics would hurt her meat-is-good-for-you narrative. + +Continuing with the Masai on page 12, Teicholz discusses George Mann and his findings: + +> If our current belief about animal fat is correct, then all the meat and dairy these tribesmen were eating would have caused an epidemic of heart disease in Kenya. However, Mann found exactly the opposite—he could identify almost no heart disease at all. + +As evidence for this she cites a paper titled “Atherosclerosis in the Masai” that does indicate very little evidence of infarctions, but does state the following: + +> We find the Masai vessels do show extensive atherosclerosis; they show coronary intimal thickening which is equal to that seen in elderly Americans. + +Mann goes on to say that the reason why there are so few occlusions despite the extensive atherosclerosis (ASCVD) is that the Masai’s blood vessels enlarge as they age [[2](https://doi.org/10.1093/oxfordjournals.aje.a121365)]. + +Now that we have uncovered some very important points that were concealed by Teicholz, we are still confronted with an odd reality. The Masai consume a ton of milk and likely a fair amount of meat and yet they do not have elevated cholesterol levels due to a unique biological mechanism. Despite the low cholesterol they still get ASCVD. Enough that men in their prime have the blood vessels of elderly Americans. Yet despite even this they manage to escape heart attacks because their vessels are larger than average. Wow. I don’t know what to make of the Masai, except that they are indeed a unique people. In this case I think we can treat the Masai as outliers and not assume that we can live like they do and remain free of heart disease. + +On page 14 Teicholz discusses a text by Hrdlicka [[3](http://repository.si.edu/xmlui/handle/10088/15501)]\u{00A0}published near the turn of the (last) century and states: + +> The Native Americans he visited were eating a diet of predominantly meat, mainly from buffalo, yet, as Hrdlicka observed, they seemed to be spectacularly healthy and lived to a ripe old age. + +However, if you go look at the text you will find that the diet of Native Americans is based around, y’know, the most abundant crops in the Americas: corn and wheat. There are several pages devoted to describing the diet, so I don’t want to quote all of it, but perhaps this will give you an idea of what Hrdlicka really found. Page 19: + +> The principal article of diet among the Indians throughout the Southwest and Mexico is maize, which is eaten in the form of bread of various kinds, or as mush, or boiled entire. It is also parched on charcoal and eaten thus, or is ground into a fine meal, which, sweetened, constitutes the nourishing pinole of some of the tribes. Wheat is used in similar ways but less extensively. Next in importance to corn and wheat in the Indian diet are meat and fat and beans. Meat is scarce. + +For a more nuanced view of the issue see [this post](http://carbsanity.blogspot.com/2014/05/no-big-surprise.html)\u{00A0}and scroll down to “Hrdlička and the diet of Southwestern Native Americas.” + +Page 15, Teicholz attempts to make the case that Africans living in British colonies nearly 100 years ago ate a ton of meat and had basically no cancer. As evidence for both of these claims she cites what amounts as a Letter to the Editor in the _BMJ_\u{00A0}by George Prentice [[4](https://doi.org/10.1136/bmj.2.3285.1181-a)]. + +> The _British Medical Journal_\u{00A0}routinely carried reports from colonial physicians who, though experienced in diagnosing cancer at home, could find very little of it in the African colonies overseas. So few cases could be identified that “some seem to assume that it does not exist,” wrote George Prentice, a physician who worked in Southern Central Africa, in 1923. + +If you bother to look at the publication by Prentice you will notice that right after he says that some seem to assume that cancer does not exist, he immediately states why this is both a false and dangerous belief that has led to a patient of his dying of cancer because he himself believed that Africans did not get cancer when he was a younger doctor. He didn’t remove a breast tumor when he could have and should have and that his patient died because of this. Prentice also says in addition to breast cancer he sees other cancers all the time: + +> I have also seen epithelioma of the face. In this case the eyelids and the whole of one eye were completely destroyed, and the bone of the eye socket was attacked; the case was inoperable. I have seen a tumour, fungating and evidently malignant, that had practically split the bones of the face, causing the eyes to bulge laterally and giving a strange chameleon look to the patient. It was inoperable. I have seen cancer of the left ovary that proved fatal. I believe I have seen cases of malignant disease of the liver, but as there was no autopsy the diagnosis was not confirmed. I have removed many large tumours of the testicle which, if not cancerous, are of a nature unknown to me. Keloids and fatty tumours are very common. + +In case you could not tell, Teicholz takes Prentice’s words _completely out of context_\u{00A0}to make it appear he was communicating the opposite of what he was actually communicating. + +I’m sure she’s also hoping that the reader won’t realize that – true or not – all she has been discussing so far in the book are very tenuous and unscientific correlations, and that by the time the readers get to the part where she bashes these types of associations that they won’t realize she’s being wildly inconsistent and even hypocritical in how she deals with studies and observations. + +Page 16: + +> It is true that American beef from a cow raised on grain does have a different fatty-acid profile from an ox hunted in the wild. In 1968, the English biochemist Michael Crawford was the first to look at this question in detail. […] His paper seemed to confirm that modern-day people should not consider their domesticated meat to be anywhere near as healthy as hunted meat from the wild. And for the past forty-five years, Crawford’s paper has been widely cited, forming the general view of the subject. What Crawford buries in his data, however, is that the _saturated_\u{00A0}fat content of the wild and domesticated animal meats hardly differed at all. + +Yep. Crawford “buries” it by making it Figure 1 in his paper [[5](https://doi.org/10.1016/s0140-6736(68)92034-5)].\u{00A0}I know when I want to bury data in a paper I visualize it and put it at the head of the results. + +![][image1] +[image1]: /blog/bigfatsurprise/image1.png + + +By the way, this “widely cited” paper has been cited only 183 times since it’s publication in 1968. Truly a landmark paper, this one. + +### CHAPTER 2: WHY WE THINK SATURATED FAT IS UNHEALTHY + +**Cribbing Taubes Alert** + +In GCBC on page 14 Taubes discusses a century-old document that was published by a German journal that is both very difficult to find and written in German. + +> The evidence initially cited in support of the hypothesis came almost exclusively from animal research-particularly in rabbits. In 1913, the Russian pathologist Nikolaj Anitschkow reported that he could induce atherosclerotic-type lesions in rabbits by feeding them olive oil and cholesterol. + +Do you think Taubes both A) possesses that obscure text AND B) is fluent in German? It’s possible, although my money would be on Taubes simply reading what others had written about the study and simply paraphrasing. + +BFS page 22: + +> Early evidence suggestively linking cholesterol to heart disease also came from animals. In 1913, the Russian pathologist Nikolaj Anitschkow reported that he could induce atherosclerotic-type lesions in rabbits by feeding them huge amounts of cholesterol. + +What are the odds that Teicholz also speaks German and has the German text that was published over 100 years ago? Again, possible, but given the similarity of how she and Taubes discuss the paper my guess is that she simply paraphrased Taubes without attribution. + +Here’s something interesting… On page 16 of GCBC Taubes says the following: + +> In 1937, two Columbia University biochemists, David Rittenberg and Rudolph Schoenheimer, demonstrated that the cholesterol we eat has very little effect on the amount of cholesterol in our blood. + +As evidence he cites Rittenberg and Schoenheimer’s 1937 paper titled “Deuterium as an indicator in the study of intermediary metabolism XI. Further studies on the biological uptake of deuterium into organic substances, with special reference to fat and cholesterol formation” [[6](https://doi.org/10.1126/science.82.2120.156)]. + +On page 23 of BFS Teicholz writes the following: + +> The notion that cholesterol in the diet would translate directly into higher cholesterol in the blood just seemed intuitively reasonable, and was introduced by two biochemists from Columbia University in 1937. + +She also cites the same exact paper. You see the problem, right? Both Taubes and Teicholz claim opposite things yet cite the same paper as evidence. So who is correct? Actually neither of them are correct because the cited text doesn’t address the issue. The paper discusses experiments on animals such as rodents and chicks, not humans as is implied by both Taubes and Teicholz. Furthermore, the only thing these experiments demonstrate is that these animals are capable of synthesizing cholesterol, and has essentially nothing to do with dietary cholesterol influencing or not influencing serum cholesterol. + +Continuing with the dietary cholesterol controversy, on page 23 immediately after the above statement Teicholz claims: + +> It was Ancel Keys himself who first discredited this notion. Although in 1952 he stated that there was “overwhelming evidence” for the theory […] + +She then accuses him of being a hypocritical flip-flopper for arrogantly walking the statement back three years later by saying that tremendous amounts of cholesterol have only a trivial effect on serum cholesterol and that “this point requires no further consideration.” + +Damn, this guy sounds like an arrogant prick considering he wholly endorsed the theory a few years before, right?! + +…Except if you look at the 1952 paper where Teicholz pulls that quote Keys says the EXACT OPPOSITE of what Teicholz claims [[7](https://doi.org/10.1161/01.CIR.5.1.115)]. In the paper Keys argues that the animal experiments that have shown that feeding high cholesterol to, say, rabbits have no relevance to humans, going on to say + +> No animal species close to man in metabolic habitus has been shown to be susceptible to the induction of atherosclerosis by cholesterol feeding. + +AND + +> From the animal experiments alone the most reasonable conclusion would be that the cholesterol content of human diets is unimportant in human atherosclerosis. + +AND + +> Direct evidence on man in this connection is unimpressive. + +Besides, even if he did hold an erroneous belief beforehand, why would you want to knock a guy for simply following the evidence? This is _science_: you are supposed to always be self-correcting. + +Page 23-24: + +> In 1992, one of the most comprehensive analyses of this subject concluded that the vast majority of people will react to even a great deal of cholesterol in the diet by ratcheting down the amount of cholesterol the body itself produces.\u{00A0}[…] Responding to this evidence, health authorities in Britain and most other European nations\u{00A0}**in recent years** have rescinded their advisories to cap dietary cholesterol. + +Emphasis mine. The reason for bolding “in recent years” is because the evidence cited for this sentence is a paper published in 1987 [[8](https://doi.org/10.1093/ajcn/45.5.1060)]!!\u{00A0}And of course the evidence they were apparently responding to was a meta-analysis published in 1992 [[9](https://doi.org/10.1093/ajcn/55.6.1060)].\u{00A0}There’s a chronology problem here. A meta-analysis, by the way, whose first sentence of the summary states: + +> **Serum cholesterol concentration is clearly increased by added dietary cholesterol**\u{00A0}but the magnitude of predicted change is modulated by baseline dietary cholesterol. + +Again, emphasis mine. + +On page 25 you will see this structure: + +![][image2] +[image2]: /blog/bigfatsurprise/image2.png + +This structure is incorrect on many levels. For one it is not even a fatty acid. It’s actually not anything because it is not a legitimate chemical structure, but it’s closest to pentane which no one would want to consume. In order for it to be a fatty acid it would at least need a carboxyl group at one end. However, that would make the structure into valeric acid which is not commonly found in foods (especially the butter, meat, and cheese Teicholz promotes) and not commonly consumed unless you’re eating valerian root. + +I pointed this out on my Amazon review of the book and I got pilloried because apparently I was supposed to simply _know_ that the Fisher projection was not really supposed to be a fatty acid, but was supposed to be a simple, generic structure to illustrate how hydrogens are arranged around carbon atoms. However, if Teicholz didn’t want to put a proper carboxyl group because she was afraid it might confuse her audience she could have at least put an “R” or ellipses or something to indicate that part of the fatty acid is being left out in order to concentrate on the hydrogens. Even so, if it is indeed just a generic structure used to illustrate how hydrogens are arranged then why are the end hydrogens arranged incorrectly, and why are there two missing hydrogens? This structure is absolutely wrong no matter how you slice it. + +The lies about Ancel Keys continue on page 27 when Teicholz discusses a paper of his called “Atherosclerosis: A Problem in Newer Public Health” and says this paper received “enormous attention” and was the genesis of America’s alleged fear of fat. + +There is no evidence at all that Keys’s 1953 paper received “enormous attention.” In fact, the evidence that exists would suggest the opposite. There was no mention of the paper in the lay press. That is until relatively recently when [Gary Taubes began lying about it](https://thescienceofnutrition.wordpress.com/2014/04/21/fat-in-the-diet-and-mortality-from-heart-disease-a-plagiaristic-note/). What about academia? According to Google Scholar this highly influential paper has only been cited 247 times since its publication, which spans 61 years as of this writing. An average of four citations per year. It was cited merely 99 times from the time it was published to 1973, a full twenty years after its publication. For comparison, on page 159-160 Teicholz mentions a study whose results she claims were “ignored.” That study was published in 1992 and has received 682 citations. + +Page 31: + +> Keys found further ammunition for his hypothesis from a compelling observation made during World War II, which is that deaths from heart disease dropped dramatically across Europe during wartime and rebounded soon afterward. These events led Keys to presume that the food shortages— particularly of meat, eggs, and dairy—were very likely the cause. There were, however, other explanations: for instance, sugar and flour were also scarce during the war; people breathed fewer car-exhaust fumes due to gasoline shortages and got more exercise by cycling or walking to get around. Other scientists noted these alternative explanations for the decline in heart disease, but Keys dismissed them outright. + +The paper that noted the alternative explanations was published in 1957, yet Keys was apparently dismissing them in 1956 [[10](https://doi.org/10.1016/0002-9343(57)90325-x)[[11](https://doi.org/10.1016/0021-9681(56)90040-6)]. + +On page 34, Teicholz discusses a paper by Yerushalmy and Hilleboe that criticized a graph in Keys’s “Atherosclerosis: A Problem in Newer Public Health” paper mentioned above [[12](https://pubmed.ncbi.nlm.nih.gov/13441073/)]. + +> Yerushalmy’s objection was that Keys seemed to have selected only certain countries that fit his hypothesis. There were other factors that could equally well explain the trends in heart disease in all these countries, he asserted. + +If you actually read Keys’s paper you will note that Keys mentioned that he left out some less-developed countries because they had very poor vital health statistics [[13](https://pubmed.ncbi.nlm.nih.gov/13085148/)].\u{00A0}Some more developed European countries he claims he would have included if the Nazi’s had not very recently invaded, occupied, and rationed food which would confound his simple cross-sectional analysis. It wasn’t that he was a diabolical scientist bent on lying to the public about the cause of heart disease. Or if he was he had a damn fine excuse for not using those countries. + +It’s funny because on pages 34-36 Teicholz criticizes Keys for not including more European countries like France and Switzerland (which incidentally would have fallen right in line with Keys’s graph). Then a few pages later on 37-38 Teicholz discusses Keys’s Seven Countries Study and criticizes him for including countries that Nazi Germany had invaded and occupied several years before. + +At any rate, Yerushalmy and Hilleboe did indeed point out some other factors in their paper, most prominently they pointed out that [both _animal_\u{00A0}fat and _animal_\u{00A0}protein were far better correlated with heart disease than total fat](https://thescienceofnutrition.files.wordpress.com/2014/03/yh-2.jpg). Many different types of heart disease, in fact. This held true whether or not it was calculated as total amounts or as a percentage of total calories. Moreover, _vegetable_\u{00A0}protein and _vegetable_\u{00A0}fat were negatively correlated with heart disease. + +Of course there was no way that Teicholz was ever going to mention this. + +Page 40: + +> I looked more closely into the dietary data on Greece, because it became the exemplar for the Mediterranean diet (see Chapter 7), and I found one of the most stunning and troubling errors. In that country. Keys had sampled the diets on Crete and Corfu more than once, in different seasons, in order to capture variations in the food eaten. Yet in an astonishing oversight, one of the three surveys on Crete fell during the forty-eight-day fasting period of Lent. + +_Astonishing_\u{00A0}oversight? One of the most _stunning_\u{00A0}and _troubling_ errors? Despite what appears to be insincere hand-wringing over this gravest of all scientific errors, I don’t really see the problem here. The question that needs to be asked here is: Does collecting dietary information during a period where some Christians adhere to a quasi-fasting ritual invalidate the dietary data? I suppose it would if a sufficient number of participants were strictly adhering to the fast. Was this the case? According to the 211-page write-up of the study programs and objectives this was not the case [[14](https://pubmed.ncbi.nlm.nih.gov/5442783/)]: + +> The seasonal comparisons in Crete and Corfu were of interest because the survey in Crete in February and part of the survey in Corfu in March-April were in the 40-day fasting period of Lent of the Greek Orthodox church, but strict adherence did not seem to be common in the populations of the present study. + +How would the scientists come to the conclusion that there was no strict adherence? They could simply compare the dietary data collected during the spring with the dietary data collected during other times of the year. What if the participants were all lying on their dietary surveys? The researchers also collected the actual foods eaten by participants, lyophilized them, and sent them out for chemical analysis. Apparently there were no significant differences with that data either. + +Even if the alleged “error” of collecting data in the spring was so insurmountable it had to be thrown out, it would not invalidate the other two dietary collections in Crete and it would certainly not be nearly enough to nullify the entire study. It seems pretty clear to me that while writing this book Teicholz is actively searching for any hint of impropriety. She discovered a mention of Lent, decided to ignore the rest, and enthusiastically proclaimed that she had unearthed some alarming facts about the study. + +Additionally she tries to make the case on pages 41 and 42 that Keys tried to sheepishly bury the flawed methodology of his crappy study. If this is true he did an exceedingly poor job of it, considering in addition to all of the analyses published from the data. + +Keys published: + +- A 211-page paper describing the study objectives and methods [[14](https://pubmed.ncbi.nlm.nih.gov/5442783/)]. + +- A 300+ page monograph describing the particular details of data collection in each country [[15](https://doi.org/10.1111/j.0954-6820.1966.tb04737.x)]. + +- A 300+ page book describing in great detail the study and its results [[16](https://doi.org/10.1001/jama.1981.03310300063026)]. + + +In addition, there were other entire books published on the study [[17](https://books.google.ca/books/about/The_Seven_Countries_Study.html?id=hgWRAAAACAAJ&redir_esc=y)[[18](https://link.springer.com/book/10.1007/978-4-431-68269-1)].\u{00A0}Keys is not being obfuscatory. + +### CHAPTER 3: THE LOW-FAT DIET IS INTRODUCED TO AMERICA + +**Cribbing Taubes Alert** + +On page 49 Teicholz discusses an AHA nutrition committee report: + +> Committee members went so far as to rap diet-heart supporters like Keys on the knuckles for taking “uncompromising stands based on evidence that does not stand up under critical examination.” The evidence, they concluded, did not permit such a “rigid stand.” + +On page 20 of GCBC, Taubes makes a similar statement regarding the same report and uses the same quotes [[19](https://doi.org/10.1001/jama.1957.62980180004013)]. I would argue that both get it wrong. The report seems to have somewhere between a neutral and a favorable view of Keys, as evidenced by the following quotes: + +> Mayer et al. found that high-fat animal or vegetable diets increased and low-fat diets decreased serum cholesterol of normal subjects, confirming earlier data of Keys. + +> Keys, in particular, has placed emphasis on the proportion of total dietary calories contributed by the common food fats […] Certainly there is an abundance of data, both clinical and experimental, that tends to relate excess fat intake to atherosclerosis. + +**Cribbing Taubes Alert** + +On page 49 Teicholz continues discussing the views of the AHA: + +> The AHA committee swung around in favor of their ideas, and the resulting report in 1961 argued that “the best scientific evidence available at the present time” suggested that Americans could reduce their risk of heart attacks and strokes by cutting the saturated fat and cholesterol in their diets. + +On page 21 of GCBC Taubes says essentially the same thing and uses the same quote from the same paper [[20](https://pubmed.ncbi.nlm.nih.gov/14447694/)]. + +Continuing on the report, page 50: + +> Keys himself thought that the 1961 AHA report he had helped write suffered from “some undue pussy-footing” because it had prescribed the diet only for high-risk people rather than the entire American population […] + +On page 21 of GCBC Taubes says almost the exact same thing, including the undue pussy-footing quote. However, Taubes cites the quote correctly as being from _Time_\u{00A0}magazine’s article titled Fat in the Fire, whereas Teicholz cites it incorrectly as The Fat of the Land [[21](https://content.time.com/time/subscriber/article/0,33009,895155,00.html)][[22](https://content.time.com/time/subscriber/article/0,33009,828721,00.html)]. + +**Cribbing Taubes Alert** + +There is getting to be too many of these alerts. On page 4 of GCBC Taubes states: + +> “People should know the facts,” Keys told Time. “Then if they want to eat themselves to death, let them.” + +BFS page 50: + +> “People should know the facts,” he said. “Then, if they want to eat themselves to death, let them.” + +This quote is found in _Time_\u{00A0}magazine’s The Fat of the Land article [[22](https://content.time.com/time/subscriber/article/0,33009,828721,00.html)].\u{00A0}Continuing… + +GCBC page 21: + +> The _Time_\u{00A0}cover story, more than four pages long, contained only a single paragraph noting that Keys’s hypothesis was “still questioned by some researchers with conflicting ideas of what causes coronary disease.” + +BFS page 51: + +> In the _Time_\u{00A0}article, there is only a brief mention of the reality that Keys’s ideas were “still questioned” by “some researchers” with conflicting ideas about what causes coronary disease. + +On page 54 Teicholz educates the reader on case-control studies: + +> These studies are understood to suffer from “recall bias,” whereby patients may inaccurately remember past consumption. + +_Immediately after_\u{00A0}this disclaimer Teicholz goes on to produce several case-control studies that fit her narrative. By doing so, this is what I hear as a reader: “Case-control studies suck. Don’t try to use them as evidence. But here are a few whose results I like and you should know about them.” + +**Cribbing Taubes Alert** + +GCBC page 26: + +> [JAMA] reported that the mostly Italian population of Roseto, Pennsylvania, ate copious animal fat – eating prosciutto with an inch-thick rim of fat, and cooking with lard instead of olive oil – and yet had a “strikingly low” number of deaths from heart disease, Keys said it warranted “few conclusions and certainly cannot be accepted as evidence that calories and fats in the diet are not important.” + +BFS page 55: + +> [T]he mostly Italian population living there had a “strikingly low” number of deaths from heart disease […] the local diet included copious amounts of animal fats, including prosciutto with fat an inch thick around the rim, and most meals cooked in lard. […] Keys concluded that the Roseto data “certainly cannot be accepted as evidence that calories and fats in the diet are not important.” + +There is so much information in both those publications, yet surprisingly the same exact quotes are independently plucked by Teicholz [[23](https://doi.org/10.1001/jama.1964.03060360005001)][[24](https://doi.org/10.1001/jama.1966.03100020081018)]. + +Page 56: + +> F. W. Lowenstein, a medical officer for the World Health Organization in Geneva, collected every study he could find on men who were virtually free of heart disease, and concluded that their fat consumption varied wildly. + +I suppose that’s true according to the study [[25](https://doi.org/10.1159/000385025)].\u{00A0}Fat intake varied from 21 g/day to 355 g/day in the case of the Somalis. Although, if you remove the Somalis as something of an outlier (they also consume 6,247 kcals/day according to the paper), then fat intake in all the other populations drops to 100 grams of fat per day or less. + +**Cribbing Taubes Alert** + +Teicholz uses Taubes’s Karl Popper quote. + +GCBC page 24-25: + +> [The scientific method requires] that scientists not just test their hypotheses, but try to prove them false. “The method of science is the method of bold conjectures and ingenious and severe attempts to refute them,” said Karl Popper. + +BFS page 56-57: + +> A scientist must always try to disprove his or her own hypothesis. Or, as one of the great science philosophers of the twentieth century, Karl Popper, described, “The method of science is the method of bold conjectures and ingenious and severe attempts to refute them.” + +Page 57: + +> […] Keys was not on the lookout for his own biases. He considered the burden of proof to be on those opposing him. He made no attempts to refute his own ideas, as Popper advised. He promoted the “idol of his mind” without hesitation. + +OMG. _What?! How??_\u{00A0}Can I get some evidence for that? + +Page 65 Teicholz then pivots to Framingham and mentions how they found cholesterol to be a big predictor of death [[26](https://www.semanticscholar.org/paper/Carbohydrate-induced-and-fat-induced-lipemia.-Ahrens-Hirsch/e1e4cfdfe4d98afd5b711226cdc75bdb0c843cb9)][[27](https://doi.org/10.1001/jama.257.16.2176)]. BUT…. Let’s face it. They are bound to happen. There are surely citation errors in this blog post. + +> However, thirty years later, in the Framingham follow-up study—when investigators had more data because a greater number of people had died— it turned out that the predictive power of total cholesterol was not nearly as strong as study leaders had originally thought. + +Is she talking about the paper that states in the conclusion “This study and the Coronary Drug Project results on nicotinic acid therapy show a direct association of cholesterol levels with mortality, which becomes stronger with lengthy follow-up” [[27](https://doi.org/10.1001/archinte.1992.00400190013003)]?\u{00A0}Is that the one she’s talking about? Because that’s the one she cited. The paper also states that the association holds strong even after adjusting for individual differences in blood pressure, smoking, relative weight, and diabetes. + +Page 67: + +> Not until 1992, in fact, did a Framingham study leader publicly acknowledge the study’s findings on fat. “In Framingham, Mass, the more saturated fat one ate . . . the _lower_\u{00A0}the person’s serum cholesterol. . . and [they] weighed the _least_” wrote William P. Castelli […] + +What the reader doesn’t know is that 1) this quote is taken from an editorial that extols the virtues not of meat and cheese, but of the unsaturated fat in nuts, 2) there is literally a half page of text between the ellipses, 3) the italics are not part of the original quote, and most importantly 4) Teicholz cuts off the quote immediately before the author mentions that he is talking about the people that were the _most physically active_ [[29](https://doi.org/10.1001/archinte.1992.00400190013003)].\u{00A0}But I’m sure their physical activity has no effect on their weight or cholesterol levels, right? + +**Cribbing Taubes Alert** + +On page 159 of GCBC Taubes quotes from a 1967 JAMA editorial [[30](https://doi.org/10.1001/jama.1966.03110190079022)]: + +> _JAMA_\u{00A0}published an editorial in response to Kuo’s article, suggesting that the “almost embarrassingly high number of researchers [who had] boarded the ‘cholesterol bandwagon'” had done a disservice to the field. “This fervent embrace of cholesterol to the exclusion of other biochemical alterations resulted in a narrow scope of study,” the editorial said. + +On page 71 of BFS Teicholz uses the same exact quote: + +> An “almost embarrassingly high number of researchers boarded the ‘cholesterol bandwagon,'” lamented the editors of the _Journal of the American Medical Association_ in 1967, referring to the narrow, “fervent embrace of cholesterol” to the “exclusion” of other biochemical processes that might cause heart disease. + +### CHAPTER 4: THE FLAWED SCIENCE OF SATURATED VERSUS POLYUNSATURATED FAT + +**Cribbing Taubes Alert** + +Much like elsewhere in BFS, Teicholz appears to take an incredible amount of what might be called “inspiration” from GCBC. Much like in GCBC, Teicholz discusses the Anti-Coronary Club trial, plucks the same quotes, and discusses the same media reactions. + +GCBC, page 36: + +> The first and most highly publicized was the Anti-Coronary Club Trial, launched in the late 1950s by New York City Health Department Director Norman Jolliffe. + +BFS, page 73: + +> An early and celebrated trial was called the Anti-Coronary Club, launched by Norman Jolliffe, director of the New York City Health Department, in 1957. + +GCBC, page 36: + +> The eleven hundred middle-aged members of Jolliffe’s Anti-Coronary Club were prescribed what he called the “prudent diet,” which included at least one ounce of polyunsaturated vegetable oil every day. The participants could eat poultry or fish anytime, but were limited to four meals a week containing beef, lamb, or pork. + +BFS, page 73: + +> He signed up eleven hundred men to his Anti-Coronary Club and instructed them to reduce their consumption of red meat, such as beef, lamb, or pork, to no more than four times a week (which would be considered a lot by today’s standards!) while consuming as much fish and poultry as they liked. + +GCBC, page 36: + +> [T]wenty-six members of the club had died during the trial, compared with only six of the men whose diet had not been prudent. + +BFS, page 74: + +> [T]wenty-six members of the diet club had died during the trial, compared to only six men from the controls. + +Okay, maybe both Taubes and Teicholz did independent research and came across the same study and both found it was compelling enough to include in their books. And maybe they both independently included the same info from the study as well. It’s certainly possible. But would they mention the same NYT article? + +GCBC, page 36: + +> “Diet Linked to Cut in Heart Attacks,” reported the New York Times in May 1962. + +BFS, page 74: + +> “Diet Linked to Cut in Heart Attacks,” reported the New York Times in 1962 […] + +Would they independently use the same quote from the multiple trial publications? + +GCBC, page 36: + +> Eight members of the club died from heart attacks, but none of the controls. This appeared “somewhat unusual,” Christakis and his colleagues acknowledged. + +BFS, page 74: + +> [I]nvestigators began to find “somewhat unusual” results: […] Eight members of the club had died of heart attacks, but not one of the controls. + +They also both misrepresent the study: + +GCBC, page 36: + +> They discussed the improvements in heart-disease risk factors (cholesterol, weight, and blood pressure decreased) and the significant reduction in debilitating illness “from new coronary heart disease,” but omitted further discussion of mortality. + +BFS, page 74: + +> In the discussion section of the final report, the authors […] emphasized the improved risk factors among the men in the diet club but ignored what those risk factors had blatantly failed to predict: their higher death rate. + +Notice how both Taubes and Teicholz minimize the main results of the study, namely that the prudent diet did exactly what researchers imagined it would do: reduce not only risk factors for heart disease, but also actual coronary events [[31](https://doi.org/10.2307/4592649)[[32](https://doi.org/10.1093/ajcn/7.4.451)[[33](https://doi.org/10.1056/NEJM196205172662001)].\u{00A0}Further, they both misrepresent the study by claiming those devious scientists omitted discussion of death rate when nothing could be further from the truth. Both cited publications discuss death rate and mortality among participants very clearly. In fact, the slight difference in death from causes other than heart disease was not even significant. From the 1966 publication31\u{00A0}(emphasis mine): + +> The rates for these deaths in the 50-59 age group were 689 per 100,000 person-years in the experimental group, and 666 per 100,000 in the control group**. The difference between these two rates is slight and not statistically significant.** + +**Cribbing Taubes Alert** + +In GCBC, Taubes immediately segues from discussing the Anti-Coronary Club trial to discussing the Dayton’s LA Veterans trial [[34](https://doi.org/10.1016/S0140-6736(70)90868-8)][[35](https://doi.org/10.1016/s0140-6736(71)91086-5)[[36](https://doi.org/10.3945/ajcn.110.006643)].\u{00A0}Strangely enough Teicholz does the exact same thing. + +GCBC, page 37: + +> In July 1969, Seymour Dayton, a professor of medicine at the University of California, Los Angeles, reported the results of the largest diet-heart trial to that date. Dayton gave half of nearly 850 veterans residing at a local Veterans Administration hospital a diet in which corn, soybean, safflower, and cottonseed oils replaced the saturated fats in butter, milk, ice cream, and cheeses. The other half, the controls, were served a placebo diet in which the fat quantity and type hadn’t been changed. The first group saw their cholesterol drop 13 percent lower than the controls […] + +BFS, page 75: + +> It was conducted by UCLA professor of medicine Seymour Dayton on nearly 850 elderly men living in a local Veterans Administration (VA) home in the 1960s. For six years, Dayton fed half the men a diet in which corn, soybean, safflower, and cottonseed oils replaced the saturated fats in butter, milk, ice cream, and cheese. The other half of the men acted as controls and ate regular foods. The first group saw their cholesterol levels drop almost 13 percent more than did the controls. + +Is it just me or do those paragraphs sound very similar? + +GCBC, page 37: + +> “Was it not possible,” Dayton asked, “that a diet high in unsaturated fat…might have noxious effects when consumed over a period of many years? Such diets are, after all, rarities […]” + +BFS, page 75: + +> “Was it not possible,” he asked, “that a diet high in unsaturated fat. . . might have noxious effects when consumed over a period of many years? Such diets are, after all, rarities.” + +Both Taubes and Teicholz introduce the author and gives a brief background of the trial, then relate the conditions and methods of the study, then they cherry-pick from the results. They both then interpret the results for you. ONLY AFTER ALL THAT do Teicholz and Taubes reproduce a couple sentences from the journal article questioning whether a diet of unsaturated fat might have “noxious effects” presumably because of the study results. What they likely want the reader\u{00A0}to think is that after the results of the study are in and the numbers have been crunched and the data has been analyzed Dr. Seymour Dayton is sitting at his desk and ruminating on what could have produced these results. As if he is asking a rhetorical question or providing a hypothesis for a future dietary trial. + +In reality Dayton actually asks that question in the beginning of the paper to kind of whet the reader’s appetite. He then goes on to answer that very question in the text with an answer that would not be favorable to Teicholz’s (or Taubes’s) argument. Do you want to know if the experimental diet has noxious effects? Well there’s a section in the results portion of the study titled “Does the Experimental Diet Have Noxious Effects?” where Dr. Dayton states34: + +> As indicated in table 29 and discussed in some detail above, the excess mortality in nonatherosclerotic categories was not sufficiently impressive to justify the conclusion that harmful effects had been demonstrated. + +AND + +> One may also wonder whether the experimental diet may have exerted its effect on mortality data primarily by accelerating nonatherosclerotic deaths (see table 28), decreasing the atherosclerotic mortality by inducing early death due to other cause. Such a mode of action would be associated with higher numbers of deaths in the experimental group compared with the controls, whereas the reverse was true in this trial (fig. 13). + +AND + +> The other observation which raised some question of a possible toxic effect was the low arachidonic acid concentrations in atheromata of long-term, high-adherence subjects on the experimental diet (tables 37 to 40). For reasons already cited, this may be more appropriately viewed as evidence of a salutary rather than a toxic effect. + +Teicholz both 1) Uses the exact same quote Taubes does in GCBC, phrases it the exact same way, and removes the same exact words from within the quote; and 2) Takes the quote out of context just like Taubes does in order to imply something antithetical to what Dayton actually meant. + +Moreover, both Taubes and Teicholz either minimize or outright ignore results of the study that they do not like (ironically, a trait they accuse the big, bad nutrition researchers of doing). Remember the _control_ group was **high in saturated animal fat**, and the _experimental_ group was **high in unsaturated fats from plants**. + +> The number of men sustaining events in major categories, in the control and experimental groups, respectively, was: definite silent myocardial infarction, 4 and 9; definite overt myocardial infarction, 40 and 27; sudden death due to coronary heart disease, 27 and 18; definite cerebral infarction, 22 and 13. The difference in the primary end point of the study-sudden death or myocardial infarction was not statistically significant. However, when these data were pooled with those for cerebral infarction and other secondary end points, the totals were 96 in the control group and 66 in the experimental group; _P_\u{00A0}= 0.01. Fatal atherosclerotic events numbered 70 in the control group and 48 in the experimental group; _P_ < 0.05. Life-table analysis in general confirmed these conclusions. For all primary and secondary end points combined, eight year incidence rates were 47.7% and 31.3% for the control and experimental groups, respectively; _P_\u{00A0}value for the difference between the two incidence curves was 0.02. + +If you don’t want to read the above block quote, I’ll summarize it for you: in all but one endpoint that was measured **the experimental diet of unsaturated fats had less overt myocardial infarction, sudden death, cerebral infarction, fatal ASCVD events, etc.**\u{00A0}And not by a tiny margin – a significant margin. + +Page 75: + +> [V]egetable oils had been introduced into the food supply only in the 1920s, yet suddenly the oils were being recommended as a cure-all. In fact, the upward curve of vegetable oil consumption happened to coincide _perfectly_\u{00A0}with the rising tide of heart disease in the first half of the twentieth century […] + +Not true. At least not true by the study she cites [[37](https://doi.org/10.1161/01.CIR.102.25.3137)].\u{00A0}The study by Blasbalg et al simply shows the trends of fatty acid consumption from various sources. Specifically, it shows from which foods Americans have been getting their linoleic acid and alpha linolenic acid. It has absolutely zero analysis of heart disease or any other disease for that matter. Nor does she cite a separate paper that shows trends in heart disease to compare the paper on fatty acid consumption. + +Just for kicks, let’s do Teicholz’s work for her. Let’s start with the Blasbalg paper. It appears that in the 20th century butter and lard dropped precipitously at about mid-century. Shortly afterward poultry and shortening consumption rose. Soybean oil also rose concurrently with shortening probably because it was a prominent ingredient. Canola oil consumption also increased in the 90s. + +![][image3] +[image3]: /blog/bigfatsurprise/image3.png + +![][image4] +[image4]: /blog/bigfatsurprise/image4.png + +What about heart disease? According to a paper by Cooper et al CVD rose until about mid-century, but then begins a steady decline into the millennium [[38](https://www.academia.edu/98361249/Serum_lipoprotein_levels_in_patients_with_cancer)]. + +![][image5] +[image5]: /blog/bigfatsurprise/image5.png + +You have to ask yourself: does the vegetable oil correlate _perfectly_\u{00A0}with CVD? + +**Cribbing Taubes Alert**. + +In GCBC, after discussing the LA Veterans trial, Taubes moves immediately to discuss the Helsinki Mental Hospital Study. Strangely enough Teicholz does the exact same thing! What are the odds that they would both independently discuss the same trials _in the\u{00A0}very same order!_ + +GCBC, page 37: + +> Ordinary milk was replaced with an emulsion of soybean oil in skim milk, and butter and ordinary margarine were replaced with a margarine made of polyunsaturated fats. These changes alone supposedly increased the ratio of polyunsaturated to saturated fats sixfold. + +BFS, pages 76-77: + +> Ordinary milk was replaced with an emulsion of soybean oil in skim milk, and butter was replaced by a special margarine high in polyunsaturated fats. The vegetable oil content of the special diet was six times higher than in a normal diet. + +Page 86: + +> [R]emarkably, when Jerry Stamler reissued his 1963 book. _Your Heart Has Nine Lives_, it was published as a “professional” red leather edition by the Corn Products Company and distributed free of charge to thousands of doctors. Inside, Stamler thanks both that company and the Wesson Fund for Medical Research for “significant” research support. + +The very same point was also made by Taubes in GCBC, but that’s not my point here. What I’d like to say about this is that there is roughly half a page in the book that lists people and organizations that have lent financial support to the research in the book. Taubes and Teicholz, however, only list the vegetable oil manufacturers. + +However, neither list the National Dairy Council which is also named among the research supporters. The reason for leaving out organizations like the NDC should be pretty obvious by now. But let me spell it out for you just in case you’re confused: Both Teicholz and Taubes are attempting to craft a narrative where Big Vegetable Oil and greedy nutrition researchers are in cahoots with each other (and also the government) to dupe the American consumer into eating less butter and cheese. If Teicholz or Taubes were to mention that the National Dairy Council funded the same research, well, then that conspiracy narrative would be weakened. + +On pages 94-95, Teicholz makes the case that low cholesterol is associated with cancer in some studies, and strongly implies that low cholesterol might _cause_\u{00A0}cancer: + +> By 1981, nearly a dozen sizable studies on humans had found a link between lowering cholesterol and cancer, principally for colon cancer. + +This is kind of nit-picky, but notice how Teicholz uses the words “_lowering_ cholesterol” and not “low cholesterol.” This implies that the act of lowering cholesterol leads to cancer and not that the condition of low cholesterol is somehow linked to cancer. To the average Joe Schmo this may seem like I’m being petty and unreasonably contrarian, but if you ever take an epidemiology class you will know that how you phrase things matters a great deal. + +Anyway, let’s take a look at the studies Teicholz cites… + +**Cribbing Taubes Alert** + +The first thing to notice is that ALL of the studies she cites in favor of the link between low cholesterol and cancer are also cited by Gary Taubes in GCBC when he makes the same argument. Hmmm… + +- Pearce and Dayton 1971 [[36](https://doi.org/10.3945/ajcn.110.006643)]: Cited by Taubes, and as previously mentioned it is a bad study to cite in favor of this association. + +- Nydegger and Butler 1970 [[39](https://doi.org/10.1136/hrt.40.10.1069)]: Cited by Taubes. Does show a link between cancer and low lipoprotein levels. However, the authors point out this is likely due to some cholesterol-lowering effect of cancer and not the other way around, since people with chronically low cholesterol levels do not show an increased incidence of cancer. + +- Oliver et al 1978 [[40](https://doi.org/10.1136/bmj.280.6210.285)]: Cited by Taubes. The high-cholesterol group had a lower cancer rate than the two low-cholesterol groups, but it was not significant. From the paper: “These figures are surprisingly close to the rates observed in trial subjects in Groups I and III. Thus the data for all cancer do not give rise to special concern.” + +- Beaglehole et al. 1980 [[41](https://doi.org/10.1016/0021-9681(80)90026-0)]: Cited by Taubes. Shows a significant inverse relationship. + +- Kark et al. 1980 [[42](https://doi.org/10.1093/oxfordjournals.aje.a113171)]: Cited by Taubes. Also shows an inverse relationship between low cholesterol and cancer, but the authors suggest that the cancer is not likely a result of low cholesterol. From the paper: Were high cholesterol levels associated with improved survival, one would expect that those prevalent cases surviving until 1974 as well as live incident cases (surviving until 1974) would also have high cholesterols. The reverse was true. + +- Garcia-Palmieri et al. 1981 [[43](https://pubmed.ncbi.nlm.nih.gov/2025146/)]: Cited by Taubes. Shows a significant inverse relationship. + +- Stemmermann et al. 1981 [[44](https://doi.org/10.1093/jnci/67.2.297)]: Cited by Taubes. Shows a significant inverse relationship with colon cancer, but also shows a positive relationship with CHD but that, of course, is never mentioned. + +- Miller et al. 1981 [[45](https://doi.org/10.1093/oxfordjournals.aje.a113170)]: Cited by Taubes. Shows a significant inverse relationship, but makes it clear that suggesting low cholesterol might cause cancer is almost certainly wrong: “Although we found colon cancer patients to have significantly lower serum cholesterol levels than controls, the observed differences may partially reflect the metabolic influence of advancing disease, since there were no significant differences in serum cholesterol levels between controls and cases with early tumors. Our data suggest that low serum cholesterol levels in colon cancer patients do not necessarily precede tumor formation but may be a consequence thereof.” + +- Kozarevic et al. 1981 [[46](https://doi.org/10.1016/S0140-6736(74)92492-1)]: Cited by Taubes. Shows a non-significant relationship. Also mentions the following that is never discussed: “Serum cholesterol, as expected, was positively related to the incidence of coronary heart disease death.” + +- Rose et al. 1974 [[47](https://doi.org/10.1001/jama.1981.03310280023021)]: Cited by Taubes. Shows a significant inverse relationship with colon cancer. Again, the authors suggest that low-cholesterol might be a result of colon cancer. And again, this is not mentioned. + +- Williams et al. 1981 [[48](https://www.semanticscholar.org/paper/Effects-of-dietary-fat-on-the-uptake-and-clearance-Gammal-Carroll/c8c4012f8544114648842f1af6898b2ed197b0b7)]: Cited by Taubes. Shows a significant inverse relationship with colon cancer, but also mentions that it is possible that cancer of the colon can affect cholesterol absorption and excretion leading to low serum levels. I’m shocked this was not mentioned. Shocked. + + +Page 94: + +> [E]ver since corn oil had been shown to double the rate of tumor growth in rats in 1968, there had been a baseline level of concern about vegetable oils and cancer. + +There has? I don’t think so. But anyway, the study Teicholz cites is waaayy off the mark [[49](https://pubmed.ncbi.nlm.nih.gov/5922675/)]. For some brief detail some rats were fed either a low-fat diet, a diet high in coconut oil, or a diet high in corn oil. Then they were injected with a carcinogen known to cause breast cancer. Turns that the rates of uptake and clearance of the carcinogen was equal on all three diets. + +Page 94: + +> Other studies from this time led to the supposition that corn oil might cause cirrhosis of the liver. + +As evidence she cites a very obscure study on rats that were fed a diet _explicitly\u{00A0}designed to induce cirrhosis_\u{00A0}where some were also supplemented with corn oil. The researchers found that the corn oil did not exert a protective effect [[50](https://doi.org/10.1016/0091-7435(79)90033-1)]. Not preventing cancer DOES NOT EQUAL CANCER-PROMOTION. This is possibly the most twisted and misleading claim Teicholz has made so far in the chapter. + +Page 94: + +> NIH investigators found that Japanese people with cholesterol levels below 180 mg/dL suffered strokes at rates two to three times higher than those with higher cholesterol. + +The cited text does state that the people with the lowest cholesterol did have the highest incidence of stroke [[51](https://doi.org/10.1016/0091-7435(82)90059-7)], but I want to note a few things. First, this is not a study, but a letter to the editor. Second, these were not NIH investigators nor do I think it had anything to do with the NIH considering the NIH is never mentioned and the studies discussed in the letter were conducted by Japanese researchers on Japanese participants in Japan. Why would American taxpayer money fund this effort? Please correct me if I am wrong. + +Page 94-95: + +> The NHLBI became so concerned about the cancer findings that it hosted three workshops in 1981, 1982, and 1983. The evidence on the topic was reviewed and rereviewed by an extremely prominent group of scientists […] One suggestion was that low cholesterol might be an early symptom of cancer, rather than a cause. It was a plausible bit of logic. In the end, however, although the assembled researchers could find no convincing explanation for the cancer findings, they concluded that they did “not present a public health challenge” and did not “contradict” the more urgent, “commonsense” public health message for everyone to lower their cholesterol. + +A couple of minor things, but I could not find the word “commonsense” that was quoted above in either of the Feinleib papers that were cited [[52](https://doi.org/10.1093/oxfordjournals.aje.a113173)][[53](https://doi.org/10.1158/0008-5472.CAN-10-2953)]. Moreover, as I recall the public health message for everyone to lower their cholesterol never even existed. The message was/is for those with high cholesterol to lower their cholesterol. There’s a difference. + +The scientists involved included nearly all of the above authors of the scary observational studies that indicated a link between low serum cholesterol and cancer.52\u{00A0}Furthermore, the consensus of the panelists was unanimous in that there was not nearly enough evidence to suggest that lowering cholesterol is a risky behavior. + +If Teicholz was not an extraordinarily biased journalist, and she wanted to write BFS with a modicum of honesty she could have easily included some more recent studies that show no association with cholesterol-lowering and an increased risk of cancer [[54](https://doi.org/10.1074/jbc.M110.184010)[[55](https://doi.org/10.1093/annonc/mdr155)][[56](https://doi.org/10.1136/gut.2009.190900)][[57](https://doi.org/10.1136/bmj.308.6925.373)][[58](https://doi.org/10.1056/NEJM198101083040201)]. Some even indicate a protective effect of low serum cholesterol on cancer. But when has the truth ever been able to move books? + +Page 95: + +> When I mentioned all this to Stamler, he didn’t remember any part of this cancer-cholesterol debate. In this way, he is a microcosm of a larger phenomenon that allowed the diet-heart hypothesis to move forward: inconvenient results were consistantly ignored; here again, “selection bias” was at work. + +WOW… Pot. Kettle. _Black!_ + +**Cribbing Taubes Alert** + +GCBC, page 38: + +> The principal investigator on the trial was Ivan Frantz, Jr., who worked in Keys’s department at the University of Minnesota. Frantz retired in 1988 and published the results a year later in a journal called _Arteriosclerosis_, which is unlikely to be read by anyone outside the field of cardiology. […] When I asked Frantz in late 2003 why the study went unpublished for sixteen years, he said, “We were just disappointed in the way it came out.” + +BFS, page 96: + +> Frantz, who worked in Keys’s university department, did not publish the study for sixteen years, until after he retired, and then he placed his results in the journal _Arteriosclerosis, Thrombosis, and Vascular Biology_, which is unlikely to be read by anyone outside the field of cardiology. When asked why he did not publish the results earlier, Frantz replied that he didn’t think he’d done anything wrong in the study. “We were just disappointed in the way it came out,” he said. + +At least Teicholz cites Taubes as the source of the Frantz quote. + +On page 97, Teicholz discusses the Western Electric study: + +> But the results, after twenty years of study, actually showed that diet affected blood cholesterol only a tiny bit and that the “amount of saturated fatty acids in the diet was not significantly associated with risk of death from CHD [coronary heart disease],” as the authors wrote. + +Strangely enough, on page 29 of GCBC Taubes discusses the very same study and quotes the very same line. Whooda thunk? Well, by now everyone shoulda thunk. + +Anyway, it is true that Western Electric found only non-significant relationships between saturated fat and CHD mortality [[59](https://doi.org/10.1093/ajcn/26.2.177)].\u{00A0}But yet again, evidence that runs contrary to the overall thesis is left out. From the paragraph\u{00A0}_immediately before_ the saturated fat quote (emphasis mine): + +> When the risk of death from CHD was analyzed in terms of the component dietary variables, it was **inversely related to intake of polyunsaturated fatty acids and positively related to intake of dietary cholesterol**. + +Those evil vegetable oils that are toxic and cause all kinds of disease evidently protect from CHD death. And all that cholesterol from the butter, meat, and cheese that Teicholz wants people to eat is evidently increasing it. What was that Teicholz was saying about “selection bias”? + +Page 98, Teicholz discusses a study in which participants were from either Hiroshima or Nagasaki and tries really hard to convince you to not to pay attention to the results by saying: + +> The possible radiation exposure of these men to the atomic bombs dropped on their cities at the end of World War II was not factored into the analysis. + +If the only participants are from areas with essentially the same amount of radiation then the results are controlled for. If one cohort had been from Osaka and the other from Nagasaki AND their diet or lifestyle was different then she would have a point, but that is clearly not the case. Not to mention the lead author on the publication in question is a STATISTICIAN working in Japan’s ATOMIC BOMB CASUALTY COMMISSION. Ladies and gentlemen, this is what you call a hail mary. + +On page 99, Teicholz discusses the results of a large cohort study she refers to as the Ni-Hon-San. The results indicate that a diet high in saturated fat increases risk of pretty much “all manifestations of CHD” and that you might do well to eat less of it. Of course Teicholz will have none of this so she again scours the publications to find a molehill to portray as a mountain: + +> So I dug up the paper on NiHonSan’s diet methodology, published two years earlier. It seems that the team in the San Francisco Bay Area had completely fallen down on the job. Not only did they get diet information from only 267 men, compared to the 2,275 interviewed in Japan and a whopping 7,963 in Honolulu, but they had done these interviews only one time and in only one way (a twenty-four-hour recall questionnaire), whereas the other two teams had assessed diet on two different occasions, several years apart, and in four different ways; this was clearly not the “same method” that the authors claimed. Yet these issues were never mentioned […] + +These issues are “never mentioned” except where they are explicitly mentioned… in a published article… by the most widely-read nutrition journal… that is completely free and does not require any kind of subscription to access… which is where Teicholz found them. + +A few things: + +- Teicholz seems to think that because CA completed less diet records that somehow invalidates the results. + +- California did more than just the 24-hour recall, according to the methods paper [[60](https://books.google.ca/books/about/Honolulu_Heart_Program.html?id=hcT0HzpKe28C&redir_esc=y)].\u{00A0}They also did a 7-day food record and a food acculturation questionnaire. + +- Teicholz assumes incompetence by the CA researchers, when in fact it was funding issues. It is described in detail in the book _Honolulu Heart Program_ [[61](https://doi.org/10.2302/kjm.61.79)]. Books are often compiled from large cohort studies like these (e.g. The Seven Countries Study and The China-Cornell-Oxford Project). Investigative journalism, anyone? + + +Page 100: + +> [T]he Japanese have recently been eating far more meat, eggs, and dairy than they used to since the end of World War II, rates of heart disease have dropped to levels seen by Keys in the 1950s. This means that although the story of diet and disease in Japan is complex, we can pretty well say that based on this trend alone, a diet low in saturated fat was not the factor that spared the Japanese from heart disease in the postwar years. + +That’s a bold claim for which Teicholz cites a review article not on heart disease, but on stroke – a particular subset of heart disease [[62](https://doi.org/10.1194/jlr.R400012-JLR200)]. Additionally, the article never even mentions meat or even fat consumption. It does mention cholesterol as a risk factor, though. Perhaps Teicholz should have read the conclusion: + +> The atherogenic effect of hypercholesterolemia is well established and is based on evidence from numerous epidemiological, pathological, and biological studies. Furthermore, the proportion of atherothrombotic cerebral infarctions may have recently increased in Japan, because this subtype currently accounts for approximately one third of cerebral infarctions in the Japan Standard Stroke Registry Study (JSSRS). We should formulate a confirmed strategy for lipid management to prevent cerebral infarction. + +Teicholz cites no evidence for the increased meat consumption, but no matter. I know how to Google. It seems that meat consumption has increased in Japan over the years, although it still pales in comparison to US consumption which is probably why Japanese heart disease remains comparatively low. + +![][image6] +[image6]: /blog/bigfatsurprise/image6.png + +Source [here](http://karlandersson.se/2012/11/07/japan-vs-the-west-meat-consumption/)\u{00A0}and [here](http://www.theguardian.com/environment/datablog/2009/sep/02/meat-consumption-per-capita-climate-change). + +Page 101: + +> Seymour Dayton was concerned about the extremely low levels of arachidonic acid, an essential fatty acid present mainly in animal foods, among his prudent dieters. + +A few things: 1) Arachidonic acid is one of those evil polyunsaturates, 2) Arachidonic acid is not an EFA, and 3) Here’s what Dayton said about AA on the exact page from the exact paper Teicholz cites [[34](https://doi.org/10.1016/S0140-6736(70)90868-8)] (emphasis mine) + +> The other observation which raised some question of a possible toxic effect was the low arachidonic acid concentrations in atheromata of long-term, high-adherence subjects on the experimental diet (tables 37 to 40). **For reasons already cited, this may be more appropriately viewed as evidence of a salutary rather than a toxic effect.** + +Page 101-102: + +> In the United States, Pete Ahrens, who was still the prudent diet’s most prominent critic, continued to publish his central point of caution: the diet-heart hypothesis “is still a hypothesis … I sincerely believe we should not. . . make broadscale recommendations on diets and drugs to the general public now.” + +A few things: + +1. Ahrens is not referring to the diet-heart hypothesis in this text, he is referring to the lipid hypothesis. There is a difference. Teicholz actually clips the words “lipid hypothesis” from one of the quotes: “The Lipid Hypothesis is still a hypothesis.” In fact, he never even mentions the diet-heart hypothesis in the text. + +2. Ahrens does write those words, but all three phrases are out of order. As a journalist, are you allowed to do that? Take bits of text and arrange them however, as long as you put ellipses in there? If they were to go in order of appearance it would be “[…] make broadscale recommendations on diet and drugs to the general public now […] I sincerely believe we should not […] is still a hypothesis […]” By the way there is about one and a half paragraphs between the last two quotes. + +3. This is another example of quote-mining by Teicholz, because Ahrens actually says some not-so-bad things about the Lipid hypothesis in the text and cholesterol-lowering in general. Two can play the quote-mining game. For instance: + + +> [When asked whether we should abandon the Lipid Hypothesis] My reply to the last question is “no”: I submit that the Lipid Hypothesis has never really been put to an adequate test, and that therefore we cannot conclude that the premise is false. + +AND + +> [I]t seems entirely logical, indeed essential, for internists to screen routinely for hyperlipidemia […] If hyperlipidemia persists, a full year’s evaluation should be made of a low-cholesterol, low-saturated, high polyunsaturated-fat diet, with moderation in alcohol intake. + +AND + +> The Lipid Hypothesis is still a hypothesis. I have tried to show that it is a viable one, and how in the future we may better put it to test. + +**Cribbing Taubes Alert** + +On page 22 of GCBC Taubes states the following: + +> The resulting literature very quickly grew to what one Columbia University pathologist in 1977 described as “unmanageable proportions.” + +On page 102 of BFS Teicholz writes: + +> By the late 1970s, however, the number of scientific studies had grown to such “unmanageable proportions,” as one Columbia University pathologist put it, that it was overwhelming. + +This quote is from _Dietary Goals for the United States—Supplemental Views_ publication which is an 881-page text, at least in PDF format. What are the odds that Teicholz independently arrived at “unmanageable proportions” in that enormous publication? Do you think this is original research? + +Page 102: + +> The ambiguities inherent to nutrition studies opened the door for their interpretation to be influenced by bias— which hardened into a kind of faith. There were simply “believers” and “nonbelievers,” according to cholesterol expert Daniel Steinberg. + +Interestingly enough, this person that Teicholz calls a “cholesterol expert” would almost certainly disagree with the entire thesis of BFS, since he appears to accept that high cholesterol plays a role in heart disease, and that serum cholesterol can be controlled to some degree via the diet. This is made pretty clear if you read the publication Teicholz cites for this [[63](https://doi.org/10.1093/ajcn/32.12.2627)].\u{00A0}In fact, Ahrens himself (whom Teicholz describes above as the biggest critic of the diet-heart hypothesis – although she confuses it with the lipid hypothesis) was, according to Steinberg, one of the first to conduct “the definitive demonstration that saturated fats tend to raise while polyunsaturated fats tend to lower blood cholesterol in humans […]” Steinberg’s entire review series on the pathogenesis of ASCVD is both quite interesting and readable. I highly suggest reading them if you are interested in the topic. They are open access papers, but if you didn’t want to go to the trouble of finding them [here is a link to the series](http://ge.tt/9VafyxZ?c). + +### CHAPTER 5: THE LOW-FAT DIET GOES TO WASHINGTON + +**Cribbing Taubes Alert** + +BFS, page 112: + +> [W]hen Senator McGovern announced his Senate committee’s report, called Dietary Goals, at a press conference in 1977, he expressed a gloomy outlook about where the American diet was heading. “Our diets have changed radically within the past fifty years,” he explained, “with great and often harmful effects on our health.” + +The problem here is that Teicholz cites the source of this quote as “Select Committee on Nutrition and Human Needs of the United States Senate, _Dietary Goals for the United States_\u{00A0}(Washington, DC: US Government Printing Office, 1977); 1.” However, this quote does not appear on page 1. It appears on page XIII. Normally I would chalk this up to a simple citation error [[64](https://doi.org/10.1126/science.451563)].\u{00A0}The reason I mention it is because Taubes uses the same exact quote on page 10 of GCBC, and also mistakenly cites the source of the quote as being on page 1. I would argue (as I have done previously many times) that this is good evidence that Teicholz is simply lifting sentences from others and simply citing what they cite – likely without ever even seeing the source material. + +**Cribbing Taubes Alert** + +Page 112: + +> The _New York Times_\u{00A0}health columnist Jane Brody perfectly encapsulated this idea when she wrote, “Within this century, the diet of the average American has undergone a radical shift away from plant-based foods such as grains, beans and peas, nuts, potatoes, and other vegetables and fruits and toward foods derived from animals—meat, fish, poultry, eggs and dairy products.” + +This Brody quote appears word-for-word on page 10 of GCBC. It’s from a book Brody published 30 years ago. Isn’t it astonishing that both Taubes and Teicholz can do completely independent research, find the exact same publications, and use the same quotes from those publications? + +Page 122: + +> Ahrens chose a nine-member task force representing the full range of scientific views on the diet-heart hypothesis. The panel deliberated for several months over each link in the chain of the diet-heart hypothesis, from eating saturated fat, to total cholesterol, to heart disease. The results, however, were not exactly welcome news to diet-heart supporters […] The final report from the Ahrens task force in 1979 made it clear that the majority of its members remained highly skeptical of the idea that reducing fat or saturated fat could deter coronary disease. + +Actually, the task force didn’t make that clear at all.65\u{00A0}I actually blogged about this not too long ago because Taubes cites the same obscure paper and comes to a similar but still erroneous conclusion. + +The paper gives a score of 0-100 to associations between a given dietary issue and atherosclerosis, where 0 is the weakest evidence for the association and 100 is the most rock-solid evidence. The final score is an aggregation of scores by several experts in the field based on epidemiological evidence, animal studies, human interventions, autopsies, biological plausibility, etc. Cholesterol alone received a score of 62. Saturated fat alone received a 58. Cholesterol and fat together received a 73. For comparison the association between alcohol and liver disease received an 88, and the association between carbohydrate and atherosclerosis got an 11. Carbohydrate and diabetes got a 13. + +I don’t want to tell you how you should interpret that data, but it seems pretty clear to me that the evidence that cholesterol and fat play a role in ASCVD is quite strong: well above the halfway point and approaching the level of alcohol and liver disease. Teicholz, however, tells her readers that the committee was “highly skeptical” for reasons that should be pretty clear by now. + +**Cribbing Taubes Alert** + +On pages 56-59 of GCBC Taubes discusses lipid trial and a consensus conference. On page 127-134 Teicholz discusses the same trial and conference in a strikingly similar way. + +GCBC page 56: + +> The second trial was the $150 million Lipid Research Clinics (LRC) Coronary Primary Prevention Trial. The trial was led by Basil Rifkind of the NHLBI and Daniel Steinberg, a specialist on cholesterol disorders at the University of California, San Diego. The LRC investigators had screened nearly half a million middle-aged men and found thirty-eight hundred who had no overt signs of heart disease but cholesterol levels sufficiently high-more than 265 mg/dl-that they could be considered imminently likely to suffer a heart attack. + +BFS page 127: + +> The other trial was the $150 million Lipid Research Clinic Coronary Primary Prevention Trial (LRC) […] LRC was led by Basil Rifkind, chief of NHLBl’s Lipid Metabolism Branch, together with Daniel Steinberg, a cholesterol specialist at the University of California, San Diego. They screened nearly half a million middle-aged men and found 3,800 with levels of cholesterol high enough (265 mg/dL or above) to be considered likely to have a heart attack soon […] + +GCBC page 57: + +> To call these results “conclusive,” as the University of Chicago biostatistician Paul Meier remarked, would constitute “a substantial misuse of the term.” + +BFS page 130: + +> The biostatistician Paul Meier commented that to call the results “conclusive” would constitute “a substantial misuse of the term.” + +GCBC page 57: + +> As Rifkind told _Time_\u{00A0}magazine, “It is now indisputable that lowering cholesterol with diet and drugs can actually cut the risk of developing heart disease and having a heart attack.” + +BFS page 130: + +> […] Rifkind told Time magazine, “It is now indisputable that lowering cholesterol with diet and drugs can actually cut the risk of developing heart disease and having a heart attack.” + +![][image8] +[image8]: /blog/bigfatsurprise/image8.png + +![][image9] +[image9]: /blog/bigfatsurprise/image9.png + +### CHAPTER 6: HOW WOMEN AND CHILDREN FARE ON A LOW-FAT DIET + +Page 136 + +> Jerry Stamler expressed in 1972, that fat was “excessive in calories… so that obesity develops.” This seemingly obvious but nonetheless unproven assumption was that fat made you fat. + +If you actually read the cited paper you will note that Stamler was not referring to fat when he said that, he was instead referring to the “habitual diet of Americans” [[65](https://doi.org/10.1016/0091-7435(72)90076-x)].\u{00A0}Stamler’s quote is taken out of context and put into a different context that is inaccurate. + +**Cribbing Taubes Alert** + +Teicholz seemingly copy-pastes Taubes work on page 136 when she discusses an amazingly obscure 1995 pamphlet by the American Heart Association. According to Teicholz the pamphlet: + +> told Americans to control their fat intake by increasing refined-carbohydrate consumption. Choose “snacks from other food groups such as . . . low-fat cookies, low-fat crackers, . . . unsalted pretzels, hard candy, gum drops, sugar, syrup, honey, jam, jelly, marmalade” […] + +Leaving aside the fact that the pamphlet never actually advises anyone to increase their refined-carbohydrate consumption, what’s interesting is that Taubes says the very same thing in chapter sixteen of WWGF: + +> [T]he AHA counseled, “choose snacks from other food groups such as … low-fat cookies, low-fat crackers … unsalted pretzels, hard candy, gum drops, sugar, syrup, honey, jam, jelly, marmalade (as spreads).” + +The ellipses are even in the same place! What a coinkydink. + +She goes on to say: + +> In short, to avoid fat, people should eat sugar, the AHA advised. + +No. That’s a gross and highly misleading oversimplification. There’s no way you can distill 20 pages of dietary advice into “eat sugar” and think you’re even approaching a decent approximation. + +Page 138: + +> Jane Brody, the health columnist for the New York Times and the most influential promoter of the low-fat diet in the press, wrote, “If there’s one nutrient that has the decks stacked against it, it’s fat” […] + +That quote does not appear in the cited NYT article [[66](https://www.nytimes.com/1980/02/05/archives/tending-to-obesity-inbred-tribe-aids-diabetes-study-inbred-tribe.html)]. + +On page 143 Teicholz attempts to make the argument that plant-based diets aren’t all they’re cracked up to be: + +> Vegetarian diets generally have not been shown to help people live longer. The 2007 report by the World Cancer Research Fund and the American Institute for Cancer Research, discussed in the last chapter, found that in no case was the evidence for the consumption of fruits and vegetables in the prevention of cancer “judged to be convincing.” + +This has got to be one of the most selective and misleading interpretations of the Second Expert’s Report. I mean, my god… So for those who are not familiar with it, the Second Expert’s Report (what Teicholz discusses above) is an incredible text that outlines ALL of the quality evidence on a given cancer topic regarding food, nutrition, and the prevention of cancer. All the evidence is evaluated by a large panel of elite doctors and researchers and given one of the following labels: unlikely, suggestive, probable, and convincing. To reach the **convincing**\u{00A0}level you really need some rock solid evidence [[67](https://doi.org/10.1016/s0899-9007(99)00021-0)]. None of the evidence regarding fruits and vegetables reached the venerable **convincing**\u{00A0}level, but there was a ton of **probable**\u{00A0}and **suggestive** evidence for many cancers. You really have to scour that section to find a quote that might fit an anti-vegetable narrative. Read it yourself for all the juicy details, but here are some remarks from the conclusion on page 1144: + +> Non-starchy vegetables probably protect against cancers of the mouth, pharynx, and larynx, and those of the oesophagus and stomach. There is limited evidence suggesting that they also protect against cancers of the nasopharynx, lung, colorectum, ovary, and endometrium. Allium vegetables probably protect against stomach cancer. Garlic (an allium vegetable, commonly classed as a herb) probably protects against colorectal cancer. Fruits in general probably protect against cancers of the mouth, pharynx, and larynx, and of the oesophagus, lung, and stomach. There is limited evidence suggesting that fruits also protect against cancers of the nasopharynx, pancreas, liver, and colorectum. + +![][image10] +[image10]: /blog/bigfatsurprise/image10.png + +On page 144 Teicholz derides the study that low-carbers love to hate, T. Colin Campbell’s China Study [[68](https://www.westonaprice.org/book-reviews/the-china-study-by-t-colin-campbell/)]: + +> These books are based on one epidemiological study, with a number of significant methodological problems, that was never published in a peer-reviewed issue of a scientific journal. Campbell’s two papers were instead published as part of conference proceedings in journal “supplements,” which are subject to little or no peer review. + +As evidence she cites a BLOG POST by then-undergraduate Chris Masterjohn, published by a private organization that is explicitly biased in favor of animal-based diets [[69](https://www.westonaprice.org/book-reviews/the-china-study-by-t-colin-campbell/)].\u{00A0}Just let that sink in… + +After discussing the Ornish diet for a bit, Teicholz mentions a paper on page 145 that reviews the evidence for (very) low-fat diets: + +> Tufts University nutrition professor Alice Lichtenstein and a colleague reviewed the very low-fat diet for the AHA […] Lichtenstein concluded that very low-fat diets “are not beneficial and may be harmful.” + +Teicholz both takes the quote out of context and mangles it somewhat. Here’s the actual quote (emphasis mine): + +> At this time, no health benefits and possible harmful effects can be predicted from adherence to very low fat diets **in certain subgroups**. + +The “in certain subgroups” part is vital to the accuracy of the statement. You can’t just cut it out. And Dr. Lichtenstein’s conclusion is quite a bit more nuanced than Teicholz would have you believe. The paper is actually a very objective look at low-fat diets [[70](https://doi.org/10.1161/01.CIR.98.9.935)]. It acknowledges that more research needs to be done on these diets in order for a definitive recommendation. Moreover, as alluded to above, it states that until more evidence comes in young children, the elderly, pregnant women, and those with eating disorders should probably avoid the diet. However, it also acknowledges that a low fat diet can be beneficial and there is evidence for that. Here’s an actual quote from the conclusion: + +> There is overwhelming evidence that reductions in saturated fat, dietary cholesterol, and weight offer the most effective dietary strategies for reducing total cholesterol, LDL-C levels, and cardiovascular risk. + +On page 146 Teicholz discusses the idea of reducing cholesterol levels In young children: + +> Indeed, in the late 1960s, the NHLBI had been putting children as young as four years old on cholesterol-lowering diets and also giving them cholestyramine, the same drug that would be used in the LRC trial. Convinced that cholesterol was a crucial part of the heart disease puzzle, the NHLBI went so far as to propose universal umbilical cord blood screening in order to start treatment as early as possible, even at birth. In 1970, mass screening of cord blood at “no more than” five dollars per baby was given serious consideration. Such was the preoccupation with heart disease that researchers believed healthy children ought to start out life in a position of defense. + +_These people are obsessed with cholesterol! Won’t somebody pleeease think of the children??_ Of course to the average person reading this it sounds absurd, and it would be absurd if Teicholz had not removed a key bit of information that makes it very not absurd. According to the JAMA article she cited for this paragraph, the NHLBI was not proposing we give all or even most kids cholesterol-lowering drugs or cholesterol screenings [[71](http://archive.org/details/sim_jama_1970_214_index)]. The article makes it abundantly clear that these are for children with familial type 2 hypercholesterolemia, a genetic condition associated with chronically high cholesterol levels. People with familial hypercholesterolemia have heart attacks and can die far younger than normal lipid folks. It makes perfect sense to go on a cholesterol-lowering diet or a statin if you have that condition. But of course, Teicholz wants to stoke your outrage a bit so you think the NHLBI are a bunch of incompetent boobs that are completely absorbed (pardon the pun) with the idea of cholesterol. + +Teicholz continues to make the argument against vegetarianism on page 148: + +> One of the more important early nutrition researchers looking at these questions was Elmer V. McCollum, an influential biochemist at Johns Hopkins University. He performed endless feeding studies on rats and pigs because they, like humans, are omnivores and are therefore considered instructive for human nutritional needs. His book The Newer Knowledge of Nutrition (1921) is populated with pictures of scrawny, scruffy-furred rats raised on poor nutrition, compared to large, lustrously furred ones raised on better nutrition. He found that animals on a vegetarian diet had an especially difficult time reproducing and rearing their young. + +She goes on to quote a passage from the book with the author explaining that the vegetarian rats were smaller and lived about half as long as the non-vegetarians. While I was looking for the quoted passage I noticed that basically the entire book is a discussion of rats on deprivation diets of some sort; rat experiments where the researchers deprive them of one or more essential amino acids, vitamins, and breast milk at birth to see what happens [[72](http://archive.org/details/newerknowledgeof00mcco_1)].\u{00A0}This is what the pics of “scrawny, scruffy-furred rats” she refers to are; not necessarily vegetarian rats. + +Moreover, I’m not sure that rats make a great proxy for humans. At least I would not be convinced to change my diet based only on rat studies. At any rate, much like her scholarship on the Second Expert’s Report, to find a quote that puts vegetarianism in a negative light you have to ignore paragraphs immediately preceding and immediately following her quoted passage. I’ll give you an idea of what I’m talking about. On page 1599: + +> The more valid arguments concerning the use of meat as contrasted with the fleshless dietary regimen, are based upon the view that meat is unwholesome and that it contains waste products, which, because of their poisonous properties, tend to do damage to the body tissues. This view is upheld by experimental results. Professor Irving Fisher of Yale conducted extensive experiments with flesh abstainers and flesh eaters, and found the former possessed of much greater endurance than the latter. + +After discussing the experiment where the rats’ growth were stunted on a vegetarian diet, McCollum goes on to describe a different vegetarian diet that was more successful. Page 161: + +> The diet induced growth at approximately the normal rate, and reproduction and rearing of a considerable number of young. The young grew up to the full adult size and were successful in rearing a considerable number of their offspring (see Chart 7). + +McCollum then describes another successful experiment where rats were fed _another_ iteration of a vegetarian diet and thrived. He even explains why the diet that Teicholz mentioned did not permit the rats to thrive. Page 164: + +> [T]he diet was of such a nature that the animals could hardly do otherwise than take a rather low protein intake. Secondly, the leaves, which formed the only components of the food supply containing enough mineral elements to support growth, were fed in the fresh condition. In this form the water content and bulk are so great that it would be practically impossible for an animal whose digestive apparatus is no more capacious than that of an omnivorous rat to eat a sufficient amount of leaf to correct the inorganic deficiencies of the rest of the mixture […] + +Ladies and gentlemen, this is cherry-picking at its finest. + +On page 152 Teicholz tries really hard to find a reason to dismiss the results of a study: + +> [The NHLBI] funded a trial called the Dietary Intervention Study in Children (DISC). Starting in 1987, three hundred seven- to ten-year-old children were counseled, along with their parents, to eat a diet in which saturated fat was limited to 8 percent of calories and total fat to 28 percent, and this group was compared to an equal-sized group of controls. Investigators found that those put on the diet low in fat (and animal fat) grew just as well as the children eating normally during the three years of the experiment, and the authors emphasized this point. Yet it was problematic for the study that the boys and girls in the trial did not represent a normal sample. For their study population, the DISC leaders had selected children who had unusually high levels of LDL cholesterol (in the 80th to 98th percentile). In other words, these children could very well have had familial hypercholesterolemia, the genetic condition that causes heart disease through a metabolic defect, which is entirely different from the way that cholesterol is altered by diet. These at-risk children were chosen because they were thought to need help more urgently in fighting the early onset of a life-threatening disease, yet their unusually high cholesterol levels meant that the results could not be generalized to the larger population of normal children. + +I would totally agree with Teicholz here if there was significant evidence that hypercholesterolemia would confound growth results in some way. However, it seems obvious to me that she is trying real hard to find reasons to discount the results, and if this is the best she can do then it must be a good study design. Also, the diet is nearly one-third fat. How is this a “diet low in fat”?? + +Teicholz hits the vegetarian diet from all possible angles, including the idea that vegetarian children show retarded growth. Page 153: + +> Slightly stunted growth was consistently found among children eating vegetarian diets. Children were also found to experience growth spurts when incorporating more animal foods in their diets. Growth faltering was particularly pronounced among children on a vegan diet, which cuts out all animal foods. + +As evidence she cites a twenty-two year-old review article on reduced fat diets [[73](https://doi.org/10.1016/0091-7435(92)90004-2)]. Refreshingly, Teicholz doesn’t really misrepresent the article nearly as much as her other claims. However, she does leave out some important details. One important distinction that is not made by Teicholz and is only kind-of made in the review article is the content of the vegetarian diets. What I mean is that the terms vegetarian diet, low fat diet, and low calorie diet are used almost interchangeably in the text. Now a vegetarian diet can of course be low fat or low calorie or both, but it certainly does not have to be. + +The author also implies that ridiculously strict vegetarian diets are also included in the review including the Zen macrobiotic diet which the author claims as consisting only of brown rice and water. He also mentions some limitations of this review stating “[N]early all of the studies focus on diets that provide undernourishment in nutrients.” I think it’s reasonable to assume that this can and almost certainly does account for the slight growth stunting and not, as Teicholz would claim, a lack of animal fat. + +Similar to the DISC trial above there was also another study done to test the outcomes of a low saturated fat diet on kids called STRIP (Special Turku Coronary Risk Factor Intervention Project). Teicholz refers to it as a low fat diet, but it simply replaces saturated fat with unsaturated. Evidently there were no adverse effects to growth or coronary disease risk factors. But that doesn’t stop Teicholz from doing her damnedest to try and convince you that the study is bunk. Page 154: + +> [A]lthough investigators found no vitamin deficiencies, the supplements they provided may have masked this problem. It is also significant that 20 percent of the families in both groups left before the end of the study. + +Page 157: + +> The British biochemist and nutrition expert Andrew M. Prentice, for instance, hypothesized that the lack of high-fat animal foods was possibly “the major contributor of growth failure” among babies he studied in Gambia. He compared some 140 Gambian infants to a slightly larger group of relatively affluent babies in Cambridge, England; early on, the Gambians and British infants grew almost equally well. When they started to be weaned off breast milk at six months of age, however, their growth curves steadily diverged. The Gambians ate an equal number of calories as did the Cambridge babies for the first eighteen months of life, but the fat content of their diet steadily declined to just 15 percent of calories by the age of two, and most of that fat was polyunsaturated from nuts and vegetable oils. The Cambridge babies, by contrast, ate a majority of calories from eggs, cow’s milk, and meat—a minimum of 37 percent of calories as fat, most of it saturated. By the age of three, the Gambian babies weighed 75 percent less than they should, according to standard growth charts, while the Cambridge babies were growing according to expectations and weighed on average 8 pounds more than the Gambians. + +The cited paper does make the case that essential fatty acids are needed for proper growth, and that a lack of dietary fat might explain the stunted growth in the Gambians [[74](https://doi.org/10.1093/ajcn/72.5.1253s)]. But some important details in the paper that Teicholz gets wrong or leaves out are that the Gambians did in fact consume less kcals and that Gambian children suffer from infection, disease, and diarrhea more than their Cambridge counterparts. + +Page 158: + +> Reports from poorer countries in Latin America and Africa, however, revealed that children were eating less fat, with clear implications for nutrition and growth: diets with less than 30 percent of calories as fat started to get nutritionally worrisome, and at 22 percent, they were associated with growth faltering. + +If look at the paper she cites for this data, you will find that the poorer countries such as Haiti also consumed FAR LESS kcals than their counterparts from more developed countries. Of course this doesn’t rule out fat as a factor, but I would argue that it definitely confounds the results. + +You should also note that this is a cross-sectional analysis which is extraordinarily weak in terms of showing any kind of cause-effect relationship. Teicholz makes this very argument earlier in the book, but you can see here that she has no problem invoking these types of studies when it fits her narrative. + +Teicholz then tries to make the argument that HDL was ignored by the major institutions as a predictor of heart disease. Page 162: + +> [W]hen diet and disease experts finally began to sidle away from total cholesterol, they did not turn to HDL-cholesterol. Instead, they chose to focus on LDL-cholesterol. By 2002, the NCEP was calling elevated LDL-cholesterol a “powerful” risk factor. The AHA and other professional associations agreed. + +LDL was and is a powerful risk factor, but HDL was not ignored. The 2002 report that Teicholz cites has an entire section titled “Low HDL cholesterol as an independent risk factor for CHD.” I could quote about a hundred parts in that report that make the case that low HDL is a risk factor, but I’ll spare you. The report is open access so you can find it and peruse it if you’d like. + +On page 165 Teicholz discusses the Boeing employees trial\u{00A0}and its implication for women [[75](https://doi.org/10.1046/j.1525-1373.2000.22524.x)]: + +> [The Boeing women] had followed the most stringent NCEP guidelines for an entire year and had apparently increased their risk of having a heart attack. + +She bases this on the study results that the women with high cholesterol levels had a 8% decrease in HDL levels. In the book she doesn’t mention that these HDL reductions only occurred in hypercholesterolemic women, instead implying that all women had their HDL levels go down. Moreover, if one’s HDL levels are at, say, 72 mg/dl and decrease 8% they are still high enough to be considered protective. High HDL levels are not unlikely for women with high cholesterol. HDL as a risk factor for heart disease only occurs when HDL levels get below 40 mg/dl. + +Page 166: + +> The idea that fat might lead to cancer was first aired at the McGovern committee hearings in 1976, when Gio Gori, director of the National Cancer Institute (NCI), testified that men and women in Japan had very low rates of breast and colon cancer and that those rates rose quickly upon emigrating to the United States. Gori showed charts demonstrating the parallel rising lines of fat consumption and cancer rates. “Now I want to emphasize that this is a very strong correlation, but that correlation does not mean causation,” he said. “I don’t think anybody can go out today, and say that food causes cancer.” + +That’s not nearly all Gori presented, but the source of this quote, according to Teicholz is the testimony of Gori in Volume 2 of _Diet Related to Killer Diseases_\u{00A0}(July 28, 1976): 176-182. However, that quote is not found in those page numbers. A similar quote is found on page 185, but it doesn’t include the “I don’t think anybody can…” bit, so I don’t know where Teicholz got those page numbers or that quote. + +Page 167: + +> It is therefore surprising to learn that as far back as 1987, the epidemiologist Walter Willett at the Harvard School of Public Health had found fat consumption not to be positively linked to breast cancer among the nearly ninety thousand nurses whom he had been following for five years in the Nurses’ Health Study. In fact, Willett found just the opposite to be true, namely, that the more fat the nurses ate, particularly the more saturated fat they ate, the less likely they were to get breast cancer. These results held true even as the women aged. After fourteen years of study, Willett reported that his team had found “no evidence” that a reduction in fat overall nor of any particular kind of fat decreased the risk of breast cancer. Saturated fat actually appeared protective. + +The first sentence is actually true. Willett found that breast cancer incidence among those that ate more total fat (even saturated fat) was not higher than those women that ate less total or saturated fat [[76](https://doi.org/10.1056/NEJM198701013160105)].\u{00A0}But to claim that total fat or even saturated fat is _protective_\u{00A0}of breast cancer is not supported by the evidence. + +**Cribbing Taubes Alert** + +Taubes makes the same mistake regarding the same study on page 72 of GCBC. Coincidence? + +**Cribbing Taubes Alert** + +Page 167: + +> [T]he most effective fats for growing tumors were polyunsaturated—the fats found in vegetable oils that Americans were being counseled to eat. Saturated fats fed to rats had little effect unless supplemented with these vegetable oils. + +On page 73 of GCBC Taubes makes a similar statement: + +> Adding fat to the diets of lab rats certainly induced tumors or enhanced their growth, but the most effective fats by far at this carcinogenesis process were polyunsaturated fats—saturated fats had little effect unless “supplemented with” polyunsaturated fats. + +The reason I am suggesting Teicholz cribbed from Taubes here is not just that both statements are very similar, but also because both cite the same (somewhat obscure) paper and draw the same erroneous conclusion from it. It’s a rather long and dense (and old) paper that very persuasively makes the case that differences in dietary fat – both amount and type – lead to wildly variable results [[77](https://pubmed.ncbi.nlm.nih.gov/3059048/)]. I looked real hard for any kind of definitive statement on dietary fat and cancer in lab rats and this was the best that I found: + +> Corn and safflower oils and lard consistently enhance tumorigenesis when fed at high levels; coconut oil and fats high in n-3 fatty acids do not, and beef tallow and olive oil are variably effective […] + +Go ahead and read the paper. I defy you to come to the honest conclusion that vegetable oils are the only fats that will cause cancer in lab rats. + +Page 168: + +> Even the NCI’s own studies came up empty-handed—the most recent of those being the Women’s Intervention Nutrition Study in 2006. This trial managed to get women to drop their fat intake to 15 percent or less, thereby answering criticisms that the women in earlier studies had not seen any results because they failed to lower their intake of fat enough. But even at 15 percent, the NCI still could not find a statistically significant association between fat reduction—of any kind or amount—and reduced rates of breast cancer. + +The study in question does not study rates of breast cancer in general, but rather breast cancer relapses. And according to the results the lower fat intervention did in fact significantly reduce relapses by 24% [[78](https://doi.org/10.1093/jnci/djj494)]. + +Page 169-170, Teicholz discusses the Women’s Health Initiative (WHI) study results: + +> Yet to everyone’s alarm and bafflement, the results, published in a series of articles in JAMA, did not come out remotely as expected. […] They had apparently met all their targets, but after a decade of following this diet, they were no less likely than a control group to contract breast cancer, colorectal cancer, ovarian cancer, endometrial cancer, stroke, or even heart disease. Nor did they lose more weight. + +Teicholz is actually right about most of the results, except for the ovarian cancer and weight loss. Evidently there was significantly less ovarian cancer and weight among the intervention group [[79](https://doi.org/10.1093/jnci/djm159)][[80](https://doi.org/10.1001/jama.295.1.39)]. + +**Cribbing Taubes Alert** + +Taubes makes this same mistake on page 75 of GCBC. + +Page 172: + +> A review in 2008 of all studies of the low-fat diet by the United Nation’s Food and Agriculture Organization concluded that there is “no probable or convincing evidence” that a high level of fat in the diet causes heart disease or cancer. + +This is absolutely true. However, here are some other conclusions by the same text that were intentionally left out because it runs contrary to the saturated-fat-is-sacred-and-unsaturated-fat-is-the-devil narrative [[81](https://www.who.int/news-room/events/detail/2008/11/10/default-calendar/fats-and-fatty-acids-in-human-nutrition)]: + +- There is convincing evidence that replacing SFA with PUFA decreases the risk of CHD. + +- There is convincing evidence that replacing carbohydrates with MUFA increases HDL cholesterol concentrations. + +- There is insufficient evidence for relationships of MUFA consumption with chronic disease end points such as CHD or cancer. + +- There is insufficient evidence for relationships of MUFA consumption and body weight and percent adiposity. + +- There is insufficient evidence of a relationship between MUFA intake and risk of diabetes. + +- There is insufficient evidence for relationships of MUFA consumption with chronic disease end points such as CHD or cancer. + +- There is insufficient evidence for relationships of MUFA consumption and body weight and percent adiposity. + +- There is insufficient evidence of a relationship between MUFA intake and risk of diabetes. + +- There is insufficient evidence for establishing any relationship of PUFA consumption with cancer. + +- There is insufficient evidence for relationships of PUFA consumption and body weight and percent adiposity. + +- There is a possible positive relationship between SFA intake and increased risk of diabetes. + + +And these aren’t found in some obscure or deep part of the text. They are found in the EXACT same place she found the above quote. + +Page 172: + +> The USDA and AHA have both quietly eliminated any specific percent fat targets from their most recent lists of dietary guidelines. + +If by “quietly” Teicholz means “publicly published in their popular journal that has received widespread attention and 1773 academic citations since 2006,” then, yes, they “quietly” did that. And if by “eliminated any specific percent fat targets” Teicholz means “recommended consuming no more than 7% of kcals from saturated fat,” then, yes, they “eliminated any specific percent fat targets” [[82](https://doi.org/10.1161/CIRCULATIONAHA.106.176158)]. + +### CHAPTER 7: SELLING THE MEDITERRANEAN DIET: WHAT IS THE SCIENCE? + +Page 174: + +> The Mediterranean diet is now so famous and celebrated that it barely needs introduction. The regime recommends getting most of the body’s energy from vegetables, fruits, legumes, and whole grains. Seafood or poultry may be eaten several times a week, along with moderate amounts of yogurt, nuts, eggs, and cheese, while red meat is allowed only rarely, and milk, never. + +Anyway, I don’t know why she claims that milk is not allowed. Her cited source does not say that. In fact, it says that dairy is allowed on a daily basis in low to moderate amounts [[83](https://doi.org/10.1093/ajcn/61.6.1402S)]. + +Page 180: + +> In a meticulous, landmark paper in 1989, Ferro-Luzzi tried to create a workable definition of the nutritional patterns characterizing European countries bordering the Mediterranean Sea. + +This “landmark” paper has only 145 citations according to Google Scholar, and it’s 25 years old. + +Page 182: + +> Ferro-Luzzi also took a magnifying glass to Keys’s Greek data expressly to see if she could find some flaw with his 40-percent-fat number. She concluded that his data, like all of those available on the Greek diet of that period, were so scanty and unreliable that there were “few scientific grounds” for the claim of a traditional Greek diet ever being high in fat. + +As evidence Teicholz cites a paper published by Ferro-Luzzi in 2002 in the European Journal of Clinical Nutrition [[84](https://doi.org/10.1038/sj.ejcn.1601393)]. The paper makes the argument that the diets on Crete and Corfu are not exactly representative of Greek diets as a whole. She actually appears to conclude that Keys’s Seven Countries Study is THE ONLY reliable data on Greek diets so far; it’s _all the other data_\u{00A0}that is scanty and unreliable. Let’s take some quotes from the paper: + +> In conclusion, the great value of these Key’s studies is that they provide a coherent basis for the only cohort diet-health study published from anywhere in Greece so far. + +AND + +> Our first finding is that there are few reliable dietary studies from Greece in relation to dietary fat, **other than the detailed Seven Countries Study**. [emphasis mine] + +Ferro-Luzzi’s attempt here is to associate the Seven Countries Study with her lower fat version of the Greek diet, claiming that Keys’s data confirms her argument. Do you see how this is basically the opposite of what Teicholz claims? + +On page 188 Teicholz makes the argument that because Willett’s Mediterranean Diet pyramid was published in a journal supplement, it should not be regarded as serious scientific work. + +> The journal articles that Willett’s team wrote to establish the pyramid were not subject to the peer-review process that scientific papers normally undergo; they had only one reviewer, not the usual two to three. This was because the papers were published, along with the entire 1993 Cambridge conference proceedings, in a special supplement of the _American Journal of Clinical Nutrition_\u{00A0}funded by the olive oil industry. These kinds of journal supplements sponsored by industry are standard in the field of diet and disease research, although a lay reader is unlikely to be aware of this financial backing, because sponsorship is not noted in the articles themselves. + +If this is the case, then surely Teicholz would never cite a journal supplement in favor of her arguments. Y’know, since the science is tainted by industry money and all. If she did that would make her a hypocrite, right? + +- On page 111 Teicholz cites a supplement that favors meat in a healthy diet and downplays its effects on carcinogenesis [[85](https://doi.org/10.1038/sj.ejcn.1601347)]. + +- On page 75 and 101 she cites a supplemental paper to try and make the case that polyunsaturated fats are dangerous [[34](https://doi.org/10.1016/S0140-6736(70)90868-8)]. + +- On pages 165 and 367 she cites an _American Journal of Clinical Nutrition_\u{00A0}supplement [[86](https://doi.org/10.1093/ajcn/66.4.965S)]. + +- On page 281 she cites a supplement as part of a claim that unsaturated fats play a role in cancer [[87](https://doi.org/10.1093/ajcn/57.5.779S)]. + +- Page 109 she cites a supplement to argue that Seventh-Day Adventist vegetarians weren’t so better off than others [[88](https://doi.org/10.1093/ajcn/48.3.833)].\u{00A0}(Note: I am not exactly sure this is a journal supplement, though. Teicholz cites it as one and so does PubMed, but the _AJCN_\u{00A0}does not.) + +- Page 230 she uses a supplement to claim that tropical oils containing saturated fat are not harmful [[89](https://doi.org/10.1080/07315724.2010.10719843)]. + +- Page 160 she cites a supplement as evidence that low-fat diets can lower HDL [[90](https://doi.org/10.1093/ajcn/66.4.974S)]. + +- Page 202 when she discusses a food frequency questionnaire [[91](https://doi.org/10.1093/ije/26.suppl_1.s118)]. + +- Page 144 when she claims vegetarians are not any better off than non-vegetarians [[92](https://doi.org/10.3945/ajcn.2009.26736L)]. + +- When she discusses Ancel Keys and his research on pages 38, 39, 40, 195, and 205 [[14](https://pubmed.ncbi.nlm.nih.gov/5442783/)]. + +- On page 158 where she makes the claim that more fat = healthier children [[74](https://doi.org/10.1093/ajcn/72.5.1253s)][[93](https://doi.org/10.1093/ajcn/72.5.1392s)][[94](https://doi.org/10.1093/ajcn/72.5.1399s)][[95](https://doi.org/10.1093/ajcn/72.5.1379s)][[96](https://doi.org/10.1093/ajcn/72.5.1354s)]. + +- Page 318 when discussing LDL subfractions [[97](https://doi.org/10.1093/ajcn/62.2.478S)]. + +- On page 92 when she discusses two “scholarly estimates” claiming that polyunsaturated fat was nearly unheard of before 1910 [[98](https://doi.org/10.1093/ajcn/71.1.179S)]. + +- When talking about trans fats and 7-11 on 261 [[99](https://doi.org/10.1038/ejcn.2009.14)]. + +- When claiming that vegetarian women don’t fare better than omnivorous women on page 108 [[100](https://doi.org/10.1093/ajcn/59.5.1136S)]. + +- On page 324 when she claims that the evidence against SFAs is thin [[101](https://doi.org/10.1093/ajcn/66.4.980S)]. + +- On pages 221-222 when she claims that meat consumption in Spain has “skyrocketed” while heart disease has “plummeted” [[102](https://doi.org/10.1093/ajcn/61.6.1351S)]. + +- Page 223, when she claimed that sugar consumption in Spain fell dramatically [[103](https://doi.org/10.1093/ajcn/72.5.1316s)]. + +- On page 154 when she discusses a study on babies [[104](https://doi.org/10.1093/ajcn/72.5.1343s)]. + +- When she claims that children have reduced their intakes of fat in recent decades on page 158 [[105](https://doi.org/10.1016/0002-9149(86)90262-6)]. + + +Page 191 Teicholz claims that Keys and Company wooed people to their way of thinking by inviting them to Greece and describing the diet in a very romantic way. + +> [T]hese getaways were an easy sell. The enormous appeal of the Mediterranean had of course been a factor in influencing Keys and his colleagues from the start, and their rapture for the region came even to suffuse their scholarly work. Henry Blackburn, for instance, who worked closely with Keys, wrote a description of the Cretan male who was “free of coronary risk” for the _American Journal of Cardiology_\u{00A0}in 1986, using language that is unusually florid for a scientific journal: He walks to work daily and labors in the soft light of his Greek Isle, midst the droning of crickets and the bray of distant donkeys, in the peace of his land…. In his elder years, he sits in the slanting bronze light of the Greek sun, enveloped in a rich lavender aura from the Aegean sea and sky. He is handsome, rugged, kindly and virile. The beauty of the landscape and lifestyle, its people, and its diet became united in one, overwhelming swoon. + +But what Teicholz does not mention is that the above passage was from an journal editorial and it was satirizing an earlier piece that took a sardonic look at the “Low Risk Coronary Male” [[106](https://doi.org/10.1016/s0002-9343(01)00994-9)]. + +Page 201: + +> Experts suggested that olive oil might help prevent breast cancer, for instance, but the evidence so far is very weak. + +I would argue that the paper she cites to support that statement doesn’t really say that [[107](https://doi.org/10.1093/ajcn/88.1.38)]. Although the statement is phrased in such a way that reasonable people may disagree. Here’s the relevant portion of the paper. I’ll let you decide. + +> Overall, these observations suggest that olive oil or other oils high in monounsaturated fatty acids may decrease the risk of breast cancer, although more work is necessary before such inferences can be made with confidence. A practical implication may be that animal fat sources in the diet should be minimized, whereas monounsaturated fat sources, such as olive oil, need not be restricted, a recommendation that would be consistent with those for dietary prevention of heart disease. + +Teicholz also leaves out what the authors would consider strong evidence regarding red meat and cancer: + +> In the case of colorectal cancer, associations with fat intake appear to be attributable to red meat intake; indeed, red meat intake is also strongly associated with colon cancer risk in international correlations. In the case of prostate cancer, red meat is also relatively consistently associated with risk, although whether some of this is the result of fat intake remains unclear. + +On page 201, Teicholz claims that the bioactive compounds in olive oil have no benefits. + +> In “extra-virgin” olive oil, investigators identified a host of “nonnutrients,” such as anthocyanins, flavonoids, and polyphenols, that are believed to work their own minor miracles. They are present in olives because the fruit is dark-colored, a defense developed over thousands of years against exposure to the hot sun. Not all of the effects of these nonnutrients have been adequately explored, but in one case, flavonoids, sizable clinical trials on humans have been unable to show benefits to health. + +Apparently by “health” Teicholz actually means CVD and nothing else, since she cites a meta-analysis that only focuses on CVD [[108](https://doi.org/10.1371/journal.pone.0054318)]. Not cancer, not diabetes, not anything else. In any case I think she misunderstood the meta-analysis because after reading it I get the distinct impression that flavonoids do, in fact, play a beneficial role in CVD. I’m not sure why I get that impression, but maybe it has something to do with the forest plots that nearly all favor flavonoids and bits of text like this: + +> [T]his review provides evidence that some flavonoids or foods rich in flavonoids, such as chocolate or cocoa, and black tea, may modulate important risk factors. + +AND + +> The changes in risk factors observed after flavonoid intake are clinically significant. + +Also, if you’re curious, meta-analyses on flavonoids and outcomes like cancer and diabetes conclude that they are indeed beneficial [[109](https://doi.org/10.1016/j.clnu.2013.03.011)][[110](https://doi.org/10.1371/journal.pone.0075604)][[111](https://doi.org/10.1016/j.jacl.2012.04.077)]. + +Page 203: + +> [A] few recent studies on animals suggest that olive oil may even provoke heart disease, by stimulating the production of something called cholesterol esters. + +This is classic. To support her war on olive oil, Teicholz cites a review article that states in no uncertain terms that unsaturated fatty acids are far more beneficial to cardiovascular health than saturated fatty acids [[112](https://doi.org/10.1016/j.maturitas.2010.12.002)].\u{00A0}In fact, here’s a quote from the text: + +> The best types of fat, in terms of improving the lipid ratio, were canola (rapeseed) oil, soybean oil, and olive oil, whereas the worst types were butter and stick margarine. Not surprisingly, all types of fat were better than pure SFA because even the worst of them do contain some unsaturated fats. + +Hilarious, but getting back to the olive oil and provoking heart disease… There is a section that questions whether olive oil is as good as we think it is. The author discusses a couple studies using nonhuman primates that were fed dietary cholesterol (to induce ASCVD) and three types of oil: palm oil (saturated), safflower oil (monounsaturated), and some oil high in linoleic acid (polyunsaturated). The author then explains that the polyunsaturated oil had the most favorable outcomes in terms of atherosclerosis, while the monounsaturated fat _was as bad as the saturated fat_\u{00A0}in the promotion of ASCVD. So if Teicholz wants to use that as evidence that olive oil provokes heart disease because it is high in MUFAs like safflower oil then she better also say that saturated fat also provokes heart disease. + +However, other than a couple of animal studies, the article is generally favorable toward both MUFAs and PUFAs and quite unfavorable to SFAs. + +Page 203: + +> Only because olive oil has been so wildly hyped does the disappointing news about actual scientific findings come as any surprise. Indeed, “surprisingly” is the word that two Spanish researchers used when confronting the data purporting to show olive oil’s heart-healthy effect, and concluding, in 2011, that there was “not much evidence.” + +This may be another one of those reasonable-people-may-disagree type things, but I don’t really think the paper concludes that there is “not much evidence.” They do say those words in the abstract, though [[113](https://doi.org/10.1016/s0140-6736(94)92580-1)]. Here is the sentence: “Surprisingly, there is not much evidence coming from analytical epidemiological studies about this issue.” Which is slightly, but I would argue distinctly, different from how Teicholz phrases that. They say there are not many epidemiological studies on the issue, while Teicholz claims they say there is not much evidence showing a heart-healthy effect. Is there a difference? You decide. + +In any case, the paper actually goes on to describe the evidence that exists, and it seems quite positive for ol’ olive oil. In fact, Table 4 and Table 5 show the lowest odds ratios I have ever seen in real life. Most of the studies they review show a significant inverse association between olive oil and some form of heart disease. + +![][image11] +[image11]: /blog/bigfatsurprise/image11.png + +On page 208 she mentions that Antonia Trichopoulou was steeped in bias and not a great scientist (which is… amusing coming from Teicholz). + +![][image12] +[image12]: /blog/bigfatsurprise/image12.png + +> “Antonia is perhaps guilty, as we all were, of thinking with her heart,” says her former colleague Elisabet Helsing, who, as the Advisor on Nutrition for WHO Europe, was involved in all the early work on the Mediterranean diet.”Many of us in this field, we were led not by the head but by our hearts. The evidence was never so good.” Or, as Harvard epidemiologist Frank B. Hu wrote in 2003, in a break with his colleagues, the Mediterranean diet “has been surrounded by as much myth as scientific evidence.” + +The first quote is personal correspondence, so it can’t be verified, but the Hu quote can be. It does appear in the paper, but this is another classic example of Teicholz’s quote-mining. The whole article is what I would consider the opposite of an indictment of the Mediterranean Diet: Hu makes the case that the diet is quite beneficial and versatile. That quote is the only sentence that – when taken out of context – could possibly be construed as incriminating. In fact, much of this book is based on personal interviews with people to which I am not privy. I am uncovering an uncomfortable level of quote-mining by Teicholz which really makes me skeptical of the interviews. + +Page 209, Teicholz discusses a randomized clinical trial of the Mediterranean Diet (the Lyon Diet Heart Study).52\u{00A0}The results clearly indicate CHD benefits, so naturally Teicholz has to do some serious spinning to explain-away these results: + +> Yet the study had enough methodological problems to give any reasonable person pause: It was small (“hopelessly underpowered,” meaning not enough subjects, as one researcher commented). + +I find it strange that a trial that contains 605 participants would be characterized as “hopelessly underpowered.” Let’s take a look at that quote and see what the researcher’s explanation of this is… The cited source of that quote is a paper by Ness et al [[114](https://doi.org/10.1038/sj.ejcn.1601342)]. The “hopelessly underpowered” quote does not appear in the text, nor is there anything similar that might be interpreted as hopelessly underpowered. In fact, there is no mention whatsoever of the Lyon Diet Heart study. + +Teicholz continues the dubious Lyon-bashing on page 210 where she states the following: + +> These problems are described in a paper for the American Heart Association, which found itself in the awkward position of trying to reconcile its own recommended low-fat diet with the success of the relatively high-fat diet used in the Lyon study. The authors concluded that the diet had been “so poorly assessed in both groups” […] + +Much like the hopelessly underpowered quote the “so poorly assessed in both groups” quote does not appear in the cited source [[115](https://doi.org/10.1161/01.cir.103.13.1823)].\u{00A0}Teicholz’s next sentence says: + +> It’s quite possible that the better health outcomes seen in the experimental group were due entirely to what is called the “intervention effect,” they wrote. + +They didn’t write that, either. I don’t even think a paraphrasing argument could be made here. + +On page 211 Teicholz discusses the interesting case of Indian researcher Dr. Ram B. Singh who conducted a dietary trial in the early 90s examining common Indian fruits and vegetables and nuts and their effects on heart health [[116](https://doi.org/10.1136/bmj.304.6833.1015)][[117](https://doi.org/10.1016/0002-9149(92)90786-x)].\u{00A0}As it turns out Singh may have fabricated some of his data [[118](https://doi.org/10.1136/bmj.331.7511.281)][[119](https://doi.org/10.1016/S0140-6736(05)67014-6)][[120](https://doi.org/10.1136/bmj.331.7511.267)][[121](https://doi.org/10.1136/bmj.331.7511.245)][[123](https://doi.org/10.1111/j.1753-4887.2006.tb00232.x)]. Scandalous! + +Teicholz could have left it there as an interesting and accurate anecdote of research malfeasance exposed, but she has to take it a step further and lie about something that didn’t happen. + +> Years later, however, the Singh study was still being included in scientific literature reviews of the Mediterranean Diet, including an influential one by Lluis Serra-Majem in 2006. + +The review in question does not mention or cite that study at all [[124](https://doi.org/10.1016/S0140-6736(02)11472-3)]. Teicholz is on a roll here with the lies. Maybe she thinks that if you have got this far reading the book then you’re pretty much on board with her arguments and doesn’t really need to provide actual evidence for her claims. The review does cite another study by Singh (presumably the same guy), but that study was published in 2002 and has not been linked with any kind of impropriety that I know of [[125](https://doi.org/10.1016/j.amjmed.2011.04.024)]. + +Page 215: + +> If the Israeli trial had never existed, everyone could have assumed that the Mediterranean option in PREDIMED was the best possible regime for health. But that third, low-carb arm in Israel had revealed that an even better option was possible. (Previous shorter trials had found the same thing, as we will see in Chapter 10.) + +As evidence for the parenthetical claim she cites a meta-analysis comparing **low-fat diets**\u{00A0}to **Mediterranean diets** [**[**126](https://doi.org/10.1093/ajcn/61.6.1338S)]**!**\u{00A0}There is no discussion or mention of any low-carb diets in that paper. + +Page 218 Teicholz makes the argument that the people of the Mediterranean did not eat lean meats like Keys and others recorded, but fatty meats. As evidence she cites _a work of fiction_: + +> Nor were the ancient Greeks feasting on chicken. The Iliad describes the dinner given by Achilles for Odysseus this way: “Patrokles put a big bench in the firelight and laid on it the backs of a sheep and a fat goat and the chine of a great wild hog rich in lard.” + +Alright everyone, pack it up. Clearly Homer’s poetry written about a thousand years before Jesus was born trumps any kind of scientific research. + +Page 221: + +> As Italy and Greece slowly grew more prosperous following the war, they started to leave the near vegetarian diet behind. From 1960 to 1990, Italian men came to eat ten times more meat on average, which was by far the biggest change in the Italian diet, yet the sizable spike in heart disease rates that might have been expected did not occur; in fact, they declined. And the height of the average Italian male during this time increased by almost three inches. + +Is Teicholz implying that meat consumption decreased heart disease rates and increased height? Is that what she is doing here? It sure looks like it. Is this evidence from a randomized controlled dietary trial? Does Teicholz need to be reminded that correlation does not equal causation? + +Her supporting evidence for this is a paper by Ferro-Luzzi (remember her?) [[127](https://doi.org/10.1136/jech.33.2.114)]. The paper states that meat consumption increased about 3X not 10X. Sugar consumption increased about 4X. Both fruit and vegetable consumption doubled, as did eggs and fish. At the risk of spelling this out for everyone, even if we were to assume that something like height was due only to diet (which is a stretch), Teicholz still has all her work ahead of her to find good reasons to eliminate all the other dietary changes as a possible factor. + +Page 221-222: + +> It was the same in Spain: since I960, meat and fat consumption have skyrocketed, while at the same time deaths from heart disease have plummeted. In fact, coronary mortality over the past three decades has halved in Spain, while saturated fat consumption during roughly this period increased by more than 50 percent. + +Her evidence for this claim is a cross-sectional study by Lluís Serra-Majem [[102](https://doi.org/10.1093/ajcn/61.6.1351S)]. If you were not aware, cross-sectional studies are the least informative and least robust of all epidemiology, except for perhaps a case series. Funny how Teicholz claims throughout the book that epi studies like this one are basically meaningless if they purport to show some link between meat or saturated fat and some negative health outcome, but are just fine to invoke if they fit her narrative. + +Meanwhile, if you actually read the study the author says something that Teicholz might not want you to hear: + +> This paradoxical situation can be explained by expanded access to clinical care, increased consumption of fruit and fish, improved control of hypertension, and a reduction in cigarette smoking. + +The author goes on to state that bioactive compounds and dietary antioxidants such as beta-carotene likely also played a role in decreasing CHD. Of course Teicholz never informs her readers of this, because she wants you to think that meat brought CHD rates down. + +Teicholz continues: + +> The trends are the same in France and Switzerland, whose populations have long eaten a great deal of saturated fat yet never suffered much from heart disease. The Swiss ate 20 percent more animal fats in 1976 than in 1951 while deaths from heart disease and hypertension fell by 13 percent for men and 40 percent for women. + +True according to one of those cross-sectional, observational studies she cites (which according to her are crappy and meaningless) [[128](https://doi.org/10.1016/0091-7435(83)90163-9)]. But what she doesn’t say is that other things happened in Switzerland in those years as well according to the analysis: use of anti-hypertensive drugs increased, the economy got much better, there was a migration to urban areas, intake of vegetable fats increased, there was an increased use of oral contraceptives. All of these factors are associated in some way with the decline of heart disease. Do they play a role? It is unclear, and it CANNOT be clear from this study. But that doesn’t stop Teicholz from letting you think that meat may have caused the downturn. + +Continuing to the very next paragraph: + +> This apparent contradiction holds true even on the island of Crete. When the lead researcher for the Greek portion of the Seven Countries study, Christos Aravanis, went back to Crete in 1980, two decades after his initial research, he found that the farmers were eating 54 percent more saturated fat, yet heart attack rates remained extraordinarily low. + +The Aravanis paper actually says the opposite of that [[129](https://www.proquest.com/openview/c28f798b1072ff71722cc83a3e7c3ea6/1?pq-origsite=gscholar&cbl=18750)]: + +> The 10-year adjusted MCHD [mortality from coronary heart disease] was correlated with total fat in the diet; the correlation with saturated fatty acids was much more significant. + +AND + +> The 10-year incidence rate for CHD was correlated in low order with percentage of calories from total fats, but its correlation with percentage of calories from saturated fatty acids was significantly positive. + +### CHAPTER 8: EXIT SATURATED FATS, ENTER TRANS FATS + +**Cribbing Schleifer Alert** + +It would appear that Teicholz lifts much of the first few pages of chapter 8 from the works of David Schleifer, specifically his 2010 dissertation and a 2012 article which is essentially a condensed version of his dissertation. Schleifer is not attributed in the references section, either. Teicholz doesn’t blatantly copy-paste verbatim, but instead changes enough words to where she has plausible deniability. If you read through both chapter 8 and Schleifer’s dissertation, though, you can easily tell that it’s the same information in the same order. + +For instance, Schleifer writes on page 64 of his dissertation “Philip Sokolof founded NHSA in Omaha, Nebraska in 1985 to increase public awareness of cholesterol. Sokolof was motivated by a near-fatal heart attack to spend approximately $15 million of his own money on public education campaigns related to saturated fat and cholesterol" [[130](https://doi.org/10.1353/tech.2012.0018)].\u{00A0}On page 228 of BFS Teicholz writes “Another force pushing food companies to ditch saturated fats for hydrogenated oils was a lone multimillionaire in Omaha, Nebraska, Philip Sokolof […] after suffering a near-fatal heart attack in his forties, made it his mission in his retirement to inform Americans about the dangers of saturated fats.” + +- Schleifer: “He seems to have operated the organization mostly by himself, spending approximately $15 million of his own money […]” [[131](https://doi.org/10.1016/0021-9150(73)90028-2)]. + +- Teicholz, page 230: “Sokolof founded a group called the National Heart Saver Association, funded by his own millions, and ran it mostly by himself.” + +- Schleifer: “Sokolof mailed ‘thousands of letters’ to food manufacturers urging them to eliminate saturated fats” [[131](https://doi.org/10.1016/0021-9150(73)90028-2)]. + +- Teicholz, page 230: “[Sokolof] had mailed ‘thousands of letters’ to food manufacturers urging them to eliminate tropical oils from their products […]” + +- Schleifer, page 65: “Irritated at receiving form letters in response, he mounted his first of three ‘Poisoning of America’ campaigns in October 1988” [[130](https://doi.org/10.1353/tech.2012.0018)]. + +- Teicholz, page 230: “[A]n irritated Sokolof decided that a campaign to shame these manufacturers publicly was his best option.” + +- Schleifer, page 65: “These consisted of full-page advertisements in _The New York Times, Washington Times, The New York Post, USA Today, The Wall Street Journal_\u{00A0}and other newspapers […]” [[130](https://doi.org/10.1353/tech.2012.0018)]. + +- Teicholz, references page 383: “Identical full-page ads were also placed in the _Wall Street Journal, Washington Times, New York Post_, and _USA Today_, among other papers.” + + +Both Teicholz and Schleifer even publish [the same Sokolof figure](https://thescienceofnutrition.files.wordpress.com/2014/06/1988-display-ad-27-no-title.pdf)\u{00A0}and use the same quotes from it. + +But that’s not all: it appears Teicholz also takes most of her information on CSPI from Schleifer as well. + +- Both discuss the “Saturated Fat Attack” campaign, even though the source material from the 80s is nearly impossible to find. + +- Both pluck the same quotes from the same texts, even though the original texts might be 200+ page books. + +- Teicholz, page 228: “Hydrogenated oils were therefore ‘not a bad bargain’ when it came to heart disease, the group concluded.” Schleifer uses the same “not a bad bargain” quote in both of his texts [[130](https://doi.org/10.1353/tech.2012.0018)][[131](https://www.proquest.com/openview/c28f798b1072ff71722cc83a3e7c3ea6/)].\u{00A0}What are the odds? + +- Schleifer: “But it praised Burger King for switching to vegetable shortening in 1986, which it described as ‘a great boon to Americans’ arteries’” [[131](https://www.proquest.com/openview/c28f798b1072ff71722cc83a3e7c3ea6/)]. + +- Teicholz, page 228: “Another CSPI campaign successfully convinced movie theaters across America to switch from butter and coconut oil to partially hydrogenated oils in their popcorn poppers. This was ‘a great boon to American arteries’ CSPI judged.” Notice how Teicholz makes it seem like CSPI is referring to movie theaters here, when in fact it is actually Burger King. + + +The argument about the fight between the American Soybean Association and the Malaysian palm oil industry is also part of Schleifer’s dissertation. They both use the same quote from a NYT article. + +- Schleifer, page 71: “’A trade issue is not our concern,’ said Stuart Greenblatt, a spokesman for the Keebler Company, which has said it will remove tropical oils from all its products. ‘American consumers and their health is our concern, and they are telling us they don’t want it. We get piles of mail every day, from everywhere’” [[130](https://doi.org/10.1353/tech.2012.0018)]. + +- Teicholz, page 235: “’We are getting piles of mail every day, from everywhere,’ a spokesman for the Keebler Company told the _New York Times_. ‘American consumers and their health is our concern, and they are telling us they don’t want it [tropical oils].’” + +- Schleifer, page 77-78: “[…] General Mills’ Bugles brand corn chips were the only major American brand that did not reformulate; they were unable to find a technically viable alternative and continued to use coconut oil” [[130](https://doi.org/10.1353/tech.2012.0018)]. + +- Teicholz, page 235: “Nor could Bugles, the cornucopia-shaped snack made by General Mills, be easily reformulated without coconut oil.” + + +It is amusing to me that Teicholz accuses Time magazine of lifting her arguments when she pretty blatantly lifts arguments from others. Again, I think it is worth mentioning that Schleifer is not mentioned in her references section, and he most definitely should be. To be fair, she puts his stuff in the bibliography, but never references it. + +I have no idea why the references/bibliography sections are structured like they are. It just makes everything monumentally confusing when attempting to look something up, plus it takes up an extra 100 or so pages that would not be necessary if they were cited the traditional way. My guess is that she just copied the way Taubes did GCBC, references and all. + +Page 234: + +> In preliminary studies, palm oil seemed to protect against blood clots. + +Nope. The study she cites actually shows that sunflower seed oil protects against blood clots… in rats [[132](https://doi.org/10.1080/07315724.2010.10719839)]. + +### CHAPTER 9: EXIT TRANS FATS, ENTER SOMETHING WORSE? + +Page 275: + +> Research over the past twenty years has allayed the health concerns raised about palm oil during the “tropical oil wars”; the oil may actually be beneficial for health in some ways […] + +As evidence she cites a supplemental paper written by the Malaysian Palm Oil Council [[133](https://doi.org/10.1093/ajcn/62.1.1)]. + +Page 276: + +> More speculatively, research over the past decades has shown that omega-6s are related to depression and mood disorders. + +The cited paper actually makes the case that low omega-3 intake is related to depression [[134](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1924359/)]. I suppose if you really stretch your brain you can somehow argue that eating omega-6 will necessarily lead to low omega-3s, which might then cause depression, but that’s way out there. + +### CHAPTER 10: WHY SATURATED FAT IS GOOD FOR YOU + +On page 288 Teicholz discusses Dr. Atkins and says + +> The diet was a tremendous success for him and then for his patients. Atkins tweaked the Wisconsin paper and expanded it into an article for Vogue magazine (his regime was called the Vogue Diet for a while). + +I decided to check her bibliography and download the Vogue issue in question via ProQuest. She cites it as “Take It Off, Keep It Off Super Diet . . . Devised with the Guidance of Dr. Robert Atkins,” Vogue 155, no. 10 (1970): 84—85.” I looked on pages 84-85 and it wasn’t there. Strange, right? Where did she come up with that citation? As it turns out (as of this writing, at least) it is cited that way on Dr. Robert Atkins’s Wikipedia page: It turns out that the actual Vogue article is located in the same issue, but different page numbers. My guess is that Teicholz simply copy-pasted the Wikipedia reference and never even saw the original magazine issue. + +![][image13] +[image13]: /blog/bigfatsurprise/image13.png + +Page 298, Teicholz discusses the memoirs of a physician: + +> With patients on his meat-all-the-time diet, Donaldson found himself “less and less likely to resort to drugs” to combat these diseases. + +Her references indicate that the quote is found on page three of his memoir _Strong Medicine_. It is not. Nor is it clear, if it was the case that Donaldson prescribed fewer drugs, that it was the result of his meat-heavy diets. + +Teicholz then discusses a doctor and researcher Otto Schaefer who visited some “Eskimo” populations. On page 299 she states: + +> To Schaefer, it seemed obvious that the Inuit were “unable to cope with starches and sugars” to which they had been introduced. + +As the source of that quote Teicholz cites a paper titled “Glycosuria and Diabetes Mellitus in Canadian Eskimos” [[135](https://doi.org/10.1172/JCI109945)]. The above quote does not exist in the text. The paper actually makes the case that diabetes was considerably overdiagnosed in Eskimo/Inuit populations, perhaps contrary to the case Teicholz is trying to make in this section, namely that CHOs led to chronic diseases in the Inuit. + +Page 304: + +> [F]or peak performance during long-distance efforts such as marathons, the common wisdom has been that athletes should eat a lot of carbohydrates the night before. His was the first idea that Phinney wanted to test. “We were pretty sure we’d prove that the carb-loading concept was correct” Phinney told me. To his surprise, he found just the opposite: athletes in his experiments could perform at their best on nearly zero carbohydrates. + +These “athletes” were actually obese study subjects [[136](https://doi.org/10.1172/JCI103265)]. These subjects were on a low-carb, calorie-restricted diet and there was no control group of moderate or high-carbohydrate dieters with which to compare the results. In my interpretation the best thing you can say about this study is that obese people are capable of exercise on a reduced-calorie, ketogenic diet. + +Page 305: + +> [O]ur bodies have no requirement for carbohydrates and can sustain themselves perfectly well, if not better, on ketones. + +For this claim she cites a paper from 1956 that measured fatty acids in the blood [[137](https://doi.org/10.1093/ajcn/84.6.1549)]. I don’t know if you can claim that we have no requirements for CHOs and can sustain ourselves as well or better on ketones. The only thing you can really say is that unesterified fatty acids exist in human plasma. + +Page 306: + +> [T]he ability of blood vessels to dilate (known as endothelial function,” which many experts believe to be an indicator of heart attack risk) has also been shown to improve on the low carbohydrate diet, compared to people on one low in fat. Surprised and skeptical, Volek wondered if all these gains could simply be due to weight loss, since his subjects inevitably slimmed down on the Atkins diet. So he did further experiments keeping his subjects weight constant and found that the low-carb diet yielded the same improvements, even so. + +My beef here is with that last statement, the rest is just for context. If you look at the “further experiments” Teicholz mentions you’ll find that the source of this statement is no trial, but rather a letter to the editor of AJCN that criticizes another study that claims that weight loss causes the improved endothelial function and not a load of fat [[138](https://doi.org/10.1093/ajcn/83.5.1025)][[139](https://doi.org/10.2337/diab.25.6.494)]. + +Page 306: + +> Carbohydrate restriction as a cure for diabetes had been reported by physicians as far back as the late nineteenth century, but Westman’s trials were among the first to give solid scientific backing to the treatment. + +On page 398 of the Notes section Teicholz cites a study that predated Westman’s that ostensibly gives “solid scientific backing” to the idea that diabetes could be cured via CHO restriction. Except that the study was done on obese patients and given only 300-700 kcals of nearly pure protein, plus Tums and iron supplements [[140](https://doi.org/10.2337/diab.25.6.494)]. The patients ended up losing a lot of weight. A couple things: 1) “Cure” is certainly a strong word; 2) Can Teicholz be sure that it was not the weight loss alone or the Tums or the iron or the protein or the lack of fat that played a role in the improvement? It must be CHO restriction? + +Page 307: + +> [T]he American Diabetes Association (ADA) has stood by its low-fat advice, based on the fact that diabetics have a very high risk of heart disease, and since authorities advise a low-fat diet to fight that disease, that is what the ADA recommends to prevent diabetes, too. + +The publication she cites actually favorably mentions both a low-fat AND a low-carbohydrate diet [[141](https://doi.org/10.2337/dc08-S061)].\u{00A0}In fact, it seems that the ADA might be inclined toward a low-carb diet. Don’t believe me? From the text: + +- For weight loss, either low-carbohydrate or low-fat calorie-restricted diets may be effective in the short term (up to 1 year). + +- Although low-fat diets have traditionally been promoted for weight loss, two randomized controlled trials found that subjects on low-carbohydrate diets lost more weight at 6 months than subjects on low-fat diets. + +- Another study of overweight women randomized to one of four diets showed significantly more weight loss at 12 months with the Atkins low-carbohydrate diet than with higher-carbohydrate diets. + +- Changes in serum triglyceride and HDL cholesterol were more favorable with the low-carbohydrate diets. + +- In one study, those subjects with type 2 diabetes demonstrated a greater decrease in A1C with a low-carbohydrate diet than with a low-fat diet. + +- It is possible that reduction in other macronutrients (e.g., carbohydrates) would also be effective in prevention of diabetes through promotion of weight loss […] + +- Low-carbohydrate diets might seem to be a logical approach to lowering postprandial glucose. + + +Why not mention this? I don’t know. I suppose it is in keeping with the narrative throughout the book that nutrition authorities are incompetent, corrupt, and/or extremely rigid in their advice. + +Page 308: + +> One of the more extraordinary experiments involved 146 men suffering from high blood pressure who went on the Atkins diet for almost a year. The group saw their blood pressure drop significantly more than did a group of low-fat dieters—who were also taking a blood-pressure medication. + +Barely any of that statement is true: blood pressure went down a bit among the low-carbohydrate group, but not enough to be statistically significant [[142](https://doi.org/10.7326/0003-4819-140-10-200405180-00006)]. Also there was no mention of any group taking a blood pressure lowering medication. I don’t know where she gets that. Also, the study lasted for 24 weeks, not one year. She must have cited the wrong article, this is just too wrong to even be lying. + +Page 309-310: + +> In 2008, results from a two-year trial were finally published. This was the study in Israel, discussed in the Mediterranean diet chapter, on 322 overweight men and women. The trial was exceptionally well controlled by the standards of nutrition research, with lunch, the principal meal of the day in Israel, provided at a company cafeteria. The study separated subjects into three groups: one eating the AHA’s prescribed low-fat diet, another on the Mediterranean diet, and a third on the Atkins diet. […] Shai found that for nearly every marker of heart disease that could be measured during the two years of the study, Atkins dieters looked the healthiest—and they lost the most weight. For the small subset of diabetics in the study, the results looked about equal for the Atkins and Mediterranean diets. And in every case, the low-fat diet performed the worst. […] Kidney function and bone density, two primary concerns, were found to be perfectly fine, if not improved, on the Atkins diet. + +For these claims Teicholz cites a 2008 study by Shai published in NEJM [[143](https://doi.org/10.1056/NEJMoa0708681)].\u{00A0}However, she leaves out a few facts from the study. + +1. The participants in the low-carbohydrate arm of the study were counseled to consume **vegetarian sources of fat and protein**. + +2. The participants were nearly all male, something Teicholz takes umbrage with in chapter 6. + +3. Although the low-fat diet did seem to “perform” the worst of the three, the Mediterranean diet and the low-carbohydrate diet fared similarly in most respects, not just in diabetics. So I doubt you can say unequivocally that the Atkins dieters were the healthiest when there’s another diet that leads to the same measured outcomes. + + +Although not discussed by Teicholz there were some other papers published using data from this particular study (referred to as DIRECT, Dietary Intervention Randomized Controlled Trial). One of which was a four year follow-up to the study that showed that the Atkins-style dieters gained back most of the weight that was lost [[144](https://doi.org/10.1056/NEJMoa0708681)]. The Mediterranean dieters ended up losing nearly double the weight of the Atkins dieters. The low-fat group still had the least amount of weight lost. The Mediterranean dieters also had the most favorable cholesterol and triglycerides. + +In another publication kidney function was found to be similarly improved among all three diets [[145](https://doi.org/10.1056/NEJMc1204792)]. Although the authors mention that since the improvement was so similar between diets, the improvement among participants was likely due to weight loss alone rather than the constituents of the diet. The same was said in a publication examining the effect of the three diets on ASCVD [[146](https://doi.org/10.2337/dc12-1846)]. + +Another publication from the same trial suggests that the Mediterranean diet is the most beneficial of the three for type 2 diabetics [[147](https://doi.org/10.1161/CIRCULATIONAHA.109.879254)]. + +For a more detailed discussion of the Shai study see CarbSane’s posts: [Part 1](http://carbsanity.blogspot.com/2014/06/nina-teiholz-shaister-part-i-diets-of.html), [Part 2](http://carbsanity.blogspot.com/2014/06/nina-teiholz-shaister-part-ii.html), [Part 3](http://carbsanity.blogspot.com/2014/06/nina-teiholz-shaister-part-iii-well.html), and [Part 4](http://carbsanity.blogspot.com/2014/06/nina-teiholz-shaister-part-iv-random.html). + +Page 314: + +> In 2011, a group of top nutrition experts published the first high-level, formal consensus paper stating that refined carbohydrates were worse than saturated fats in provoking heart disease and obesity (Astrup et al. 2011). + +This is not true. The paper stated that no clear benefit of replacing saturated fatty acids with carbohydrates has been shown, not that refined carbohydrates are worse [[148](https://doi.org/10.1016/S0168-8227(09)70008-7)]. Moreover, the authors state unambiguously that replacing saturated fatty acids with polyunsaturates does decrease risk of heart disease – something Teicholz unsurprisingly leaves out. + +Page 315: + +> Remember that the Shai study in Israel found that the Mediterranean diet group, eating a high proportion of calories as these “complex” carbohydrates, turned out to be less healthy and fatter than the group on the Atkins diet, although they were healthier than the low-fat alternative. + +Umm… No. + +Page 315: + +> The Women’s Health Initiative, too, in which some 49,000 women were tested on a diet high in complex carbohydrates for nearly a decade, showed no reduction in disease risk or weight. + +Wrong again. There was decreased risk in ovarian cancer and weight [[79](https://doi.org/10.1093/jnci/djm159)][[80](https://doi.org/10.1001/jama.295.1.39)]. + +Page 317: + +> [I]n more than a few major studies, LDL-cholesterol levels were found to be completely uncorrelated with whether people had heart attacks or not. + +Let’s take a look at these “major studies” she cites, shall we? + +The first is by de Lorgeril et al [[113](https://doi.org/10.1016/s0140-6736(94)92580-1)]. I won’t go into detail, but those in the intervention group had fewer heart attacks and also had lower LDL. From the text: “[T]he trend with time was a decrease in total and low density lipoprotein (LDL) cholesterol […]” Although it was not statistically significant, so we’ll give this one to Teicholz. + +The second is not a study, but a short commentary by Despres [[149](https://doi.org/10.1016/S0140-6736(09)60448-7)].\u{00A0}It argues that we should not focus **exclusively**\u{00A0}on LDL, which is not the same as saying LDL is not correlated with anything. + +The third is a statin trial that showed reducing LDL cholesterol also reduced coronary events [[150](https://doi.org/10.1001/archinternmed.2010.182)].\u{00A0}In other words, the opposite of Teicholz’s claim. Some choice quotes from the paper: + +> This trial provides evidence that the use of intensive atorvastatin therapy to reduce LDL cholesterol levels below 100 mg per deciliter is associated with substantial clinical benefit in patients with stable CHD. Our findings indicate that the quantitative relationship between reduced LDL cholesterol levels and reduced CHD risk demonstrated in prior secondary-prevention trials of statins holds true even at very low levels of LDL cholesterol. + +The fourth is a meta-analysis on statins and all-cause mortality [[151](https://doi.org/10.1001/archinternmed.2010.182)]. \u{00A0}Basically irrelevant because it’s only slightly related to the claim of no relationship between LDL and heart attacks. + +The fifth is by Castelli et al and is again pretty much the opposite of what Teicholz said [[152](https://doi.org/10.1161/01.CIR.55.5.767)].\u{00A0}Want some more choice quotes? + +> There is a very regular increase of CHD prevalence rates with increasing LDL cholesterol level at each level of HDL cholesterol. The inverse relationship between HDL cholesterol and CHD, when taken over the three levels of LDL cholesterol, is significant (P < 0.001) by a method of Mantel, as are the positive trends of CHD prevalence on LDL cholesterol level. Cross-classification of triglyceride with LDL cholesterol level (fig. 3) leads to the conclusion that either lipid has a statistically significant association with CHD prevalence […] In general, then, when contingency tables are constructed for the three lipids considered two at a time, HDL and LDL cholesterol emerge as consistently significant factors in CHD prevalence […] + +Does Teicholz even read the studies she cites? + +Page 324: + +> Krauss and his colleagues concluded that “saturated fat was not associated with an increased risk” for heart disease or stroke. + +Krauss did not conclude that, according to the cited study [[153](https://doi.org/10.3945/ajcn.2008.26285)].\u{00A0}What was said is that **replacing\u{00A0}saturated fat with carbohydrate**\u{00A0}is not associated with an increased risk of heart disease **in women**. Notice how they are very different statements? + +What about stroke? The paper mentions a couple things: + +> [S]aturated fat intake may be inversely related to ischemic and/or hemorrhagic stroke, but a meta-analysis including results from 6 other studies did not yield a statistically significant risk reduction. Notably, in humans, the risk of stroke has been related to both the saturated and monounsaturated fatty acid content of plasma cholesteryl esters, which further supports the possibility that the dietary intake of these fatty acids may influence CVD risk by altering cholesteryl ester composition. + +Bonus factoid: the paper also states that polyunsaturated fats are inversely associated with developing type 2 diabetes. + +On page 325-326 she discusses a panel event at FNCE in 2010 and produces a quote by Mozaffarian: “its not really useful anymore to focus on saturated fats,” he said. She cites a subsequent publication of the event in the _Journal of the American Dietetic Association_ [[154](https://doi.org/10.1016/j.jada.2011.03.030)]. However, that paper does not contain that quote. Nor does the quote appear in other publications by JADA discussing that event and quoting Mozaffarian [[155](https://doi.org/10.1016/j.jada.2011.03.026)[[156](https://doi.org/10.1016/j.jada.2011.03.031)]. + +Page 326: “Americans have dutifiilly followed official dietary advice […]” Pretty sure that’s not true [[157](https://doi.org/10.1097/JOM.0b013e31823ccafa)]. Even by the admission of the USDA [[158](https://centerforinquiry.org/wp-content/uploads/sites/33/quackwatch/dga_advisory_2010.pdf)]. + +### CONCLUSION + +Some have called this review mere quibbling or nit-picking, and that the true thesis of BFS still stands. I would strenuously argue the opposite. If I was nit-picking I would have also brought up one or more instances where Teicholz misquotes someone, but the actual quote is not substantively different. I imagine those are innocent mistakes. Nor do I think that Teicholz’s main arguments still hold up. + +The arguments in this book are scientific claims that are purportedly supported by scientific evidence. If it turns out, however, that the evidence was never really there in the first place then you can no longer make the claim. The issues I bring up in this review are too substantial and too numerous to be ignored. If you were to remove all of the instances where Teicholz deeply distorts a study or publication, and you were to remove all conclusions that she draws from the distortions you would be left with nothing but a pamphlet. + +After reading The Big Fat Surprise by Nina Teicholz I am frankly disappointed – yet unsurprised – that a book like this was even published. We as readers need to start demanding better fact-checking from our publishers, especially the enormously successful ones like Simon & Schuster. Misinformation like this can actually affect people’s health in a potentially very negative way. I get that publishing companies want to make a profit, but you can publish a compelling pop science book that people buy without misinforming your audience. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +### BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Biss, K., et al." + , title = "Some Unique Biologic Characteristics of the Masai of East Africa" + , journal = "The New England Journal of Medicine" + , year = "1971" + , link = "https://doi.org/10.1056/NEJM197104012841304" + } + , { author = "Mann, G. V., et al." + , title = "Atherosclerosis in the Masai" + , journal = "American Journal of Epidemiology" + , year = "1972" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a121365" + } + , { author = "Hrdlicka, Ale" + , title = "Physiological and Medical Observations among the Indians of Southwestern United States and Northern Mexico" + , journal = "" + , year = "1908" + , link = "http://repository.si.edu/xmlui/handle/10088/15501" + } + , { author = "Prentice, G." + , title = "CANCER AMONG NEGROES" + , journal = "BMJ" + , year = "1923" + , link = "https://doi.org/10.1136/bmj.2.3285.1181-a" + } + , { author = "Crawford, M. A." + , title = "Fatty-Acid Ratios in Free-Living and Domestic Animals. Possible Implications for Atheroma" + , journal = "Lancet (London, England)" + , year = "1968" + , link = "https://doi.org/10.1016/s0140-6736(68)92034-5" + } + , { author = "Schoenheimer, R., and D. Rittenberg" + , title = "DEUTERIUM AS AN INDICATOR IN THE STUDY OF INTERMEDIARY METABOLISM" + , journal = "Science (New York, N.Y.)" + , year = "1935" + , link = "https://doi.org/10.1126/science.82.2120.156" + } + , { author = "Keys, A." + , title = "Human Atherosclerosis and the Diet" + , journal = "Circulation" + , year = "1952" + , link = "https://doi.org/10.1161/01.CIR.5.1.115" + } + , { author = "Truswell, A. S." + , title = "Evolution of Dietary Recommendations, Goals, and Guidelines" + , journal = "The American Journal of Clinical Nutrition" + , year = "1987" + , link = "https://doi.org/10.1093/ajcn/45.5.1060" + } + , { author = "Hopkins, P. N." + , title = "Effects of Dietary Cholesterol on Serum Cholesterol: A Meta-Analysis and Review" + , journal = "The American Journal of Clinical Nutrition" + , year = "1992" + , link = "https://doi.org/10.1093/ajcn/55.6.1060" + } + , { author = "Mann, G. V." + , title = "The Epidemiology of Coronary Heart Disease" + , journal = "The American Journal of Medicine" + , year = "1957" + , link = "https://doi.org/10.1016/0002-9343(57)90325-x" + } + , { author = "Keys, A." + , title = "The Diet and the Development of Coronary Heart Disease" + , journal = "Journal of Chronic Diseases" + , year = "1956" + , link = "https://doi.org/10.1016/0021-9681(56)90040-6" + } + , { author = "Yerushalmy, J., and H. E. Hilleboe" + , title = "Fat in the Diet and Mortality from Heart Disease; a Methodologic Note" + , journal = "New York State Journal of Medicine" + , year = "1957" + , link = "https://pubmed.ncbi.nlm.nih.gov/13441073/" + } + , { author = "Keys, A." + , title = "Atherosclerosis: A Problem in Newer Public Health" + , journal = "Journal of the Mount Sinai Hospital, New York" + , year = "1953" + , link = "https://pubmed.ncbi.nlm.nih.gov/13085148/" + } + , { author = "" + , title = "Coronary Heart Disease in Seven Countries. I. The Study Program and Objectives" + , journal = "Circulation" + , year = "1970" + , link = "https://pubmed.ncbi.nlm.nih.gov/5442783/" + } + , { author = "Keys, Ancel" + , title = "EPIDEMIOLOGICAL STUDIES RELATED TO CORONARY HEART DISEASE: CHARACTERISTICS OF MEN AGED 40–59 IN SEVEN COUNTRIES*" + , journal = "Acta Medica Scandinavica" + , year = "1966" + , link = "https://doi.org/10.1111/j.0954-6820.1966.tb04737.x" + } + , { author = "Feinleib, Manning" + , title = "Seven Countries: A Multivariate Analysis of Death and Coronary Heart Disease" + , journal = "JAMA" + , year = "1981" + , link = "https://doi.org/10.1001/jama.1981.03310300063026" + } + , { author = "Menotti, Alessandro, and Henry Blackburn" + , title = "The Seven Countries Study: A Scientific Adventure in Cardiovascular Disease Epidemiology" + , journal = "" + , year = "1993" + , link = "https://books.google.ca/books/about/The_Seven_Countries_Study.html?id=hgWRAAAACAAJ&redir_esc=y" + } + , { author = "" + , title = "Lessons for Science from the Seven Countries Study" + , journal = "" + , year = "" + , link = "https://link.springer.com/book/10.1007/978-4-431-68269-1" + } + , { author = "Page, I. H., et al." + , title = "Atherosclerosis and the Fat Content of the Diet" + , journal = "Journal of the American Medical Association" + , year = "1957" + , link = "https://doi.org/10.1001/jama.1957.62980180004013" + } + , { author = "" + , title = "Dietary Fat and Its Relation to Heart Attacks and Strokes. Report by the Central Committee for Medical and Community Program of the American Heart Association" + , journal = "JAMA" + , year = "1961" + , link = "https://pubmed.ncbi.nlm.nih.gov/14447694/" + } + , { author = "Time" + , title = "Medicine: Fat in the Fire" + , journal = "Time" + , year = "1960" + , link = "https://content.time.com/time/subscriber/article/0,33009,895155,00.html" + } + , { author = "Time" + , title = "Medicine: The Fat of the Land" + , journal = "Time" + , year = "1961" + , link = "https://content.time.com/time/subscriber/article/0,33009,828721,00.html" + } + , { author = "Stout, C., et al." + , title = "UNUSUALLY LOW INCIDENCE OF DEATH FROM MYOCARDIAL INFARCTION. STUDY OF AN ITALIAN AMERICAN COMMUNITY IN PENNSYLVANIA" + , journal = "JAMA" + , year = "1964" + , link = "https://doi.org/10.1001/jama.1964.03060360005001" + } + , { author = "Keys, Ancel" + , title = "Arteriosclerotic Heart Disease in Roseto, Pennsylvania" + , journal = "JAMA: The Journal of the American Medical Association" + , year = "1966" + , link = "https://doi.org/10.1001/jama.1966.03100020081018" + } + , { author = "Lowenstein, F. W." + , title = "EPIDEMIOLOGICAL INVESTIGATIONS IN RELATION TO DIET IN GROUPS WHO SHOW LITTLE ATHEROSCLEROSIS AND ARE ALMOST FREE OF CORONARY ISCHAEMIC HEART DISEASE" + , journal = "Bibliotheca Nutritio Et Dieta" + , year = "1964" + , link = "https://doi.org/10.1159/000385025" + } + , { author = "Ahrens, E. H., et al." + , title = "Carbohydrate-Induced and Fat-Induced Lipemia" + , journal = "Transactions of the Association of American Physicians" + , year = "1961" + , link = "https://www.semanticscholar.org/paper/Carbohydrate-induced-and-fat-induced-lipemia.-Ahrens-Hirsch/e1e4cfdfe4d98afd5b711226cdc75bdb0c843cb9" + } + , { author = "Anderson, K. M., et al." + , title = "Cholesterol and Mortality. 30 Years of Follow-up from the Framingham Study" + , journal = "JAMA" + , year = "1987" + , link = "https://doi.org/10.1001/jama.257.16.2176" + } + , { author = "Unknown" + , title = "Coronary Heart Disease and Carbohydrate Metabolism" + , journal = "The Journal of the American Medical Association" + , year = "1967" + , link = "" + } + , { author = "Castelli, William P." + , title = "Concerning the Possibility of a Nut..." + , journal = "Archives of Internal Medicine" + , year = "1992" + , link = "https://doi.org/10.1001/archinte.1992.00400190013003" + } + , { author = "Christakis, George, et al." + , title = "Effect of the Anti-Coronary Club Program on Coronary Heart Disease Risk-Factor Status" + , journal = "JAMA" + , year = "1966" + , link = "https://doi.org/10.1001/jama.1966.03110190079022" + } + , { author = "Christakis, George, et al." + , title = "Summary of the Research Activities of the Anti-Coronary Club" + , journal = "Public Health Reports (1896-1970)" + , year = "1966" + , link = "https://doi.org/10.2307/4592649" + } + , { author = "Jolliffe, NORMAN, et al." + , title = "The Anti-Coronary Club; Including a Discussion of the Effects of a Prudent Diet on the Serum Cholesterol Level of Middle-Aged Men" + , journal = "The American Journal of Clinical Nutrition" + , year = "1959" + , link = "https://doi.org/10.1093/ajcn/7.4.451" + } + , { author = "Dayton, S., et al." + , title = "A Controlled Clinical Trial of a Diet High in Unsaturated Fat. Preliminary Observations" + , journal = "The New England Journal of Medicine" + , year = "1962" + , link = "https://doi.org/10.1056/NEJM196205172662001" + } + , { author = "Dayton, Seymour, and MortonLee Pearce" + , title = "DIET AND ATHEROSCLEROSIS" + , journal = "The Lancet" + , year = "1970" + , link = "https://doi.org/10.1016/S0140-6736(70)90868-8" + } + , { author = "Pearce, M. L., and S. Dayton" + , title = "Incidence of Cancer in Men on a Diet High in Polyunsaturated Fat" + , journal = "Lancet (London, England)" + , year = "1971" + , link = "https://doi.org/10.1016/s0140-6736(71)91086-5" + } + , { author = "Blasbalg, Tanya L., et al." + , title = "Changes in Consumption of Omega-3 and Omega-6 Fatty Acids in the United States during the 20th Century" + , journal = "The American Journal of Clinical Nutrition" + , year = "2011" + , link = "https://doi.org/10.3945/ajcn.110.006643" + } + , { author = "Cooper, Richard, et al." + , title = "Trends and Disparities in Coronary Heart Disease, Stroke, and Other Cardiovascular Diseases in the United States: Findings of the National Conference on Cardiovascular Disease Prevention" + , journal = "Circulation" + , year = "2000" + , link = "https://doi.org/10.1161/01.CIR.102.25.3137" + } + , { author = "Nydegger, Urs" + , title = "Serum Lipoprotein Levels in Patients with Cancer" + , journal = "Academia.edu" + , year = "Unknown" + , link = "https://www.academia.edu/98361249/Serum_lipoprotein_levels_in_patients_with_cancer" + } + , { author = "Unknown" + , title = "A Co-Operative Trial in the Primary Prevention of Ischaemic Heart Disease Using Clofibrate. Report from the Committee of Principal Investigators" + , journal = "British Heart Journal" + , year = "1978" + , link = "https://doi.org/10.1136/hrt.40.10.1069" + } + , { author = "Beaglehole, R., et al." + , title = "Cholesterol and Mortality in New Zealand Maoris" + , journal = "British Medical Journal" + , year = "1980" + , link = "https://doi.org/10.1136/bmj.280.6210.285" + } + , { author = "Kark, J. D., et al." + , title = "The Relationship of Serum Cholesterol to the Incidence of Cancer in Evans County, Georgia" + , journal = "Journal of Chronic Diseases" + , year = "1980" + , link = "https://doi.org/10.1016/0021-9681(80)90026-0" + } + , { author = "Garcia-Palmieri, M. R., et al." + , title = "An Apparent Inverse Relationship between Serum Cholesterol and Cancer Mortality in Puerto Rico" + , journal = "American Journal of Epidemiology" + , year = "1981" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a113171" + } + , { author = "Stemmermann, G. N., et al." + , title = "Serum Cholesterol and Mortality among Japanese-American Men. The Honolulu (Hawaii) Heart Program" + , journal = "Archives of Internal Medicine" + , year = "1991" + , link = "" + } + , { author = "Miller, Seth R., et al." + , title = "Serum Cholesterol and Human Colon Cancer" + , journal = "Journal of the National Cancer Institute" + , year = "1981" + , link = "https://doi.org/10.1093/jnci/67.2.297" + } + , { author = "Kozarevic, Dj., et al." + , title = "SERUM CHOLESTEROL AND MORTALITY" + , journal = "American Journal of Epidemiology" + , year = "1981" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a113170" + } + , { author = "Rose, Geoffrey, et al." + , title = "COLON CANCER AND BLOOD-CHOLESTEROL" + , journal = "The Lancet" + , year = "1974" + , link = "https://doi.org/10.1016/S0140-6736(74)92492-1" + } + , { author = "Williams, Roger R., et al." + , title = "Cancer Incidence by Levels of Cholesterol" + , journal = "JAMA" + , year = "1981" + , link = "https://doi.org/10.1001/jama.1981.03310280023021" + } + , { author = "Gammal, E., et al." + , title = "Effects of Dietary Fat on the Uptake and Clearance of 7,12-Dimethylbenz(Alpha)Anthracene by Rat Mammary Tissue" + , journal = "Cancer Research" + , year = "1968" + , link = "https://www.semanticscholar.org/paper/Effects-of-dietary-fat-on-the-uptake-and-clearance-Gammal-Carroll/c8c4012f8544114648842f1af6898b2ed197b0b7" + } + , { author = "Patek, A. J., et al." + , title = "Cirrhosis-Enhancing Effect of Corn Oil. Protection by Choline" + , journal = "Archives of Pathology" + , year = "1966" + , link = "" + } + , { author = "Ueshima, H., et al." + , title = "Is It Desirable to Reduce Total Serum Cholesterol Level as Low as Possible?" + , journal = "Preventive Medicine" + , year = "1979" + , link = "https://doi.org/10.1016/0091-7435(79)90033-1" + } + , { author = "Feinleib, Manning" + , title = "Summary of a Workshop on Cholesterol and Noncardiovascular Disease Mortality" + , journal = "Preventive Medicine" + , year = "1982" + , link = "https://doi.org/10.1016/0091-7435(82)90059-7" + } + , { author = "Feinleib, M." + , title = "On a Possible Inverse Relationship between Serum Cholesterol and Cancer Mortality" + , journal = "American Journal of Epidemiology" + , year = "1981" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a113173" + } + , { author = "Jacobs, Eric J., et al." + , title = "Long-Term Use of Cholesterol-Lowering Drugs and Cancer Incidence in a Large United States Cohort" + , journal = "Cancer Research" + , year = "2011" + , link = "https://doi.org/10.1158/0008-5472.CAN-10-2953" + } + , { author = "Murai, Toshiyuki, et al." + , title = "Low Cholesterol Triggers Membrane Microdomain-Dependent CD44 Shedding and Suppresses Tumor Cell Migration" + , journal = "The Journal of Biological Chemistry" + , year = "2011" + , link = "https://doi.org/10.1074/jbc.M110.184010" + } + , { author = "Hu, J., et al." + , title = "Dietary Cholesterol Intake and Cancer" + , journal = "Annals of Oncology: Official Journal of the European Society for Medical Oncology" + , year = "2012" + , link = "https://doi.org/10.1093/annonc/mdr155" + } + , { author = "Bardou, Marc, et al." + , title = "Effect of Statin Therapy on Colorectal Cancer" + , journal = "Gut" + , year = "2010" + , link = "https://doi.org/10.1136/gut.2009.190900" + } + , { author = "Law, M. R., et al." + , title = "Assessing Possible Hazards of Reducing Serum Cholesterol" + , journal = "BMJ (Clinical Research Ed.)" + , year = "1994" + , link = "https://doi.org/10.1136/bmj.308.6925.373" + } + , { author = "Shekelle, R. B., et al." + , title = "Diet, Serum Cholesterol, and Death from Coronary Heart Disease. The Western Electric Study" + , journal = "The New England Journal of Medicine" + , year = "1981" + , link = "https://doi.org/10.1056/NEJM198101083040201" + } + , { author = "Tillotson, J. L., et al." + , title = "Epidemiology of Coronary Heart Disease and Stroke in Japanese Men Living in Japan, Hawaii, and California: Methodology for Comparison of Diet" + , journal = "The American Journal of Clinical Nutrition" + , year = "1973" + , link = "https://doi.org/10.1093/ajcn/26.2.177" + } + , { author = "Kagan, Abraham" + , title = "Honolulu Heart Program" + , journal = "" + , year = "1996" + , link = "" + } + , { author = "Tanaka, Taichiro, and Tomonori Okamura" + , title = "Blood Cholesterol Level and Risk of Stroke in Community-Based or Worksite Cohort Studies: A Review of Japanese Cohort Studies in the Past 20 Years" + , journal = "The Keio Journal of Medicine" + , year = "2012" + , link = "https://doi.org/10.2302/kjm.61.79" + } + , { author = "Steinberg, Daniel" + , title = "Thematic Review Series: The Pathogenesis of Atherosclerosis. An Interpretive History of the Cholesterol Controversy: Part II: The Early Evidence Linking Hypercholesterolemia to Coronary Disease in Humans" + , journal = "Journal of Lipid Research" + , year = "2005" + , link = "https://doi.org/10.1194/jlr.R400012-JLR200" + } + , { author = "Ahrens, E. H." + , title = "The Evidence Relating Six Dietary Factors to the Nation’s Health. Introduction" + , journal = "The American Journal of Clinical Nutrition" + , year = "1979" + , link = "https://doi.org/10.1093/ajcn/32.12.2627" + } + , { author = "Broad, William J." + , title = "NIH Deals Gingerly with Diet-Disease Link: Federal Dietary Guidelines for Disease Prevention Have Scant Support from NIH, but Pressure to Take a Stand Is Building" + , journal = "Science" + , year = "1979" + , link = "https://doi.org/10.1126/science.451563" + } + , { author = "Stamler, J., and F. H. Epstein" + , title = "Coronary Heart Disease: Risk Factors as Guides to Preventive Action" + , journal = "Preventive Medicine" + , year = "1972" + , link = "https://doi.org/10.1016/0091-7435(72)90076-x" + } + , { author = "Brody, Jane E." + , title = "Tending to Obesity, Inbred Tribe Aids Diabetes Study; Inbred Tribe Aids Research Into Obesity and Diabetes Samples Are Preserved 6,000 Involved in Study" + , journal = "The New York Times" + , year = "1980" + , link = "https://www.nytimes.com/1980/02/05/archives/tending-to-obesity-inbred-tribe-aids-diabetes-study-inbred-tribe.html" + } + , { author = "Glade, M. J." + , title = "Food, Nutrition, and the Prevention of Cancer: A Global Perspective. American Institute for Cancer Research/World Cancer Research Fund" + , journal = "Nutrition (Burbank, Los Angeles County, Calif.)" + , year = "1999" + , link = "https://doi.org/10.1016/s0899-9007(99)00021-0" + } + , { author = "Campbell, T. Colin, and Thomas M. Campbell II" + , title = "The China Study: Revised and Expanded Edition: The Most Comprehensive Study of Nutrition Ever Conducted and the Startling Implications for Diet, Weight Loss, and Long-Term Health" + , journal = "" + , year = "2016" + , link = "" + } + , { author = "China Study by T. Colin Campbell" + , title = "" + , journal = "" + , year = "" + , link = "https://www.westonaprice.org/book-reviews/the-china-study-by-t-colin-campbell/" + } + , { author = "Lichtenstein, Alice H., and Linda Van Horn" + , title = "Very Low Fat Diets" + , journal = "Circulation" + , year = "1998" + , link = "https://doi.org/10.1161/01.CIR.98.9.935" + } + , { author = "JAMA: The Journal of the American Medical Association" + , title = "1970: Vol 214 Index" + , journal = "American Medical Association" + , year = "1970" + , link = "http://archive.org/details/sim_jama_1970_214_index" + } + , { author = "McCollum, Elmer Verner" + , title = "The Newer Knowledge of Nutrition; the Use of Food for the Preservation of Vitality and Health" + , journal = "New York, The Macmillan company" + , year = "1919" + , link = "http://archive.org/details/newerknowledgeof00mcco_1" + } + , { author = "Kaplan, Robert M., and Michelle T. Toshima" + , title = "Does a Reduced Fat Diet Cause Retardation in Child Growth?" + , journal = "Preventive Medicine" + , year = "1992" + , link = "https://doi.org/10.1016/0091-7435(92)90004-2" + } + , { author = "Prentice, Andrew M., and Alison A. Paul" + , title = "Fat and Energy Needs of Children in Developing Countries123" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1253s" + } + , { author = "Knopp, R. H., et al." + , title = "One-Year Effects of Increasingly Fat-Restricted, Carbohydrate-Enriched Diets on Lipoprotein Levels in Free-Living Subjects" + , journal = "Proceedings of the Society for Experimental Biology and Medicine. Society for Experimental Biology and Medicine (New York, N.Y.)" + , year = "2000" + , link = "https://doi.org/10.1046/j.1525-1373.2000.22524.x" + } + , { author = "Willett, W. C., et al." + , title = "Dietary Fat and the Risk of Breast Cancer" + , journal = "The New England Journal of Medicine" + , year = "1987" + , link = "https://doi.org/10.1056/NEJM198701013160105" + } + , { author = "Rogers, A. E., and M. P. Longnecker" + , title = "Dietary and Nutritional Influences on Cancer: A Review of Epidemiologic and Experimental Data" + , journal = "Laboratory Investigation; a Journal of Technical Methods and Pathology" + , year = "1988" + , link = "" + } + , { author = "Chlebowski, Rowan T., et al." + , title = "Dietary Fat Reduction and Breast Cancer Outcome: Interim Efficacy Results from the Women’s Intervention Nutrition Study" + , journal = "Journal of the National Cancer Institute" + , year = "2006" + , link = "https://doi.org/10.1093/jnci/djj494" + } + , { author = "Prentice, Ross L., et al." + , title = "Low-Fat Dietary Pattern and Cancer Incidence in the Women’s Health Initiative Dietary Modification Randomized Controlled Trial" + , journal = "Journal of the National Cancer Institute" + , year = "2007" + , link = "https://doi.org/10.1093/jnci/djm159" + } + , { author = "Barbara V. Howard, et al." + , title = "Low-Fat Dietary Pattern and Weight Change over 7 Years: The Women’s Health Initiative Dietary Modification Trial" + , journal = "JAMA" + , year = "2006" + , link = "https://doi.org/10.1001/jama.295.1.39" + } + , { author = "World Health Organization" + , title = "Fats and Fatty Acids in Human Nutrition" + , journal = "" + , year = "" + , link = "https://www.who.int/news-room/events/detail/2008/11/10/default-calendar/fats-and-fatty-acids-in-human-nutrition" + } + , { author = "American Heart Association Nutrition Committee, et al." + , title = "Diet and Lifestyle Recommendations Revision 2006: A Scientific Statement from the American Heart Association Nutrition Committee" + , journal = "Circulation" + , year = "2006" + , link = "https://doi.org/10.1161/CIRCULATIONAHA.106.176158" + } + , { author = "W. C. Willett, et al." + , title = "Mediterranean Diet Pyramid: A Cultural Model for Healthy Eating" + , journal = "The American Journal of Clinical Nutrition" + , year = "1995" + , link = "https://doi.org/10.1093/ajcn/61.6.1402S" + } + , { author = "A. Ferro-Luzzi, et al." + , title = "The High-Fat Greek Diet: A Recipe for All?" + , journal = "European Journal of Clinical Nutrition" + , year = "2002" + , link = "https://doi.org/10.1038/sj.ejcn.1601393" + } + , { author = "H. K. Biesalski" + , title = "Meat and Cancer: Meat as a Component of a Healthy Diet" + , journal = "European Journal of Clinical Nutrition" + , year = "2002" + , link = "https://doi.org/10.1038/sj.ejcn.1601347" + } + , { author = "N. D. Ernst, et al." + , title = "Consistency between US Dietary Fat Intake and Serum Total Cholesterol Concentrations: The National Health and Nutrition Examination Surveys" + , journal = "The American Journal of Clinical Nutrition" + , year = "1997" + , link = "https://doi.org/10.1093/ajcn/66.4.965S" + } + , { author = "H. Esterbauer" + , title = "Cytotoxicity and Genotoxicity of Lipid-Oxidation Products" + , journal = "The American Journal of Clinical Nutrition" + , year = "1993" + , link = "https://doi.org/10.1093/ajcn/57.5.779S" + } + , { author = "G. E. Fraser" + , title = "Determinants of Ischemic Heart Disease in Seventh-Day Adventists: A Review" + , journal = "The American Journal of Clinical Nutrition" + , year = "1988" + , link = "https://doi.org/10.1093/ajcn/48.3.833" + } + , { author = "K. C. Hayes and Expert Panel" + , title = "Fatty Acid Expert Roundtable: Key Statements about Fatty Acids" + , journal = "Journal of the American College of Nutrition" + , year = "2010" + , link = "https://doi.org/10.1080/07315724.2010.10719843" + } + , { author = "M. B. Katan" + , title = "High-Oil Compared with Low-Fat, High-Carbohydrate Diets in the Prevention of Ischemic Heart Disease" + , journal = "The American Journal of Clinical Nutrition" + , year = "1997" + , link = "https://doi.org/10.1093/ajcn/66.4.974S" + } + , { author = "K. Katsouyanni, et al." + , title = "Reproducibility and Relative Validity of an Extensive Semi-Quantitative Food Frequency Questionnaire Using Dietary Records and Biochemical Markers among Greek Schoolteachers" + , journal = "International Journal of Epidemiology" + , year = "1997" + , link = "https://doi.org/10.1093/ije/26.suppl_1.s118" + } + , { author = "Timothy J. Key, et al." + , title = "Mortality in British Vegetarians: Results from the European Prospective Investigation into Cancer and Nutrition (EPIC-Oxford)" + , journal = "The American Journal of Clinical Nutrition" + , year = "2009" + , link = "https://doi.org/10.3945/ajcn.2009.26736L" + } + , { author = "B. Koletzko, et al." + , title = "Dietary Fat Intakes in Infants and Primary School Children in Germany" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1392s" + } + , { author = "L. A. Moreno, et al." + , title = "Dietary Fat Intake and Body Mass Index in Spanish Children" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1399s" + } + , { author = "M. Murata" + , title = "Secular Trends in Growth and Changes in Eating Patterns of Japanese Children" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1379s" + } + , { author = "R. Uauy, et al." + , title = "Fat Intake during Childhood: Metabolic Responses and Effects on Growth" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1354s" + } + , { author = "R. M. Krauss, and D. M. Dreon" + , title = "Low-Density-Lipoprotein Subclasses and Response to a Low-Fat Diet in Healthy Men" + , journal = "The American Journal of Clinical Nutrition" + , year = "1995" + , link = "https://doi.org/10.1093/ajcn/62.2.478S" + } + , { author = "P. M. Kris-Etherton, et al." + , title = "Polyunsaturated Fatty Acids in the Food Chain in the United States" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/71.1.179S" + } + , { author = "M. R. L’Abbé, et al." + , title = "Approaches to Removing Trans Fats from the Food Supply in Industrialized and Developing Countries" + , journal = "European Journal of Clinical Nutrition" + , year = "2009" + , link = "https://doi.org/10.1038/ejcn.2009.14" + } + , { author = "Mills, P. K., et al." + , title = "Cancer Incidence among California Seventh-Day Adventists, 1976-1982" + , journal = "The American Journal of Clinical Nutrition" + , year = "1994" + , link = "https://doi.org/10.1093/ajcn/59.5.1136S" + } + , { author = "Oliver, M. F." + , title = "It Is More Important to Increase the Intake of Unsaturated Fats than to Decrease the Intake of Saturated Fats: Evidence from Clinical Trials Relating to Ischemic Heart Disease" + , journal = "The American Journal of Clinical Nutrition" + , year = "1997" + , link = "https://doi.org/10.1093/ajcn/66.4.980S" + } + , { author = "Serra-Majem, L., et al." + , title = "How Could Changes in Diet Explain Changes in Coronary Heart Disease Mortality in Spain? The Spanish Paradox" + , journal = "The American Journal of Clinical Nutrition" + , year = "1995" + , link = "https://doi.org/10.1093/ajcn/61.6.1351S" + } + , { author = "Simell, O., et al." + , title = "Special Turku Coronary Risk Factor Intervention Project for Babies (STRIP)" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1316s" + } + , { author = "Troiano, R. P., et al." + , title = "Energy and Fat Intakes of Children and Adolescents in the United States: Data from the National Health and Nutrition Examination Surveys" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.5.1343s" + } + , { author = "Blackburn, H." + , title = "The Low Risk Coronary Male" + , journal = "The American Journal of Cardiology" + , year = "1986" + , link = "https://doi.org/10.1016/0002-9149(86)90262-6" + } + , { author = "Kushi, Lawrence, and Edward Giovannucci" + , title = "Dietary Fat and Cancer" + , journal = "The American Journal of Medicine" + , year = "2002" + , link = "https://doi.org/10.1016/s0002-9343(01)00994-9" + } + , { author = "Hooper, Lee, et al." + , title = "Flavonoids, Flavonoid-Rich Foods, and Cardiovascular Risk: A Meta-Analysis of Randomized Controlled Trials" + , journal = "The American Journal of Clinical Nutrition" + , year = "2008" + , link = "https://doi.org/10.1093/ajcn/88.1.38" + } + , { author = "Hui, Chang, et al." + , title = "Flavonoids, Flavonoid Subclasses and Breast Cancer Risk: A Meta-Analysis of Epidemiologic Studies" + , journal = "PloS One" + , year = "2013" + , link = "https://doi.org/10.1371/journal.pone.0054318" + } + , { author = "Liu, Yu-Jian, et al." + , title = "Dietary Flavonoids Intake and Risk of Type 2 Diabetes: A Meta-Analysis of Prospective Cohort Studies" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2014" + , link = "https://doi.org/10.1016/j.clnu.2013.03.011" + } + , { author = "Woo, Hae Dong, and Jeongseon Kim" + , title = "Dietary Flavonoid Intake and Smoking-Related Cancer Risk: A Meta-Analysis" + , journal = "PloS One" + , year = "2013" + , link = "https://doi.org/10.1371/journal.pone.0075604" + } + , { author = "Baum, Seth J., et al." + , title = "Fatty Acids in Cardiovascular Health and Disease: A Comprehensive Update" + , journal = "Journal of Clinical Lipidology" + , year = "2012" + , link = "https://doi.org/10.1016/j.jacl.2012.04.077" + } + , { author = "Ruiz-Canela, Miguel, and Miguel A. Martínez-González" + , title = "Olive Oil in the Primary Prevention of Cardiovascular Disease" + , journal = "Maturitas" + , year = "2011" + , link = "https://doi.org/10.1016/j.maturitas.2010.12.002" + } + , { author = "de Lorgeril, M., et al." + , title = "Mediterranean Alpha-Linolenic Acid-Rich Diet in Secondary Prevention of Coronary Heart Disease" + , journal = "Lancet (London, England)" + , year = "1994" + , link = "https://doi.org/10.1016/s0140-6736(94)92580-1" + } + , { author = "Ness, A. R., et al." + , title = "The Long-Term Effect of Dietary Advice in Men with Coronary Disease: Follow-up of the Diet and Reinfarction Trial (DART)" + , journal = "European Journal of Clinical Nutrition" + , year = "2002" + , link = "https://doi.org/10.1038/sj.ejcn.1601342" + } + , { author = "Kris-Etherton, P., et al." + , title = "AHA Science Advisory: Lyon Diet Heart Study. Benefits of a Mediterranean-Style, National Cholesterol Education Program/American Heart Association Step I Dietary Pattern on Cardiovascular Disease" + , journal = "Circulation" + , year = "2001" + , link = "https://doi.org/10.1161/01.cir.103.13.1823" + } + , { author = "Singh, R. B., et al." + , title = "Randomised Controlled Trial of Cardioprotective Diet in Patients with Recent Acute Myocardial Infarction: Results of One Year Follow Up" + , journal = "BMJ (Clinical Research Ed.)" + , year = "1992" + , link = "https://doi.org/10.1136/bmj.304.6833.1015" + } + , { author = "Singh, R. B., et al." + , title = "An Indian Experiment with Nutritional Modulation in Acute Myocardial Infarction" + , journal = "The American Journal of Cardiology" + , year = "1992" + , link = "https://doi.org/10.1016/0002-9149(92)90786-x" + } + , { author = "White, Caroline" + , title = "Suspected Research Fraud: Difficulties of Getting at the Truth" + , journal = "BMJ" + , year = "2005" + , link = "https://doi.org/10.1136/bmj.331.7511.281" + } + , { author = "Soman, C. R." + , title = "Indo-Mediterranean Diet and Progression of Coronary Artery Disease" + , journal = "Lancet (London, England)" + , year = "2005" + , link = "https://doi.org/10.1016/S0140-6736(05)67014-6" + } + , { author = "Al-Marzouki, Sanaa, et al." + , title = "Are These Data Real? Statistical Methods for the Detection of Data Fabrication in Clinical Trials." + , journal = "BMJ (Clinical Research Ed.)" + , year = "2005" + , link = "https://doi.org/10.1136/bmj.331.7511.267" + } + , { author = "Smith, Jane, and Fiona Godlee" + , title = "Investigating Allegations of Scientific Misconduct." + , journal = "BMJ (Clinical Research Ed.)" + , year = "2005" + , link = "https://doi.org/10.1136/bmj.331.7511.245" + } + , { author = "Horton, Richard" + , title = "Expression of Concern: Indo-Mediterranean Diet Heart Study." + , journal = "Lancet (London, England)" + , year = "2005" + , link = "https://doi.org/10.1016/S0140-6736(05)67006-7" + } + , { author = "Serra-Majem, Lluís, et al." + , title = "Scientific Evidence of Interventions Using the Mediterranean Diet: A Systematic Review." + , journal = "Nutrition Reviews" + , year = "2006" + , link = "https://doi.org/10.1111/j.1753-4887.2006.tb00232.x" + } + , { author = "Singh, Ram B., et al." + , title = "Effect of an Indo-Mediterranean Diet on Progression of Coronary Artery Disease in High Risk Patients (Indo-Mediterranean Diet Heart Study): A Randomised Single-Blind Trial." + , journal = "Lancet (London, England)" + , year = "2002" + , link = "https://doi.org/10.1016/S0140-6736(02)11472-3" + } + , { author = "Nordmann, Alain J., et al." + , title = "Meta-Analysis Comparing Mediterranean to Low-Fat Diets for Modification of Cardiovascular Risk Factors." + , journal = "The American Journal of Medicine" + , year = "2011" + , link = "https://doi.org/10.1016/j.amjmed.2011.04.024" + } + , { author = "Ferro-Luzzi, A., and F. Branca" + , title = "Mediterranean Diet, Italian-Style: Prototype of a Healthy Diet." + , journal = "The American Journal of Clinical Nutrition" + , year = "1995" + , link = "https://doi.org/10.1093/ajcn/61.6.1338S" + } + , { author = "Guberan, E." + , title = "Surprising Decline of Cardiovascular Mortality in Switzerland: 1951-1976." + , journal = "Journal of Epidemiology and Community Health" + , year = "1979" + , link = "https://doi.org/10.1136/jech.33.2.114" + } + , { author = "Aravanis, C." + , title = "The Classic Risk Factors for Coronary Heart Disease: Experience in Europe." + , journal = "Preventive Medicine" + , year = "1983" + , link = "https://doi.org/10.1016/0091-7435(83)90163-9" + } + , { author = "\"Reforming Food: How Trans Fats Entered and Exited the American Food System.\"" + , title = "" + , journal = "" + , year = "" + , link = "https://www.proquest.com/openview/c28f798b1072ff71722cc83a3e7c3ea6/1?pq-origsite=gscholar&cbl=18750" + } + , { author = "Schleifer, David" + , title = "The Perfect Solution. How Trans Fats Became the Healthy Replacement for Saturated Fats." + , journal = "Technology and Culture" + , year = "2012" + , link = "https://doi.org/10.1353/tech.2012.0018" + } + , { author = "Schleifer, David" + , title = "Reforming Food: How Trans Fats Entered and Exited the American Food System" + , journal = "" + , year = "" + , link = "https://www.proquest.com/openview/c28f798b1072ff71722cc83a3e7c3ea6/" + } + , { author = "Hornstra, G., and A. Vendelmans-Starrenburg" + , title = "Induction of Experimental Arterial Occlusive Thrombi in Rats." + , journal = "Atherosclerosis" + , year = "1973" + , link = "https://doi.org/10.1016/0021-9150(73)90028-2" + } + , { author = "Khosla, Pramod, and Kalyana Sundram" + , title = "A Supplement on Palm Oil--Why?" + , journal = "Journal of the American College of Nutrition" + , year = "2010" + , link = "https://doi.org/10.1080/07315724.2010.10719839" + } + , { author = "Hibbeln, J. R., and N. Salem" + , title = "Dietary Polyunsaturated Fatty Acids and Depression: When Cholesterol Does Not Satisfy." + , journal = "The American Journal of Clinical Nutrition" + , year = "1995" + , link = "https://doi.org/10.1093/ajcn/62.1.1" + } + , { author = "Schaefer, O." + , title = "Glycosuria and Diabetes Mellitus in Canadian Eskimos." + , journal = "Canadian Medical Association Journal" + , year = "1968" + , link = "" + } + , { author = "Phinney, S. D., et al." + , title = "Capacity for Moderate Exercise in Obese Subjects after Adaptation to a Hypocaloric, Ketogenic Diet." + , journal = "The Journal of Clinical Investigation" + , year = "1980" + , link = "https://doi.org/10.1172/JCI109945" + } + , { author = "Gordon, R. S., and A. Cherkes" + , title = "Unesterified Fatty Acid in Human Blood Plasma." + , journal = "The Journal of Clinical Investigation" + , year = "1956" + , link = "https://doi.org/10.1172/JCI103265" + } + , { author = "Westman, Eric C., et al." + , title = "Carbohydrate Restriction Is Effective in Improving Atherogenic Dyslipidemia Even in the Absence of Weight Loss." + , journal = "The American Journal of Clinical Nutrition" + , year = "2006" + , link = "https://doi.org/10.1093/ajcn/84.6.1549" + } + , { author = "Krauss, Ronald M., et al." + , title = "Separate Effects of Reduced Carbohydrate Intake and Weight Loss on Atherogenic Dyslipidemia." + , journal = "The American Journal of Clinical Nutrition" + , year = "2006" + , link = "https://doi.org/10.1093/ajcn/83.5.1025" + } + , { author = "Bistrian, B. R., et al." + , title = "Nitrogen Metabolism and Insulin Requirements in Obese Diabetic Adults on a Protein-Sparing Modified Fast" + , journal = "Diabetes" + , year = "1976" + , link = "https://doi.org/10.2337/diab.25.6.494" + } + , { author = "American Diabetes Association, et al." + , title = "Nutrition Recommendations and Interventions for Diabetes: A Position Statement of the American Diabetes Association" + , journal = "Diabetes Care" + , year = "2008" + , link = "https://doi.org/10.2337/dc08-S061" + } + , { author = "Yancy, William S., et al." + , title = "A Low-Carbohydrate, Ketogenic Diet versus a Low-Fat Diet to Treat Obesity and Hyperlipidemia: A Randomized, Controlled Trial" + , journal = "Annals of Internal Medicine" + , year = "2004" + , link = "https://doi.org/10.7326/0003-4819-140-10-200405180-00006" + } + , { author = "Shai, Iris, et al." + , title = "Weight Loss with a Low-Carbohydrate, Mediterranean, or Low-Fat Diet" + , journal = "The New England Journal of Medicine" + , year = "2008" + , link = "https://doi.org/10.1056/NEJMoa0708681" + } + , { author = "Schwarzfuchs, Dan, et al." + , title = "Four-Year Follow-up after Two-Year Dietary Interventions" + , journal = "The New England Journal of Medicine" + , year = "2012" + , link = "https://doi.org/10.1056/NEJMc1204792" + } + , { author = "Tirosh, Amir, et al." + , title = "Renal Function Following Three Distinct Weight Loss Dietary Strategies during 2 Years of a Randomized Controlled Trial" + , journal = "Diabetes Care" + , year = "2013" + , link = "https://doi.org/10.2337/dc12-1846" + } + , { author = "Shai, Iris, et al." + , title = "Dietary Intervention to Reverse Carotid Atherosclerosis" + , journal = "Circulation" + , year = "2010" + , link = "https://doi.org/10.1161/CIRCULATIONAHA.109.879254" + } + , { author = "Ben-Avraham, Sivan, et al." + , title = "Dietary Strategies for Patients with Type 2 Diabetes in the Era of Multi-Approaches; Review and Results from the Dietary Intervention Randomized Controlled Trial (DIRECT)" + , journal = "Diabetes Research and Clinical Practice" + , year = "2009" + , link = "https://doi.org/10.1016/S0168-8227(09)70008-7" + } + , { author = "Astrup, Arne, et al." + , title = "The Role of Reducing Intakes of Saturated Fat in the Prevention of Cardiovascular Disease: Where Does the Evidence Stand in 2010?" + , journal = "The American Journal of Clinical Nutrition" + , year = "2011" + , link = "https://doi.org/10.3945/ajcn.110.004622" + } + , { author = "Després, Jean-Pierre" + , title = "Bringing JUPITER down to Earth" + , journal = "Lancet (London, England)" + , year = "2009" + , link = "https://doi.org/10.1016/S0140-6736(09)60448-7" + } + , { author = "LaRosa, John C., et al." + , title = "Intensive Lipid Lowering with Atorvastatin in Patients with Stable Coronary Disease" + , journal = "The New England Journal of Medicine" + , year = "2005" + , link = "https://doi.org/10.1056/NEJMoa050461" + } + , { author = "Ray, Kausik K., et al." + , title = "Statins and All-Cause Mortality in High-Risk Primary Prevention: A Meta-Analysis of 11 Randomized Controlled Trials Involving 65,229 Participants" + , journal = "Archives of Internal Medicine" + , year = "2010" + , link = "https://doi.org/10.1001/archinternmed.2010.182" + } + , { author = "Castelli, W. P., et al." + , title = "HDL Cholesterol and Other Lipids in Coronary Heart Disease. The Cooperative Lipoprotein Phenotyping Study" + , journal = "Circulation" + , year = "1977" + , link = "https://doi.org/10.1161/01.CIR.55.5.767" + } + , { author = "Siri-Tarino, Patty W., et al." + , title = "Saturated Fat, Carbohydrate, and Cardiovascular Disease" + , journal = "The American Journal of Clinical Nutrition" + , year = "2010" + , link = "https://doi.org/10.3945/ajcn.2008.26285" + } + , { author = "Mozaffarian, Dariush" + , title = "The Great Fat Debate: Taking the Focus off of Saturated Fat" + , journal = "Journal of the American Dietetic Association" + , year = "2011" + , link = "https://doi.org/10.1016/j.jada.2011.03.030" + } + , { author = "Zelman, Kathleen" + , title = "The Great Fat Debate: A Closer Look at the Controversy-Questioning the Validity of Age-Old Dietary Guidance" + , journal = "Journal of the American Dietetic Association" + , year = "2011" + , link = "https://doi.org/10.1016/j.jada.2011.03.026" + } + , { author = "Willett, Walter C., et al." + , title = "The Great Fat Debate: Q & A" + , journal = "Journal of the American Dietetic Association" + , year = "2011" + , link = "https://doi.org/10.1016/j.jada.2011.03.031" + } + , { author = "Kachan, Diana, et al." + , title = "Nutrient Intake and Adherence to Dietary Recommendations among US Workers" + , journal = "Journal of Occupational and Environmental Medicine" + , year = "2012" + , link = "https://doi.org/10.1097/JOM.0b013e31823ccafa" + } + , { author = "Report of the Dietary Guidelines Advisory Committee on the Dietary Guidelines for Americans" + , title = "Report of the Dietary Guidelines Advisory Committee on the Dietary Guidelines for Americans" + , journal = "U.S. Department of Agriculture, Advisory Committee on the Dietary Guidelines for Americans" + , year = "2010" + , link = "https://centerforinquiry.org/wp-content/uploads/sites/33/quackwatch/dga_advisory_2010.pdf" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/EverettVegans.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/EverettVegans.elm new file mode 100755 index 0000000..8467d99 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/EverettVegans.elm @@ -0,0 +1,1678 @@ +module Config.Pages.Blogs.MainBlog.EverettVegans exposing (articleEverettVegans) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleEverettVegans : BlogArticle +articleEverettVegans = + { articleName = "A Case Study of Joseph Everett's Reading Comprehension" + , articleLink = Path.toString Path.Blog_Everettvegans + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "everettvegans" + , articlePublished = "May 1, 2023" + , articleBody = """ +Firstly, I'd like to thank all of the people who volunteered days of their time in order to make this article possible! + +Some time ago, the YouTube channel, [What I've Learned](https://www.youtube.com/@WhatIveLearned), release the video called "[Vegan diets don't work. Here's why](https://www.youtube.com/watch?v=MpxgZGnEF7E)", wherein the channel's host, [Joseph Everett](https://twitter.com/JEverettLearned), tells a cautionary tale regarding the health-related pitfalls of so-called "vegan" diets. In this article, Joseph will be exposed as the shameless fabulist that he is. Most of the references are taken out of context or cherry-picked, while others actually directly contradict the claims that they were cited to support. + +In order to save on characters, I'm forced to truncate my introduction. So, I'll just take this time to say that you, Joseph, are a complete sophist, and you should be utterly ashamed for misleading the millions of people who consume your content. The effort that it took to write this article is more than you deserve, but its contents are more than deserved by your viewers. Your viewers deserve the truth— not cringey narratives about maverick dentists and cave paintings. With that, let's begin. + +# NUTRIENTS THO + +**Claim #1 (**[**00:00**](https://youtu.be/MpxgZGnEF7E?t=1)**):** + +>_It’s well understood that each of these vitamins have many functions in the body, but what does this have to do with nice teeth or looking attractive? Well, research later confirmed that along with things like protein and calcium, these vitamins indeed work together to transport minerals to support proper formation of the bones. [[1](https://pubmed.ncbi.nlm.nih.gov/29138634/)][[2](https://pubmed.ncbi.nlm.nih.gov/33801011/)] And of course your facial structure which includes the dental arch depends on proper development of your facial bones._ + +This is incredibly unscientific evidence on this hypothesis. The potential for selection bias with this particular body of evidence is enormously high, and on multiple levels. Of course we do not want to assume bad faith on the part of the researcher himself, but no credible scientific establishment would consider this evidence to be anything above laughable on the hypothesis specified. The specified hypothesis is that vitamin K2 (presumably in conjunction with other fat soluble vitamins) is responsible for teeth being straight rather than crooked. + +It's not clear at all how the evidence presented even interacts with the hypothesis. These traditional peoples were not screened for vitamin K2 status or intake. There were no prospective analysis. No intake measurements. No biomarker measurements. Just storytelling. In fact, four years ago Joseph published a video that present a far more plausible hypothesis for the appearance of strong jaws and straight teeth in traditional populations eating traditional diets. In the video he cites [a researcher named Clark Spencer Larson from Ohio State University](https://youtu.be/zbzT00Cyq-g?t=591), who claims that stronger jaws and straighter teeth seen in ancestral populations are a consequence of the repetitive chewing of tough, fibrous plant material. + +There is also evidence that [straighter teeth tend to be more worn down in traditional populations](https://www.youtube.com/watch?v=ybRD4UPN3D4&t=505s), which supports the chewing hypothesis. [[3](https://www.aegisdentalnetwork.com/cced/2009/06/interdisciplinary-analysis-origins-of-dental-crowding-and-malocclusions-an-anthropological-perspective)] In fact, Joseph references the pictures from Weston A Price's Nutrition and Physical Degeneration as evidence for the chewing hypothesis. [He remarks that the straight teeth in the traditional populations appear more worn down](https://www.patreon.com/file?h=24534404&i=3265485). + +Has Joseph changed his view? It's unclear why, as this is a far more plausible hypothesis, and can actually subsume the vitamin K2 hypothesis. If vitamin K2 intake is a correlate for traditional diets, and traditional diets are more likely to be high in fibrous, tough plant foods, and straighter teeth tend to be more worn then crooked teeth, then the chewing hypothesis would appear to be more parsimonious. + +Also, if insufficiency of K2 and the other fat soluble vitamins are to blame for crowded teeth due to their role in bone formation, why is there no mention of any of these people have any other issues associated with those sorts of nutritional insufficiencies? Like rickets, blindness, poor skin, or even haemophilia? It doesn't make sense. + +**Claim #2 (**[**01:01**](https://youtu.be/MpxgZGnEF7E?t=61)**):** + +>_If eating zero animal foods improves health so much, why would a 2016 study find that 84% of vegans eventually quit their diet? [[4](https://faunalytics.org/a-summary-of-faunalytics-study-of-current-and-former-vegetarians-and-vegans/#:~:text=84%25%20of%20vegetarians%2Fvegans%20abandon,former%20vegetarians%2Fvegans%20was%20health)]_ + +First of all, the claim of 84% of vegans quitting is just blatantly incorrect according to his own citation, which found a 70% dropout rate for vegans. Second of all, this is a ridiculous question. People stop doing health promoting things for all sorts of reasons, and it probably would have been a good idea for him to read the goddamn reference instead of resorting to conspiracy theories. The study includes an inventory of explanations for participant recidivism, and [the craving of animal products only occurred in the minority of recidivists](https://faunalytics.org/wp-content/uploads/2016/02/Faunalytics-Study-of-Current-and-Former-Vegetarians-and-Vegans-%E2%80%93-Secondary-Findings-.pdf). + +![][image1] +[image1]: /blog/everettvegans/image1.png + +Furthermore the study includes a table of motivations for pursuing veganism. Only a measly 1-3% of participants had motivations that were purely ethical in nature. While most motivations were health related. So, it seems like people are generally going on plant-based diets for health related reasons, and abandoning the diets without generally suffering health related costs. This isn't the only reason the question is stupid. Plenty of health promoting behaviours have high recidivism rates, such as exercise. + +The Faunalytics study [from the previous year](https://faunalytics.org/wp-content/uploads/2015/06/Faunalytics_Current-Former-Vegetarians_Full-Report.pdf) actually explicitly stated that health did not present a noticeable difficulty for study participants, with the exception of vitamin B12 monitoring. Very few people actually reported any health issues at all, and it's not clear how many of them were actually supplementing B12. + +The study had 54 current vegans and 129 former vegans. Of those 129 former vegans, 123 gave reasons. Of those 123, 104 reported no health issues. Of the remaining 19, 7 had no health issues, but rather just "felt" like they weren't getting enough nutrients or were concerned for no particular reason. One seemed to quit because they doubted the benefits. Only 11 reported actual health issues. + +Of those 11, 6 were vague like "sick", "lightheaded", "not healthy", and "health issues", and doctors and/or dietitians were rarely, or never, involved to actually confirm that the diet was the issue. In conclusion, if we're being outrageously generous to his position, 6% of those who tried a vegan diet reported any health issues at all. But as we discussed above, it's unclear if this is just a result of poor supplementation practices. + +It's not clear why we should accept the implication that a diet is healthy if and only if it can be generally adhered to. There are many examples of diets with poor adherence rates that I don't think Joseph would sign off on being unhealthy, and there are plenty of examples of diets with high adherence rates that Joseph wouldn't consider healthy at all. + +![][argument1] +[argument1]: /blog/everettvegans/argument1.png + +**Claim #3 (**[**04:59**](https://youtu.be/MpxgZGnEF7E?t=299)**):** + +>_So it’s interesting to observe that the Dutch are competing with Montenegrins for the tallest people in the world title (animation source: USA data) and they happen to be 2nd and 3rd on the list for the most milk consumed per capita in the world. A study of 105 countries in the journal Economics & Human Biology noted that animal food, particularly dairy, most correlated with increases in height. [[5](https://pubmed.ncbi.nlm.nih.gov/26948573/)]_ + +This is actually the first claim where he actually starts citing peer reviewed research and not just the 1930s equivalent of a blog article with no citations. + +Firstly, this is an ecological fallacy. Essentially, Joseph is looking at two temporally concurrent variables and implying a causal relationship. Specially, the research that Joseph cites does not look at individuals, their animal food/dairy consumption in childhood, nor their attained height in adulthood. These heights aren't compared to height projections or heights of peers consuming different diets. + +Instead, this research is just looking at the average height of each entire country and the average intake of said foods. Such studies are susceptible to something called the [ecological fallacy](https://en.wikipedia.org/wiki/Ecological_fallacy), meaning what applies on a country average level may not apply on an individual level. + +![][image2] +[image2]: /blog/everettvegans/image2.png + +In this graph on average as X increases, so does Y. But if you look at each cluster separately, as X increases Y decreases. A real life example of this is the relationship between smoking and longevity. + +![][image3] +[image3]: /blog/everettvegans/image3.png + +If you plot each country's smoking rate and lifespan you'll see that [the more people smoke the longer they live](https://www.thefunctionalart.com/2018/07/visualizing-amalgamation-paradoxes-and.html). This correlation, of course, breaks at an individual level. + +I very much doubt that Joseph would approve of this ecological study. [[6](https://pubmed.ncbi.nlm.nih.gov/1140864/)] + +![][image4] +[image4]: /blog/everettvegans/image4.png + +The study makes no attempt to adjust for socioeconomic or genetic differences in the countries involved. Richer countries tend to have access to more expensive sources of calories, but also have fewer infections and cleaner water, among many other things conducive to better health. They also tend to eat meat. This doesn't tell us what's happening within each of those populations across the spectrum of meat consumption. + +Also it's likely that the reason animal protein correlates strongly with height in Joseph's reference is that it's the main source of protein calories in most diets around the world. For example, in Europe where they essentially consume no plant protein (most plant foods consumed lack significant protein), highly correlated protein (defined by the authors as milk, eggs, pork, beef and potatoes), as well as animal protein and total meat associate more with height than total calories and total protein. If you look at Asia where people eat more plants protein, you'll see total protein and total calories correlate better. Also, inequality adjusted human development index unsurprisingly was more strongly correlated with height than any food. + +**Claim #4 (**[**05:30**](https://youtu.be/MpxgZGnEF7E?t=330)**):** + +>_I recently interviewed Yovana Mendoza who had essentially made a career based around her vegan lifestyle when she had health issues she tried her best to solve them while staying on the diet, using all kinds of supplements and troubleshooting strategies but she eventually had to prioritize her health and quit the diet after 6 years … even though she had every motivation to keep being vegan. Reintroducing animal foods fixed her health issues. Yovana’s case is a peak at how complex it can be to replace animal foods in your diet._ + +Yovana Mendoza was a so-called "raw" vegan. As you can see from the picture he flashed, she was on a meme starvation diet of only raw food averaging an abysmal ~1000 calories a day. + +![][image5] +[image5]: /blog/everettvegans/image5.png + +Raw food diets are associated with many stupid beliefs revolving around self-purification, including extensive fasting periods (49% of study participants), not supplementing B12 (7% took any supplement at all), and enemas (16% of them). [[7](https://pubmed.ncbi.nlm.nih.gov/10436305/)] + +Some believe once you are "purified" you lose your period which is a sign you're clean, for example. As you approach 100% raw food, pretty much half of them complain of amenorrhea, probably due to insufficient calories. + +![][image6] +[image6]: /blog/everettvegans/image6.png + +As you can see, raw diets associate with considerably low BMI scores. + +![][image7] +[image7]: /blog/everettvegans/image7.png + +Rawvana also [made a video](https://youtu.be/hMO4m0rZAB8?t=27) telling us how since she's gotten healthier on her raw vegan diet her "eyes have become greener", so I don't know how much stock we should put in her health advice, Joseph. + +As illustrated by [Anna's analysis](https://youtu.be/iqDK_0iaVCE), this seems to be an extremely common pipeline. People go raw vegan, influenced by social media morons, they don't eat enough calories, because their diets aren't formulated correctly, and then they return to some omnivorous diet and claim that veganism failed them. No. Veganism didn't fail you. You played a stupid game and you won a stupid prize. + +**Claim #6 (**[**06:18**](https://youtu.be/MpxgZGnEF7E?t=378)**):** + +>_Take Vitamin A - you might think the average vegan has way more vitamin A because it comes from vegetables like carrots or sweet potatoes - but that’s not vitamin A, that’s beta carotene that has to be converted into vitamin A …and the conversion rate is very poor - about 12:1. [[8](https://pubmed.ncbi.nlm.nih.gov/20237064/)] Though it’s more like 21:1 when you account for the hampering effect of fiber in the diet. [[9](https://pubmed.ncbi.nlm.nih.gov/12221270/)] Not only that, the more you eat, the worse the conversion rate becomes. Further, depending on your genes, your conversion rate could be even lower - [this is the case for me](https://www.youtube.com/watch?v=gWiC4ZCS55Y&t=421s) and for potentially as much as 37% of people of European descent (See also, 57% lower. [[101](https://pubmed.ncbi.nlm.nih.gov/35571879/)][[1](https://pubmed.ncbi.nlm.nih.gov/35571879/)[12](https://pubmed.ncbi.nlm.nih.gov/19103647/)] Actual vitamin A only comes from animal foods or synthetic supplements._ + +Firstly, let's cut to the chase. Is there a risk of vitamin A deficiency among those only relying on non-retinol sources of vitamin A? That's the question. We'll get to the mechanistic speculation, and why it's so dumb, but for now let's focus on actual outcomes. To my knowledge there are two studies assessing retinol status in vegans after excluding those who supplement. [[13](https://pubmed.ncbi.nlm.nih.gov/24394311/)][[14](https://pubmed.ncbi.nlm.nih.gov/26502280/)] + +Both studies showed that vegans had statistically significantly lower retinol status than omnivores, but the differences were not clinically significant. We're free to speculate all we want, but at the end of the day there is no reason to believe that the differences in status actually amount to any differences in expected health outcomes between the two groups. + +Now, let's get to the mechanistic fuckery. Joseph claims that there are genetic differences in carotenoid to retinol conversion capacity that could lead to deficiency in some who are relying on carotenoids over retinol. Right off the bat, Joseph's own reference contradicts his claim, as the entire variance in the population sample had fasting plasma retinol within the reference range. + +![][image8] +[image8]: /blog/everettvegans/image8.png + +> _...the lowest plasma concentration was 963.8 nM, indicating that all volunteers had adequate serum vitamin A concentrations._ + +Even the people with the worst impairments maintain adequate retinol status, despite only getting an average of a measly 133mcg/day of retinol. The only thing that changes is that the ratio of beta-carotene to retinol is increased based on the severity of the impairment in conversion rates. That's all. + +But, we can take this a step further and actually see what happens when we try to correct vitamin A deficiency using dietary carotenoids in human subjects. [[15](https://pubmed.ncbi.nlm.nih.gov/15883432/)][[16](https://pubmed.ncbi.nlm.nih.gov/17413103/)][[17](https://pubmed.ncbi.nlm.nih.gov/9808223/)][[18](https://pubmed.ncbi.nlm.nih.gov/10584052/)][[19](https://pubmed.ncbi.nlm.nih.gov/15321812/)][[20](https://pubmed.ncbi.nlm.nih.gov/16210712/)] On the whole, eating foods rich in carotenoids reliably improves and/or normalizes vitamin A status. Even foods that have been genetically engineered to have higher levels of carotenoids reliably improve vitamin A status in humans. [[21](https://pubmed.ncbi.nlm.nih.gov/19369372/)] In fact, a newer study published in 2020 found no differences in retinol status between BCO1 genotypes in a population consuming low amounts of preformed retinol. [[22](https://pubmed.ncbi.nlm.nih.gov/32560166/)] + +Let me explain what's happening here. These genetic variants likely aren't changing the total amount of retinol converted from carotenoids. Likely the only thing that's happening here is that the conversion curve is changing shape without a change to the area under that curve. Meaning that across these genetic variants, people are capable of converting the same amount of retinol from carotenoids, but the rate at which they make that conversion is slightly longer in those with the so-called impairments. In my opinion, this is the most parsimonious way to reconcile the data. + +As a side note, the only cases of vitamin A toxicity (hypervitaminosis A) from whole foods that I could find in the literature involved the consumption of preformed retinol from liver. [[23](https://pubmed.ncbi.nlm.nih.gov/25850632/)][[24](https://pubmed.ncbi.nlm.nih.gov/21902932/)][[25](https://pubmed.ncbi.nlm.nih.gov/10424294/)][[26](https://pubmed.ncbi.nlm.nih.gov/31089689/)][[27](https://pubmed.ncbi.nlm.nih.gov/3655980/)] In one case, a child died from consuming chicken liver pate sandwiches. I could find no case reports of such vitamin A toxicity related to carotenoids. + +**Claim #7 (**[**06:58**](https://youtu.be/MpxgZGnEF7E?t=418)**):** + +>_A 2021 study found vegan Finnish children had insufficient vitamin A and a 2020 German study found vegans to have a lower vitamin A level than omnivores. [[28](https://pubmed.ncbi.nlm.nih.gov/33471422/)][[29](https://pubmed.ncbi.nlm.nih.gov/33161940/)]_ + +In both studies, vegan participants had lower vitamin A status, but again, this seemed to be clinically irrelevant. With the authors of the Finnish study concluding that none of the vegans could be classified as deficient, and the the authors of the German study reporting that Vitamin A status among vegans was still well within the reference range. + +We should be starting to see a pattern here, and this should lead us to question the utility of having higher vitamin A status as a consequence of consuming preformed retinol. Even if we granted that you will boast a higher vitamin A status as an omnivore, it's not clear that possessing a higher status actually has any clinical benefit or advantage. I don't know why it would be desirable. Is Joseph prepared to resign himself to affirming that more is simply better? Shall we coin this the Everett Fallacy? + +**Claim #8 (**[**07:26**](https://youtu.be/MpxgZGnEF7E?t=446)**):** + +>_Vitamin D is pretty much only found in animal foods with some exceptions like some mushrooms and some algae. Some people can get enough vitamin D from the sun, but if you live at latitudes above 37 degrees, your skin barely makes any vitamin D from the sun except for in summer. [[30](https://www.health.harvard.edu/staying-healthy/time-for-more-vitamin-d#:~:text=Except%20during%20the%20summer%20months,risk%20for%20vitamin%20D%20deficiency)]_ + +This is one of those times where I won't say anything I will just let his citation speak for itself. + +>_Lack of sun exposure would be less of a problem if diet provided adequate vitamin D. But there aren't many vitamin D–rich foods (see chart, below), and you need to eat a lot of them to get 800 to 1,000 IU per day...For these and other reasons, a surprising number of Americans — more than 50% of women and men ages 65 and older in North America — are vitamin D–deficient, according to a consensus workshop held in 2006._ + +His own citation notes that a massive portion of the population is deficient and the treatment for that is sun exposure or supplementation, not goose liver. + +**Claim #9 (**[**07:40**](https://youtu.be/MpxgZGnEF7E?t=460)**)** + +>_A 2016 Finnish study found vegans’ levels of vitamin D to be 34% lower than omnivores. [[31](https://pubmed.ncbi.nlm.nih.gov/26840251/)]_ + +They had lower intake and therefore lower levels. According to Joseph's previous reference, they should probably be supplementing more. + +**Claim #10 (**[**07:52**](https://youtu.be/MpxgZGnEF7E?t=472)**):** + +>_Unless you’re eating fermented foods, you’ll only find vitamin K2 in animal foods. The richest sources of K2 are going to be animal livers (especially goose liver), egg-yolks, hard cheese and full-fat dairy. Unfortunately New York City made it illegal for schools to serve whole milk in 2006. [[32](https://www.politifact.com/factchecks/2021/jun/07/lorraine-lewandrowski/whole-milk-prohibited-being-offered-new-york-schoo/)] The fermented soybean dish natto does in fact have a ton of K2 and sauerkraut has some too. Vitamin K2 helps put calcium into the right places like your bones and keeps it out of your heart which is thought to be one reason higher vitamin K2 strongly correlated with reduced risk of heart disease. [[33](https://pubmed.ncbi.nlm.nih.gov/34785587/)][[34](https://pubmed.ncbi.nlm.nih.gov/28639365/)]_ + +Here's a quick intro for vitamin K2. There are many different vitamin K isomers (or vitamers). We have vitamin K1 from plants and vitamin K2, primarily from fermented foods or animal products. There is only one vitamin K1, but vitamin K2 has many forms, including MK4 and MK7, which have been studied most. The form of K2 you can not obtain from fermented foods is MK4, but it doesn't appear to be bioavailable at nutritional doses. + +First, we'll look at bioavailability of MK4. He mentions animal livers (especially goose liver), egg-yolks, hard cheese and full-fat dairy. I couldn’t find any study on bioavailability of MK4 from foods rather than supplements. But, we can look at studies with doses one could plausibly obtain from diet alone. In probably the best study on this subject, researchers assessed **420 μg of MK-4 compared to 420 μg of MK-7**. [[35](https://pubmed.ncbi.nlm.nih.gov/23140417/)] As you can see from this chart, the only reasonable way to obtain this is with goose liver. [[36](https://pubmed.ncbi.nlm.nih.gov/11356998/)] + +![][image9] +[image9]: /blog/everettvegans/image9.png + +The other things he recommended simply don’t have enough. To get this amount it would take **8.9 kilograms of hard cheese, 52.5 liters of whole milk, or 52.4 average eggs.** The amount of goose liver it would take to get this dose of MK-4 is roughly **115g of liver,** however this has **over 10,000μg of retinol, the upper limit is 3000μg** and hypervitaminosis A is no joke. + +But regardless, let’s say someone managed to eat this amount of MK-4 regularly. Is it actually absorbed? It wouldn't appear so. + +![][image10] +[image10]: /blog/everettvegans/image10.png + +At no time point after the oral administration of 420μg of MK4 is it actually detectable in the blood. + +In summary, Joseph suggests food items like hard cheese and whole milk for vitamin K2 when they have abysmal amounts that probably aren't even absorbed. Worth noting that the natto he dismissed contains MK7 which is actually bioavailable, as evidenced by the same reference. Natto also contains it in concentrations over **700 times that of hard cheese**, which is the richest source of MK7 out of the foods he listed. + +**Claim #11 (**[**08:25**](https://youtu.be/MpxgZGnEF7E?t=505)**):** + +>_Speaking of all these nutrients for the skeleton, a 2021 polish study found vegan children to have weaker bones and were 3cm shorter than their meat eating counterparts. [[37](https://pubmed.ncbi.nlm.nih.gov/33740036/)]_ + +What Joseph didn't mention was that 29% of the vegan children did not consume vitamin B12 supplements or fortified foods, and only 32.7% used vitamin D supplements. Those who did actually consume vitamins B12 and D had comparable B12 and D status to omnivores. It's entirely plausible, if not probable, that this high percentage of non-supplementing participants was enough to drag down the average for the entire group. + +I mention this because it's clear that a large chunk of the cohort was not actually supplementing vitamin B12 and vitamin D. Both of which are nutrients that are strongly associated with normal growth. There was also little to no consideration for other dietary variables, and the analysis itself is cross-sectional with extremely small sample-sizes. + +![][image11] +[image11]: /blog/everettvegans/image11.png + +![][image12] +[image12]: /blog/everettvegans/image12.png + +Perhaps also worth noting are the similar lean mass, lower fat mass, and preferable LDL-C and hs-CRP values of the vegans. But he didn't mention that. + +**Claim #12 (**[**08:27**](https://youtu.be/MpxgZGnEF7E?t=507)**):** + +>_A British study and a Dutch study also found vegan children to be shorter. [[38](https://pubmed.ncbi.nlm.nih.gov/3414589/)]_ + +Let's start with the British study. These results are trivially explainable by the lower caloric intakes for vegans in his reference. + +![][image13] +[image13]: /blog/everettvegans/image13.png + +Also, while the vegans tended to fall below the 50th percentile for weight, the vast majority experienced normal growth, and the lower weight (and in some cases height) may be attributable to the lower caloric intake. The authors actually take note of this, but Joseph didn't mention it. + +The authors also suggest that the lower fat intake may be the reason they had a lower caloric intake, and go on to state that dense fat sources can be important for children for that reason (eat your avocados, kids). They concluded that children can grow up to be "normal" and that there's no evidence of impairment to cognitive development. + +Just as a side note, it's also funny to mention that the vegan diets were more nutrient dense than the average omnivorous UK diet. Even more hilariously, they explicitly state that there are healthy and unhealthy versions of vegan diets and that clowns will run with the occasional case reports on unhealthy vegan kids fed **inappropriate** diets. These authors were calling out Joseph in 1988. + +On to the Dutch study. Firstly, the so-called "vegan" diet was actually a type of meme "vegan" diet called the macrobiotic diet. This diet is highly restrictive and often very low in protein. This is not representative of what a well-balanced "vegan" diet would look like. + +Thus far, the studies he cited either haven't supported his claim or provide clear reasons for why there may be differences in growth. With the reasons provided not being intractable characteristics of vegan diets themselves. He also left out the studies where we do see similar growth between vegan and omnivorous kids with adequate diets. + +In the Farm Study was a 1989 study involving children ages four months to ten years residing in a community in Tennessee. [[39](https://pubmed.ncbi.nlm.nih.gov/2771551/)] 75% of mothers were vegan through pregnancy and 73% of children were vegan since birth. These mothers consumed well balanced diets with fortified foods (soy milk and nutritional yeast), which they fortified themselves! + +> The Farm community was generally well informed regarding issues related to vegetarianism, including complementing different protein sources, for example, grains and legumes and nonanimal sources of vitamins and minerals. Until 1983, the population followed a vegan diet, with soybeans being their primary source of protein. Supplements of vitamins A, D, and B12 were added to the soy milk produced on The Farm. Nutritional yeast (containing vitamin B12) and other vitamin and mineral supplements were also used. In the fall of 1983, some members of the community introduced eggs and dairy products into their diets. + +Across vegan children, growth was skirting the 50th percentile on average. This is exactly where these growth trajectories should be. + +![][image14] +[image14]: /blog/everettvegans/image14.png + +Same for weight. + +![][image15] +[image15]: /blog/everettvegans/image15.png + +We also have the VeChi Diet Study. [[40](https://pubmed.ncbi.nlm.nih.gov/31013738/)] Vegan and omnivorous children had similar caloric intakes. Omnivores had the highest protein, fat, and added sugar intake, while vegans had the highest total carb and fibre intake. In fact, the vegans were still able to consume a median of 2.25g of protein per kg bodyweight. While there were a few outliers in each group, growth was generally very similar overall. + +![][image16] +[image16]: /blog/everettvegans/image16.png + +There are explanations for the children who may have been stunted or wasted, and they're nothing that is necessarily inherent to vegan diets themselves. These reasons include: short parents, inadequate caloric intake, exclusively breastfeeding longer than recommended (probably due to hippie vegan parents doing dumb hippie things). + +>_Regarding these eight children classified as stunted, two had very low reported energy intakes (534 kcal/day and 598 kcal/day, respectively), and both were exclusively breastfed >6 months (7 and 9 months, respectively). An overly long period of exclusively breastfeeding can result in an insufficient intake of complementary foods and inadequate low TEI because, after a certain age, human milk alone cannot supply energy and all nutrients in adequate amounts to meet a child’s requirements [71]. Furthermore, one of the two children as well as three other children classified as stunted had parents with a BH (mother: 161 cm, father: 170 cm) below the German average (167 cm and 180–181 cm of 25–55-year-old women or men, respectively) that might have influenced the child’s BH. The other child with low energy intake was also categorized as SGA, which is considered a risk factor for stunting [72]. Another stunted child was categorized as SGA, and its birthweight was only slightly above 2500 g (2545 g). The seventh child was exclusively breastfed for twelve months (the eighth child was breastfed for eight months), and it had parents with BHs (mother: 160 cm, father: 178 cm) below the German average._ + +We also have data on intake of micronutrients and fatty acids in the 1-3 year olds in this cohort. [[41](https://pubmed.ncbi.nlm.nih.gov/34855006/)] All diet groups had low iodine intake, and the vegans had the lowest intakes of saturated fat, cholesterol, and DHA (although omnivores had low intakes too), but higher intakes of ALA and LA. They also mention that vegan and vegetarian children had the more favourable intakes of several micronutrients and fatty acids. + +In addition to evaluating nutrient intake, they also measured status in 6-18 year olds. [[42](https://pubmed.ncbi.nlm.nih.gov/34069944/)] Ultimately, the results are very similar to the those of the VeChi Diet Study that was previously mentioned, with preferable blood lipids in the vegans. + +A further study on mothers consuming various dietary patterns supports that a vegan diet can support "normal and physiological growth" through pregnancy and the first year of life. Also of note, 95.2% (20/21) of the vegan mothers took supplements through pregnancy. [[43](https://www.minervamedica.it/en/journals/minerva-pediatrics/article.php?cod=R15Y9999N00A21041604)] + +So some of Joseph's own references suggest vegan diets can support growth and development, and that is consistent with other research where vegans are consuming a balanced and appropriately supplemented diet. + +**Claim #13 (**[**09:34**](https://youtu.be/MpxgZGnEF7E?t=574)**):** + +>_Most vegans know they need to supplement B12 which is very important for proper brain function. Yet, one study looking at B12 status in vegetarians and vegans found that 7% of vegetarians and 52% of vegans were not getting enough B12. [[44](https://pubmed.ncbi.nlm.nih.gov/20648045/)] However, in another study with a more sensitive testing method - they found a whopping 77% of vegetarians and 92% of vegans had insufficient B12 whereas only 11% of omnivores did. [[45](https://pubmed.ncbi.nlm.nih.gov/12816782/)] Perhaps these B12 supplements don’t work exactly like animal foods do. Also it can take years to deplete the body’s B12 store, so people can be lacking B12 for a while without realizing it._ + +Right off the bat, 81% of vegans did not supplement in the first study. In the second, the authors did not assess how many of them were supplementing, but we know 59% supplemented "B vitamins". + +Joseph then concludes (from two studies were the majority did not supplement B12) that B12 supplements "don’t work exactly like animal foods do". If Joseph wanted to know if B12 supplements work at all he could've simply read his previous reference, Elorinne, et al. (2016). [[31](https://pubmed.ncbi.nlm.nih.gov/26840251/)] Had he done so, he would have noticed that 91% of that cohort took B12 supplements, and as you'd expect they were not B12 deficient. + +If Joseph wanted to know if B12 supplements work differently than animal foods, he could turn his attention to this interventional study that found that fortified cereal was more effective at raising B12 than pork. [[46](https://pubmed.ncbi.nlm.nih.gov/31519167/)] + +![][image17] +[image17]: /blog/everettvegans/image17.png + +Also, various doses of cheapo, vanilla-ass cyanocobalamin rescue vitamin B12 deficiency in clinically deficient vegans. [[47](https://pubmed.ncbi.nlm.nih.gov/29499976/)] This is confirmed by clinically meaningful reductions in both methylmalonic acid and total homocysteine. If Joseph knows of any better biological correlates for B12 absorption and utilization, as well as evidence that they're uniquely affected by animal foods, I'd love to hear from him about it. + +![][image18] +[image18]: /blog/everettvegans/image18.png + +**Claim #14 (**[**11:38**](https://youtu.be/MpxgZGnEF7E?t=698)**):** + +>_...another possibility is the vegan diet has impaired digestion._ + +The term "digestion" here is so unclear and nebulous, that it is uncertain what exactly to look for in the literature in order to test the hypothesis. However, if we assume that the hypothesis is referring to any symptoms related to digestion, we should expect to see increased rates of digestion-related symptoms, as reported as adverse events, in any of the randomized controlled trials that have been done on so-called "vegan" diets. But we can find close to none, which calls into question whether or not this is even an effect, let alone a generalizable effect. + +**Claim #15 (**[**12:25**](https://youtu.be/MpxgZGnEF7E?t=745)**):** + +>_...many [vegans] do quit the diet because of health issues._ + +If "many" is meant to be some sort of generalization, then his claim is straightforwardly contradicted by a study discussed in one of his own references on vegan recidivism rates, the 2015 Faunalytics study. + +> Interestingly, health did not present a noticeable difficulty for study participants, with the exception of vitamin B12 monitoring. 2) Consider increasing awareness about the importance of B12: a far greater percentage of former (76%) than current (42%) vegetarians/vegans never had their B12 levels checked while they were adhering to the diet. + +His only evidence for this claim is a montage of ex-vegan YouTubers who already have a demonstrable history of lying to people's faces. What the fuck are we even doing here, Joseph? These people were telling their audiences that they had newfound health on a vegan diet, and now they are once again telling their audiences that they have newfound health, but on a non-vegan diet. Joseph expects us to believe them. I can only guess that's because he is an idiot and doesn't understand what evidence is. + +**Claim #16 (**[**13:21**](https://youtu.be/MpxgZGnEF7E?t=801)**):** + +>_A 2012 study found in 63 patients with constipation, reducing fiber intake improved symptoms but eating a zero fiber diet completely eliminated all symptoms. [[48](https://pubmed.ncbi.nlm.nih.gov/22969234/)]_ + +This is a category mistake. Constipation isn't indigestion. Digestion precedes stool formation and colonic transit. Also, there is no mention of vitamin B12 deficiency or its related symptoms among the subjects in the reference Joseph provided. It's not clear how this is interacting with the claim. + +I'll briefly entertain the tangent, though. The trial that Joseph references is not easily generalizable, because the subjects had idiopathic constipation. It's also not clear at all what this has to do with "vegan" diets. Additionally the researchers did not actually assess fibre intake. Fibre intake was assumed based on the researchers instructions to the subjects, which naturally is a very poor measurement to fibre intake. + +Meanwhile, we see very consistently that increased consumption of fibre associates with a decrease in bowel transit time and improving symptoms of constipation. [[49](https://pubmed.ncbi.nlm.nih.gov/26950143/)][[50](https://pubmed.ncbi.nlm.nih.gov/35816465/)] + +**Claim #17 (**[**13:46**](https://youtu.be/MpxgZGnEF7E?t=826)**):** + +>_As for B12, you need to have strong enough stomach acid to properly absorb it and dietary fiber is known to weaken the stomach acid. [[51](https://pubmed.ncbi.nlm.nih.gov/2823869/)][[52](https://www.tandfonline.com/doi/abs/10.3109/00365528709095891)][[53](https://pubmed.ncbi.nlm.nih.gov/6095709/)]_ + +For the former claim, there is no reference. But what Joseph is probably referring to here is the requirement for a lower stomach pH in digesting food normally in general. Without a sufficiently acidic stomach acid, it is true that vitamin B12 may not be adequately liberated from a given food matrix. + +However, this doesn't apply to supplements (as supplements do not have a food matrix that requires a particularly low pH stomach acid to digest), and therefore doesn't apply to "vegan" diets. Also, we can easily see from previously cited research that vegans can achieve and maintain normal B12 status on high fibre diets. + +In fact, you can even absorb B12 adequately and rescue frank B12 deficiency syndromes by shoving it directly up your ass. [[54](https://pubmed.ncbi.nlm.nih.gov/5924495/)] Sublingual B12 supplements are effective in rescuing B12 deficiency. [[55](https://pubmed.ncbi.nlm.nih.gov/14749150/)] Both of these methods bypass the stomach completely. + +**Claim #18 (**[**13:56**](https://youtu.be/MpxgZGnEF7E?t=836)**):** + +>_So the context matters - what else are you getting with the nutrients? For example, there are plenty of plant sources of iron, but plant foods like whole grains, legumes and nuts contain phytic acid that impairs iron absorption. [[56](https://pubmed.ncbi.nlm.nih.gov/12936958/)] Spinach is thought to be a great source of iron but you can only absorb 2% of it because of the oxalate in it. [[57](https://pubmed.ncbi.nlm.nih.gov/1745900/)]_ + +Once again, Joseph shows that he either doesn't read the studies he cites or ignores where they contradict him. From the first study: + +>_Iron deficiency anemia appears to be no more prevalent among vegetarian women than among nonvegetarian women...Thus, although several reports indicate that vegetarians in Western societies have lower iron stores and may have lower hemoglobin concentrations, they do not indicate a greater incidence of iron deficiency anemia...Lowering iron stores without increasing the risk of iron deficiency anemia may confer a health advantage when vegetarian diets are chosen from an abundant food supply._ + +Joseph further shows that he is really good at constructing strawmen. What official public health authority in any developed country actually recommends spinach as a significant source of iron? Regardless, it's also a non-sequitur that just because spinach has a particularly poor bioavailability of iron that there exist no vegan sources of iron with good bioavailability. There even exist other green vegetables with good bioavailability, such as broccoli and cabbage. [[58](https://pubmed.ncbi.nlm.nih.gov/31394334/)] + +**Claim #19 (**[**14:00**](https://youtu.be/MpxgZGnEF7E?t=840)**)** + +>_Then, where the heme-iron in animal foods is very easily absorbed, the non heme iron in plants and supplements is quite poorly absorbed. Two different literature reviews suggest that vegans are at greater risk for iron deficiency than omnivores [[59](https://pubmed.ncbi.nlm.nih.gov/28319940/)][[60](https://pubmed.ncbi.nlm.nih.gov/30783404/)]._ + +No citation was provided for this claim and he says it as if it follows logically from what he said beforehand. Which it doesn't. Phytic acid in isolation impairing iron absorption in some plant foods high in phytic acid having low bioavailability of iron also doesn't imply that iron is poorly absorbed from all plant sources. + +Firstly, despite whole wheat flour being higher in phytic acid than white wheat flour, it has better bioavailability of iron. [[61](https://pubmed.ncbi.nlm.nih.gov/10655952/)] Granted this is in animal models, but this is evidence Joseph has been known to accept in the past. + +Secondly, other compounds that are common in plant foods but are absent (or virtually absent) from animal foods may have pleiotropic effects that mitigate or even overcome the effect of phytates on iron absorption, with vitamin C probably being the most prominent example. In regards of counteracting phytic acid, 50mg (less than an orange worth) does more than 50g of meat. [[62](https://pubmed.ncbi.nlm.nih.gov/2911999/)] + +![][image19] +[image19]: /blog/everettvegans/image19.png + +It also doesn't follow that one needs to consume animal products to meet iron needs, which Joseph heavily implies. Increased intake through diet and/or supplementation are clearly possible. + +First of all, both the literature reviews Joseph cites are looking at vegetarians, not vegans. I thought his video was on so-called "vegan" diets, not vegetarianism. Even the authors of his own references disagree with his interpretation. Here's a quote from Pawlak, et al. (2017): + +>_Findings regarding individuals who adhere to specific vegetarian diet type, such as vegans, were underrepresented and thus, conclusions regarding iron status among such individuals were not possible._ + +And from another of Joseph's references, Pawlak, et al. (2018): + +>_Considering the limitations, it is reasonable to conclude that the findings are most likely not representative of the entire vegetarian populations nor are they representative of any one specific vegetarian subgroup. 3 of the studies were published in the 1990s and one in 1982. It is reasonable to assume that iron fortification practices have changed since the time of food availability has improved due to globalization. Consequently, this makes the generalization of the findings difficult._ + +So, what is the point in wrongly applying or generalizing these findings with already questionable external validity from vegetarians onto vegans? That being said, just because the studies Joseph cites don't appropriately support his claim does not imply that his claim is wrong. For that, we need to go deeper. + +There are three studies that were published before the two reviews that Joseph cited that differentiate between vegans and vegetarians, while also comparing them to omnivores with measurements of plasma ferritin. There are four that were published afterward. It would be valuable to go through them one by one. + +In Schüpbach, et al. (2017), omnivores had higher plasma ferritin, but there was a lower percentage of vegans than omnivores in the range of deficiency, while vegans had almost double the iron intake of omnivores. [[14](https://pubmed.ncbi.nlm.nih.gov/26502280/)] + +The more curious finding with respect to iron was that for omnivores and vegetarians, the correlation between iron intake and plasma ferritin was fairly strong and statistically significant (r = 0.247, p = 0.030; r = 0.331, p = 0.030, respectively), but not so for vegans (r = 0.168, p = 0.281). + +The more concerning finding outside of iron was that despite a similar zinc intake across groups almost half of vegans were below the normal range compared to just 10% of omnivores. However, almost 60% of omnivores had folate levels below the normal range as well. + +Vegans in Elorinne, et al. (2016) had much lower plasma ferritin than non-vegetarians despite higher intake. [[31](https://pubmed.ncbi.nlm.nih.gov/26840251/)] It's unclear whether there was a single subject with low ferritin and this result was not discussed anywhere in the text. However, there were funny sections about selenium in fertilizers and how a low LA intake might help vegans convert LNA to DHA. + +Less than half the vegan children in Desmond, et al. (2021) used B12 supplements, almost a third got neither B12 supplements nor B12 fortified foods. [[37](https://pubmed.ncbi.nlm.nih.gov/33740036/)] Under their second adjustment model, the vegan children had 25% lower ferritin levels. 30% of the vegan children had ferritin levels below the cut-off, compared to 13% of the omnivore children. 2% and 6% of vegan children had moderate and mild iron deficiency anemia, respectively, compared to none of the omnivore children. The authors were (rightfully) much more concerned about the differences in bone mineral content and B12 deficiency. They also get props for looking at cardiovascular risk factors in children. + +Another study, by Slywitch, et al. (2021), gets props for a 10 year long recruitment period and for differentiating between menstruating and non-menstruating women. [[63](https://pubmed.ncbi.nlm.nih.gov/34578841/)] However, for unknown reasons, these authors only differentiated between vegans and vegetarians for the analysis on BMI but not for ferritin. To be fair, they were more interested in how inflammation may mask iron deficiency, but still. It would have been nice to have that data. + +Weikert, et al. (2020) represents one of the better studies on the subject, because the groups were similar in their characteristics and all but one vegan were actually using supplements. [[29](https://pubmed.ncbi.nlm.nih.gov/33161940/)] Plasma iron and ferritin levels were on average lower in vegans than omnivores, but not statistically significantly so, with the vegans having a 50% higher iron intake. 11% of vegans showed signs of iron deficiency compared to 8% of omnivores. Vegans who substituted iron had higher average ferritin than omnivores who did not substitute iron. + +Another study by Alexy, et al. (2021) found statistically significantly lower plasma ferritin than omnivores despite 50% higher iron intake, but prevalence below the cut-off was called "low" by the authors and thrown into the supplemental. [[42](https://pubmed.ncbi.nlm.nih.gov/34069944/)] Weirdly, the authors were concerned about the high prevalence of B2 deficiency in all groups, using a cut-off of 199 µg/l. + +In Wilsen, et al. (1999), despite the 50% higher iron intake, the vegans had almost 50% lower serum ferritin than omnivores, with 20% falling below 12 ng/ml. [[64](https://pubmed.ncbi.nlm.nih.gov/10201799/)] The difference in hemoglobin between vegans and omnivores was also statistically significant. On the other hand, 20% of omnivores had ferritin levels elevated above 200 ng/ml, which is indicative of inflammation. + +In conclusion, even though Josephs citations don't support his claim, there is some truth to the matter. The literature is in unanimous agreement that iron in vegan diets has much lower bioavailability, but this is not due to phytates alone. Dietary fiber and polyphenols are important as well. Of course this is not enough to infer an outcome such as iron deficiency, let alone iron deficiency anemia, since vegans also have a much higher iron intake than omnivores. Furthermore, in many of the studies lower iron status is observed without a particularly increased risk of deficiency. + +Vegans, especially those who menstruate, might want to err on the side of caution by regularly getting their ferritin checked whenever they get their B12 checked, and then supplementing accordingly. Pretty much the same is true for vegetarians, or even omnivores for that matter. But what these studies show overall is that no matter their diet, people kind of suck at hitting reference ranges of biomarkers for all nutrients. + +# ANCESTRAL DIETS THO + +**Claim #20 (**[**14:30**](https://youtu.be/MpxgZGnEF7E?t=870)**):** + +>_Now before we continue, why should we assume a meat containing diet was the natural default for humans rather than a plant-based diet? Well, to get a wide variety of nutrients, vegans have to eat a huge variety of modern fruits and vegetables, but the fruits and vegetables early humans had access to were nothing like modern ones. Before cultivation, they had far less actually edible material and far more fiber and seeds. Paleoanthropologist Daniel Lieberman has said that the sweetest fruit available would have been no sweeter than a modern day carrot._ + +Previously having less edible material is trivially true of animal foods produced from modern animal agriculture. + +![][image20] +[image20]: /blog/everettvegans/image20.png + +**Claim #21 (**[**14:58**](https://youtu.be/MpxgZGnEF7E?t=898)**):** + +>_We have stable isotope studies finding we ate pretty much whatever meat we could get our hands on… our earliest art is cave paintings of hunts. Lastly, the brain is a disproportionately energy expensive organ, hogging 20% of our oxygen and calories. [[65](https://pubmed.ncbi.nlm.nih.gov/30872714/)][[66](https://pubmed.ncbi.nlm.nih.gov/12149485/)] Our guts (also energy expensive) shrank in size to allocate more resources to the brain. [[67](https://pubmed.ncbi.nlm.nih.gov/22174868/)] Thus, to fuel our big brains, the more energy efficient animal fat became favored over fibrous plants that took time and energy to chew and digest._ + +What point is Joseph trying to make here? We could try to formalize it, perhaps. + +![][argument2] +[argument2]: /blog/everettvegans/argument2.png + +**Claim #22 (**[**15:34**](https://youtu.be/MpxgZGnEF7E?t=934)**):** + +>_Most people are not aware that animal foods are packed with far more of a huge variety of nutrients, especially ones critical for brain function. This may have a role in why a 2021 study found people who don’t eat meat to have significantly higher risk of depression and anxiety. [[68](https://www.tandfonline.com/doi/full/10.1080/10408398.2020.1741505)]_ + +Again, in his typical style, the review Joseph linked contained only one randomized controlled trial and guess what that one trial showed. I'll quote the authors directly. + +>_Restricting meat, fish, and poultry improved some domains of short-term mood state in modern omnivores. To our knowledge, this is the first trial to examine the impact of restricting meat, fish, and poultry on mood state in omnivores._ + +Also, the authors overlooked a couple more trials, and didn't even mention them. I personally don't really see a reason for their exclusion. [[69](https://pubmed.ncbi.nlm.nih.gov/24524383/)][[70](https://pubmed.ncbi.nlm.nih.gov/20389060/)] They also rated the one RCT that they did include as "low quality" without providing a decent justification. In both trials, a benefit of so-called "vegan" diets was observed. + +Not only that, but in a 2022 systematic review including more studies, they note that higher quality studies and studies that can distinguish temporal relationships (such as RCTs and cohort studies) the effects of plant-based diets on mental health are either positive or non-significant. This review contained two RCTs, one on vegetarians (which can be interpretated as a meat-restriction intervention, so it is still relevant) which showed improved confusion and stress and one on vegans which showed improvements in depression indicators. + +Lastly, one of the two "high quality" studies in the review that Joseph cited evaluated the temporal relationship and suggests that the so-called vegan diet came **after** the development of mental health issues. [[71](https://pubmed.ncbi.nlm.nih.gov/22676203/)] When vegan, vegetarian, and semi-vegetarian diets are separated, meta-analyses suggest that semi-vegetarian diets are associated with higher prevalence of depression, while there is no statistically significant relationship between "vegan" or vegetarian diets and depression. [[72](https://pubmed.ncbi.nlm.nih.gov/33822140/)] + +Here is the prevalence of depression forest plot from that meta-analysis. + +![][image21] +[image21]: /blog/everettvegans/image21.png + +And mean depression scores. + +![][image22] +[image22]: /blog/everettvegans/image22.png + +Also, just for flavour, I'll point out that Joseph's reference was funded by the beef industry. + +>_This study was funded in part via an unrestricted research grant from the Beef Checkoff, through the National Cattlemen’s Beef Association. The sponsor of the study had no role in the study design, data collection, data analysis, data interpretation, or writing of the report._ + +**Claim #23 (**[**17:17**](https://youtu.be/MpxgZGnEF7E?t=1037)**):** + +>_The peoples Weston price studied had an intuitive understanding of the importance of nutrient dense foods - especially in pregnancy and childhood. Even without a nutrition label, they knew that certain animal foods encouraged proper robust growth._ + +There is an implicit claim here that animal foods have some kind of special importance for pregnancy and childhood. Ultimately, this is just an anecdote, barely distinguishable from an appeal to authority. So, let's throw one back from the American Dietetic Association: + +>_...appropriately planned vegetarian, including vegan, diets are appropriate for all stages of the life cycle, including pregnancy, lactation, infancy, and childhood._ + +To be clear, I think hinging the truth value of any claims about the health value of either co-called "vegan" diets or omnivorous diets on either of these opinions is incredibly cringe. It's just not clear to me why we can't just counter anecdotes with anecdotes. + +**Claim #24 (**[**18:12**](https://youtu.be/MpxgZGnEF7E?t=1092)**):** + +>_As Michael Pollan has argued in his book In Defense of Food - we frequently fall victim to this concept of 'nutritionism' that we don’t necessarily need whole foods, we just need their components._ + +Joseph, what does it mean to fall victim to a concept that is arguably true? Also, what do you mean by need? Is there some sort of necessity relation between whole foods and human health that you'd like to tell me about? + +# MOAR NUTRIENTS THO + +**Claim #25 (**[**18:34**](https://youtu.be/MpxgZGnEF7E?t=1114)**):** + +>_According to a 2012 study, despite taking prenatal supplements, 58% of pregnant woman had iron levels below normal. [[73](https://pubmed.ncbi.nlm.nih.gov/22113871/)]_ + +Joseph makes this claim to vaguely support the notion that we should not rely on supplements. However, the study cited to support this claim is a study of 19 pregnant women who were given labelled iron supplements in order to better characterise placental iron transport. It is not a large scale study of prevalence of iron deficiency in pregnant women who take prenatal supplements and therefore does not support the claim. + +On the contrary, a meta-analysis involving 43274 women shows that preventative daily oral iron supplementation reduces iron deficiency and iron deficiency anemia at term by 57% and 70%, respectively. [[74](https://pubmed.ncbi.nlm.nih.gov/26198451/)] + +**Claim #26 (**[**18:40**](https://youtu.be/MpxgZGnEF7E?t=1120)**):** + +>_90% of Americans are not getting enough [choline]. [[75](https://pubmed.ncbi.nlm.nih.gov/30853718/)]_ + +While it is clear that choline is an essential nutrient for proper liver, muscle, and brain function, and this study does estimate 90% of Americans to fall short of the adequate intake, the same study caveats that: + +>_Current intakes cannot be deemed inadequate based upon the [adequate intake] value alone. Although [adequate intakes] may be useful in guiding individual dietary plans, by definition, they are established when the evidence is insufficient to calculate an [estimated average requirement]. Therefore it is not possible to conclusively assess the risk of inadequacy in a population._ + +In short, the way Joseph presents this study is essentially fear-mongering. + +**Claim #27 (**[**18:47**](https://youtu.be/MpxgZGnEF7E?t=1127)**):** + +>_Choline from egg-yolk is better absorbed than choline from the common supplement, choline bitartrate. 150 calories of egg yolk (a little over 2 eggs) are enough to meet ones adequate choline intake._ + +While choline absorption from eggs is particularly high, choline intake in the American population is driven by egg intake and vegetarians have the lowest intakes among the US population, this does not support the notion that choline requirements cannot be met with proper supplementation. + +On the other hand, the same authors as from the paper before state that choline is a precursor to betaine, another 'methyl donor' largely present in plant foods such as wheat bran, beets and spinach. Higher intakes of betaine may spare some of the potential negative consequences of low choline intake among vegetarian populations. [[76](https://pubmed.ncbi.nlm.nih.gov/31385730/)] + +The main concern with choline deficiency is non-alcoholic fatty liver disease (NAFLD). If choline deficiency was an issue among vegans we'd expect a positive correlation between higher adherence to so-called "vegan" diets and NAFLD, an inverse correlation between consumption of animal foods and NAFLD, no change or an increase in liver enzymes for NAFLD patients being told to eat a "vegan" diet, and lower odds of NAFLD in people who eat more than 2 eggs per day (calculated from the calories from egg yolk needed to achieve adequate choline intake as given by Joseph (keep this number in mind). + +However, we see the opposite. Higher adherence to plant-based diets, especially healthful plant-based diets is associated with lower likelihood of fatty liver. [[77](https://pubmed.ncbi.nlm.nih.gov/30578029/)][[78](https://pubmed.ncbi.nlm.nih.gov/36235752/)] Higher consumption of animal foods correlated with a higher prevalence of NAFLD, while a higher consumption of grains and vegetables was correlated with a lower prevalence of NAFLD in Chinese Adults. [[79](https://pubmed.ncbi.nlm.nih.gov/26083112/)] Also, in a pilot study with 26 NAFLD patients who agreed to eat a vegan diet for six months 20 normalised their liver function tests, independently of their improvements in body weight. [[80](https://pubmed.ncbi.nlm.nih.gov/33548123/)] Meanwhile, in a case-control study of 951 patients who had been referred to hepatology clinics, those participants who consumed 2-3 eggs per week (not per day) had over 3-times higher odds of having NAFLD than those who consumed less than 2 eggs. [[81](https://pubmed.ncbi.nlm.nih.gov/28443155/)] + +It doesn't actually seem like consuming choline from animal products, particularly eggs, is even an effective means of avoiding NAFLD. This may be because animal-derived sources of choline are also typically high in fat, which would likely increase the choline requirement. + +Consuming more fats means activating the bodies lipid transport system, such as lipoproteins, to a greater degree. Phosphatidylcholine is one of the primary phospholipids that make up the membranes of lipoproteins. The more fat you eat, the more choline you require. This is basically why choline deficiency can cause fatty liver. + +So, even from a mechanistic standpoint, it would be unclear whether or not high fat animal-based diets would have an advantage over low fat plant-based diets. + +**Claim #28 (**[**19:02**](https://youtu.be/MpxgZGnEF7E?t=1142)**):** + +>_Dietary calcium reduces risk of heart attack, calcium supplements increase the risk of heart attack._ + +This claim, which Joseph bases off of a single study that he fails to cite in his substack document, is not supported by the larger literature. A multitude of meta-analyses of prospective cohort studies with combined sample sizes of hundreds of thousands of patients show an inverse correlation of total calcium intake and all-cause mortality in the short term (≤ 10 years), but no statistically significant correlation in the long term (> 10 years). This difference is likely explained by the positive correlation between both dietary and supplemental calcium with cardiovascular mortality, following a U-shaped dose response curve that becomes statistically significant for intakes exceeding ~1200 mg/day. [[82](https://pubmed.ncbi.nlm.nih.gov/25912278/)][[83](https://pubmed.ncbi.nlm.nih.gov/33382441/)][[84](https://pubmed.ncbi.nlm.nih.gov/25252963/)] + + +The only statistically significant finding of the only meta-analysis of RCTs of calcium supplementation was a 9% increased risk of coronary heart disease incidence, driven by dosages exceeding 1000 mg/day in men, but no statistically significant difference in all-cause mortality. [[85](https://www.tandfonline.com/doi/full/10.1080/07315724.2019.1649219)] + + +Therefore, calcium supplementation in a range similar to reasonable dietary intakes should be regarded as safe. It is also effective at improving bone mineral density in both preadolescent children and adults with osteoporosis. [[86](https://pubmed.ncbi.nlm.nih.gov/36808216/)][[87](https://pubmed.ncbi.nlm.nih.gov/36810543/)] + +**Claim #29 (**[**19:12**](https://youtu.be/MpxgZGnEF7E?t=1152)**):** + +>_Vegans have weaker bones and a 43% higher risk for fractures than omnivores. [[88](https://pubmed.ncbi.nlm.nih.gov/33222682/)]_ + +On average, vegans do in fact tend to have a lower bone mineral density and higher hip fracture risk compared to non-vegans. This alone is uninteresting, though. We know that, on average, omnivores have a higher BMI than vegans. In this study the difference in BMI between the groups was 2.4 points, in the general population it is more than double that. + +BMI has been shown to causally increase bone mineral density, which in turn has been shown to causally decrease risk of fracture. This effect mediation has been found independently in observational studies, and the differences in bone mineral density seem to align with what we would expect based on the differences in BMI. [[89](https://pubmed.ncbi.nlm.nih.gov/33784428/)][[90](https://pubmed.ncbi.nlm.nih.gov/36260985/)][[91](https://pubmed.ncbi.nlm.nih.gov/24862213/)][[92](https://pubmed.ncbi.nlm.nih.gov/15817133/)] + +![][image23] +[image23]: /blog/everettvegans/image23.png + +So the question that is interesting here, from a causal perspective, is whether vegans have weaker bones and higher risk of fracture independently of BMI and other important confounders such as calcium and vitamin D. Vitamin D has not been taken into account at all in the EPIC-Oxford study. BMI and dietary calcium were adjusted for, but only via categorisation, which is known to bias results when examining continuous variables with non-linear responses. [[93](https://pubmed.ncbi.nlm.nih.gov/17938055/)] + +In the Adventist Health Study 2, a better prospective cohort study (more recent, bigger sample size, higher proportion of vegans, longer follow-up, etc), the same question was investigated. When adjusting for all known confounders (and unlike EPIC-Oxford using a proper adjustment model), only female vegans who did not supplement calcium and vitamin D were at a higher risk of hip fractures. [[94](https://pubmed.ncbi.nlm.nih.gov/33964850/)] + +On the other hand, in another prospective cohort study, a higher ratio of animal protein to plant protein was found to increase rates of bone loss and fracture risk in postmenopausal women. [[95](https://pubmed.ncbi.nlm.nih.gov/11124760/)] + +# LABORATORY CATS THO + +**Claim #30 (**[**19:52**](https://youtu.be/MpxgZGnEF7E?t=1192)**):** + +>_Dr. Francis Pottenger had been trying to formulate a healthy diet for his laboratory cats ... This had Dr. Pottenger conduct a 10 year study to puzzle out the effects of cooked meat versus raw meat on hundreds of cats. He found that the cooked meat cats consistently had health problems but the problems were even worse for their kittens._ + +This might be interesting if we continued to have an incomplete understanding of feline nutrition. But this isn't 1932. In fact we have such a strong understanding of feline nutrition these days, that we can even formulate nutritionally complete animal-free diets for cats. + +There are plenty of plausible explanations for what happened to the cats. One plausible explanation is that cooking the meat destroyed the taurine content, as we understand that even mild temperatures can significantly reduce the taurine content of meat. [[96](https://pubmed.ncbi.nlm.nih.gov/22060873/)] Taurine is an essential nutrient in cats, and most of the symptoms described can be explained by a taurine deficiency. + +At present, our understanding of human nutrition is such that many can live for years on total parenteral nutrition (TPN), which is a type of intravenous total dietary replacement. There has been plenty of literature pointing out that TPN is associated with a wide range of negative health outcomes. But, it's difficult enough to disambiguate the effects of the TPN and the effects of whatever led to the patient requiring TPN to begin with, let alone the ostensible effects of unknown, spooky mystery meat nutrients. + +# JACC PAPER THO + +**Claim #31 (**[**25:05**](https://youtu.be/MpxgZGnEF7E?t=1505)**):** + +>_A huge 2020 review explained that saturated fat rich foods like whole-fat dairy or unprocessed meat themselves are not associated with an increase risk of heart disease and a 2022 systematic review found the previous evidence that shows unprocessed meat is linked to chronic diseases like cancer or heart disease to be far too weak to make the recommendation to reduce meat consumption._ + +The evidence used to buttress the JACC paper is the same sort of evidence that the BOP paper authors considers too weak to be reliable. Why even point it out if the evidence is shit? + +But, just for clarification, it is understood that whole fat dairy blunts the effect of saturated fats on blood lipids, due to its unique food matrix and the presence of something called the milk fat globule membrane. [[97](https://pubmed.ncbi.nlm.nih.gov/26016870/)] It is also understood that chocolate, while high in saturated fat, is high in a particular type of saturated fat called stearic acid. This particular saturated fat does not have a significant effect on blood lipids. [[98](https://pubmed.ncbi.nlm.nih.gov/32998517/)] + +This is just Joseph using these exceptions to the rule to obfuscate the effect that meat itself has on blood lipids, which is significant and replicable. [[99](https://pubmed.ncbi.nlm.nih.gov/31161217/)] Overall, we understand that the relationship between meat and heart disease is likely mediated by blood lipids, particularly LDL. Meat has a tendency to raise LDL, which just straightforwardly explains its strong association with heart disease. + +# NINA THEICHOLZ THO + +**Claim #32 (**[**25:44**](https://youtu.be/MpxgZGnEF7E?t=1544)**):** + +>_Yet, the anti-meat push has gotten so strong that as investigative journalist Nina Teicholz reveals, a recent Tufts University ranking system bogusly ranks Reese’s Peanut Butter Cups as healthier than Eggs, Cheese or Ground Beef._ + +These data don't represent any official guidelines. And I'm not sure how shitty input data and shitty methodology constitutes an "anti-meat push", honestly. But Joseph is not even representing the results of the Food Compass accurately. While it's true that on average animal products get a mediocre score, it's not true that they rank lower than snacks and desserts on average. [[100](https://pubmed.ncbi.nlm.nih.gov/37117986/)] What he presented in his video is an example of cherry picking. + +In fact, some animal foods rank higher than some plant foods, and in the aggregate there is non-inferiority between some animal foods and some plant foods. For example, seafood ranks particularly high, and is non-inferior to both fruits and vegetables. Both meat and dairy are also non-inferior to grains. If Joseph wants to make some kind of claim about a vegan conspiracy to suppress the health value of animal foods, he'll have to explain why seafood gets such a remarkable score here. + +![][image24] +[image24]: /blog/everettvegans/image24.png + +# EVEN MOAR NUTRIENTS THO + +**Claim #33 (**[**26:04**](https://youtu.be/MpxgZGnEF7E?t=1564)**):** + +>_It’s easy to assume that our understanding of individual nutrients is so advanced that we don’t need to rely on outdated meat-based diets - we can make replacements. But, while the amount of knowledge on nutrition that’s been accumulated is incredible, is it as complete as we assume?_ + +While this has the appearance of being a sound inductive sort of argument, it ultimately seems to be an argument that is halfway between an appeal to ignorance and some nutrition-focused flavour of Pascal's wager. I'm not sure why we should find this persuasive. If we don't know if there are any nutrients in meat that currently render meat indispensable, I would just be agnostic about the existence of those nutrients. + +**Claim #34 (**[**27:26**](https://youtu.be/MpxgZGnEF7E?t=1646)**):** + +>_It wasn’t even until 1998 that the nutrient Choline was recognized to be essential. Liver disease, atherosclerosis and neurological dysfunction taught us that Choline is pretty important. [[101](https://pubmed.ncbi.nlm.nih.gov/19906248/)]_ +> +>_A paper from just last year in 2022, suggests we underestimate the optimal intake of choline. [[102](https://pubmed.ncbi.nlm.nih.gov/34962672/)] This Cornell study found that seven-year-old children had better attention span if their mothers consumed twice the recommended amount of choline during their pregnancy._ + +It is known that prenatal DHA supplementation positively influences attention of infants and preschool children in a similar manner as found for choline in the Cornell study. [[103](https://pubmed.ncbi.nlm.nih.gov/27362506/)][[104](https://pubmed.ncbi.nlm.nih.gov/27604770/)] Additionally, there is high-quality emerging evidence that prenatal choline supplementation improves DHA status in pregnant women but not in lactating women (also no statistically significant difference for DHA concentration in breast milk) making it likely that the beneficial effect of prenatal choline supplementation on sustained attention is mediated through DHA. [[105](https://pubmed.ncbi.nlm.nih.gov/35575618/)][[106](https://pubmed.ncbi.nlm.nih.gov/33516092/)] + +Therefore, it may be prudent for both vegan and non-vegan women, especially those with certain PEMT genotypes, to supplement choline in addition to DHA during the second and third trimester of their pregnancies. [[107](https://pubmed.ncbi.nlm.nih.gov/36145177/)] + +**Claim #35 (**[**28:33**](https://youtu.be/MpxgZGnEF7E?t=1713)**):** + +>_If a mother can’t breastfeed or get donor milk, of course modern infant formula is basically a miracle. But even as a representative of Abbott, a leading infant formula manufacturer admits: “to mimic and replicate breast milk is not possible.” Yes, a newborn will have far more sensitive nutrient requirements than an adult or even a child, but it’s an example the difficulty of trying to make a complete replacement of a natural food._ + +The two scenarios are not analogous. In the case of vegan replacements for animal based foods, we generally don't see people on properly planned "vegan" diets experiencing negative health outcomes as a consequence. So, even if the association between formula feeding and negative health outcomes was strong, it's not clear how one functions as a plausible analogy for the other. + +**Claim #36 (**[**29:28**](https://youtu.be/MpxgZGnEF7E?t=1768)**):** + +>_...there is evidence that [insert non-essential animal nutrient here] has beneficial effects. [[108](https://pubmed.ncbi.nlm.nih.gov/32072297/)]_ + +In most studies wherein a benefit of these animal-derived compounds is found, supranutritional doses are given to subjects. Not only that, but the minimum doses required to achieve maximum benefits (when benefits are even present) is often well above and beyond what we could reasonably obtain from diet alone. This just leaves us asking why omnivore shouldn't be relying on supplements too. + +**Claim #37 (**[**29:38**](https://youtu.be/MpxgZGnEF7E?t=1778)**):** + +>_Just to look at two This 2002 paper argues that taurine may be essential in certain circumstances, and creatine supplementation has benefits for brain function in adults like improving memory, intelligence and mood and it reduces the negative effects of sleep deprivation. [[109](https://pubmed.ncbi.nlm.nih.gov/12514918/)][[110](https://pubmed.ncbi.nlm.nih.gov/29704637/)][[111](https://pubmed.ncbi.nlm.nih.gov/16416332/)] Further, creatine is transferred from the mother to her baby during pregnancy providing several benefits to the baby. [[112](https://pubmed.ncbi.nlm.nih.gov/24766646/)]_ + +The "certain circumstances" here were premature infants on total parenteral nutrition. The authors say this is due to them being unable to synthesize their own taurine at this stage and depending on breast milk. How is this related to vegan diets or even animal foods? + +Regarding creatine, all studies he cited were on supplemental creatine with doses that would require over 1kg of beef a day to get. For most individuals, beyond their caloric needs. + +**Claim #38 (**[**30:14**](https://youtu.be/MpxgZGnEF7E?t=1814)**):** + +>_You could take substantial amounts of soy or pea protein powders to make up for the fact that most plant proteins are poorly absorbed and have lower amounts of amino acids and so on and so on._ + +I'm sorry, Joseph. But tracer studies disagree. [[113](https://pubmed.ncbi.nlm.nih.gov/33693735/)] In fact, tofu appears to be on par with pork, and better than eggs, in terms of its contribution to total positive protein balance in the human body. + +![][image25] +[image25]: /blog/everettvegans/image25.png + +If you're going to try to make this point to shit on tofu, would you please be consistent and also shit on pork and eggs? + +**Claim #39 (**[**30:28**](https://youtu.be/MpxgZGnEF7E?t=1828)**):** + +>_Again, meat is so nutrient dense that you can get a decent amount of well absorbed zinc, iron, selenium, choline, various B-vitamins, vitamin A, calcium and other nutrients just eating a crappy cheeseburger._ + +Here, in another certified bruh moment, Joseph relies on vague language to make a point that nobody should care about. You can only eat around three Burger King Whopper cheese burgers before exceeding 2200 Kcal, but you'd also be deficient in most nutrients. + +While it's true that you would get the RDA of a number of nutrients, you would also exceed your sodium RDA by 268%, the AI for potassium would be undershot by 50%, and only 50% of the conservative 600 IU of vitamin D would be obtained. Additionally, you would only get about 40% of the RDA of vitamin A, in exchange for over 40g of saturated fat. + +While I am aware that Joseph is not advocating for cheeseburger consumption, it's just an incredibly stupid point to make. Which leads me to the next claim. + +**Claim #40 (**[**30:40**](https://youtu.be/MpxgZGnEF7E?t=1840)**):** + +>_Ideally people shouldn’t eat crappy cheeseburgers… but the average busy person doesn’t have time to craft the perfect meal - convenience is important. This is evidenced by the fact that a 2021 paper found that the more people avoided animal products in their diet - the more they ate convenient ultra-processed foods with vegans eating the most processed foods. [[114](https://pubmed.ncbi.nlm.nih.gov/32692345/)]_ + +In yet another instance of Joseph failing to read his own references, possibly because he's rushing for that confirmation bias induced YouTube money, he mentions convenience ultra-processed foods (UPF) but links a paper where the reason vegans seemingly ate more UPF (not convenience foods) was that the authors classified meat alternatives and plant based milks like soy milk as UPF. + +>_Concomitantly with the increased numbers of vegetarians or vegans, the offer of industrial plant-based meat and dairy substitutes on the market has been growing during the past decade in Western countries (e.g., tofu, textured vegetable foods such as vegetarian sausages or patties, and plant-based drinks such as soy “milk”) (9, 10). Most of these substitutes are ultra-processed foods (UPFs). The development of this industrial plant-based meat and dairy substitutes market (11, 12, 13, 14) may have contributed to the growing consumption of UPFs in countries such as France (15) by specific populations. For example, persons avoiding most animal-based foods may have high intakes of UPFs, driven by higher consumptions of plant-based meat and dairy substitutes._ + +The difference was so tiny as to be entirely explained by that classification. + +>_The proportion of energy from UPFs was significantly higher for vegetarians (37.0% of the total energy intake) and vegans (39.5%) than for meat eaters (33.0%) (Figure 1A). Comparing vegans to meat eaters, for example, vegans consumed a greater proportion of UPFs (+6.41%) (Figure 1B)._ + +In addition, Joseph failed to mention that vegans eat more unprocessed foods than omnivores. + +>_The proportion of energy from unprocessed foods was significantly higher for vegans (31.2% of the total energy intake) than for meat eaters (29.0%) (Figure 1A and B)._ + +**Claim #41 (**[**31:13**](https://youtu.be/MpxgZGnEF7E?t=1873)**):** + +>_Eating tons of processed soy protein and vegetable oils like sunflower oil is quite new to the human stomach. Sunflower oil seems like a simple swap for animal fat … but they are totally different. Many animal fats can be a good source of vitamin K2, but vegetable oil in fact hampers the activity of vitamin K, increasing your need for it. [[115](https://pubmed.ncbi.nlm.nih.gov/12032162/)][[116](https://pubmed.ncbi.nlm.nih.gov/27251151/)][[117](https://pubmed.ncbi.nlm.nih.gov/28962307/)][[118](https://pubmed.ncbi.nlm.nih.gov/29353277/)] It also oxidizes very easily so it will increase your need for the antioxidant vitamin E. [[119](https://pubmed.ncbi.nlm.nih.gov/26291567/)] Vegetable oil has several other negative effects which I have talked about in another video._ + +We already discussed vitamin K2 earlier, and touched on how animal foods are generally a pathetic source, but even if they weren't, it's not clear that animal-derived vitamin K2 is even bioavailable. Additionally, vegetable oil consumption is not an entailment of veganism, so I'm not entirely sure why it's being discussed here. Nor is UPF consumption, unless you're dense enough to categorize B12 and D3 supplements as UPFs. At best this is a red herring, at worst this is a non sequitur. + +# SOY SHRANK MY COCK THO +1 +**Claim #42 (**[**31:47**](https://youtu.be/MpxgZGnEF7E?t=1907)**):** + +>_Vegans and vegetarians tend to rely on soy for protein a lot. The hormone disrupting effects of increased soy consumption is somewhat controversial, but it may explain why a study on almost 8000 boys found boys born to vegetarian mothers had a higher risk for a specific deformity in the genitals called hypospadias. [[120](https://pubmed.ncbi.nlm.nih.gov/10619956/)]_ + +Risk is not exactly what is being assessed in this study. This is a case-control study, which means we're looking at odds ratios. This is the ratio of the odds of the outcome of interest between two groups at varying levels of exposure. Case-control studies are also missing a temporal component, which is often considered critical for making sound causal inferences. With case-control studies, the direction of causality is extremely difficult to ascertain. Additionally, the study did not even measure or assess soy intake. + +In this case, the odds ratio for hypospadias from low to high soy exposure was actually non-significant. However, in a similar case-control study from 2013, phytoestrogen consumption was inversely associated with hypospadias incidence. [[121](https://pubmed.ncbi.nlm.nih.gov/23752918/)] At best I think we can say that the literature on soy is pretty mixed, ranging from non-significant increases in the odds of hypospadias to statistically significant decreases in the odds of hypospadias. + +**Claim #43 (**[**32:09**](https://youtu.be/MpxgZGnEF7E?t=1929)**):** + +>_Soy contains the isoflavonoid genistein, which studies show has “detrimental effects on the male reproductive system…” [[122](https://pubmed.ncbi.nlm.nih.gov/35760341/)]_ + +Bruh, this is a meta-analysis of rodent studies with a blurb about how the results may or may not translate to humans. + +**Claim #44 (**[**32:17**](https://youtu.be/MpxgZGnEF7E?t=1937)**):** + +>_Lastly, impossible burger has tried to make their product taste meatier with something called leghemoglobin from the roots of genetically modified soy plants. [[123](https://www.canada.ca/en/health-canada/services/food-nutrition/genetically-modified-foods-other-novel-foods/approved-products/soy-leghemoglobin/document.html)]_ +> +>_GMOscience.org writes that:_ +> +>_A 28-day study commissioned by Impossible Foods in 2017 on soy leghemoglobin found that soy leghemoglobin caused statistically significant changes in weight gain, changes in the blood that can indicate the onset of inflammation or kidney disease, and possible signs of anaemia in the rats._ + +In isolation, leghemoglobin actually had better bioavailability than iron(II)-sulfate, and when part of a food matrix, here as fortification for corn tortillas, had similar (ie non stat sig different) bioavailability compared to bovine heme iron. [[124](https://pubmed.ncbi.nlm.nih.gov/16478282/)] + +![][image26] +[image26]: /blog/everettvegans/image26.png + +As an added fun fact that may blow up the brains of Joseph's audience, leghemoglobin is actually evolutionarily just as old as hemoglobin. See the following figure from Biochemistry 6th edition by Berg, Tymoczko and Styer. + +**Claim #45 (**[**32:43**](https://youtu.be/MpxgZGnEF7E?t=1963)**):** + +>_Further studies did eventually persuade the FDA to designate leghemoglobin as safe, but Impossible Foods admitted that a quarter their new ingredient was composed of 46 “unexpected” additional proteins, none of which were assessed for safety in the dossier. [[125](https://twitter.com/ImpossibleFoods/status/1000397509196505089?s=20)]_ + +These "unexpected additional" proteins are just unknown proteins, which in this context simply means that their biological behaviour is not yet known. If you analyse any food, including beef, there will be many, many such "unknown" proteins. It's not spooky. This characteristic likely quantifies over all foods, and as such we have no good reason to consider this a cause for any concern. + +# ANTI-NUTRIENTS THO + +**Claim #46 (**[**33:27**](https://youtu.be/MpxgZGnEF7E?t=2007)**):** + +>_This is another big issue with trying to replace animal foods. The replacement almost always comes with plenty of other stuff. Kidney beans are a good source of protein need to be soaked and cooked to reduce the lectin content. Some boys in the UK showed up in the hospital with profuse diarrhea and vomiting because they ate 4 kidney beans that were soaked, but not cooked. [[126](https://pubmed.ncbi.nlm.nih.gov/2249712/)]_ + +Okay, Joseph. Either you're not reading your references at all or you're just memeing at this point. The results are relevant to raw beans, which everyone agrees shouldn't be eaten. This isn't revelatory. Soaking your legumes is some level-zero Weston A Price bullshit. They need to be cooked, dude. **COOKED**. + +Even without soaking, and instead pressure cooking, the time required to deactivate the lectins was well below the time required to make them edible. [[127](https://www.researchgate.net/publication/229968837_Effect_of_Heat_Processing_on_Hemagglutinin_Activity_in_Red_Kidney_Beans)] + +Additionally, in the years between 1976 and 1989, the UK only saw 50 suspected incidents related to un- or under-cooked legumes were registered. Meanwhile, [according to the USDA](https://www.fsis.usda.gov/inspection/inspection-programs/inspection-poultry-products/reducing-salmonella-poultry/salmonella), poor meat preparation can account for approximately 1.35 million salmonella-related infections, 26,500 salmonella-related hospitalizations, and 420 salmonella-related deaths every year just in the United States. + +Joseph also tries to address those who react to lectins in cooked kidney beans too. News flash. There are no fucking lectins in cooked kidney beans. [[128](https://pubmed.ncbi.nlm.nih.gov/34829077/)] + +**Claim #47 (**[**33:56**](https://youtu.be/MpxgZGnEF7E?t=2036)**):** + +>_Phytic acid found in beans, seeds, nuts and grains inhibits fat digestion and the absorption of calcium, magnesium, phosphorus and Zinc. How much? Well, this study found about 35% less Zinc is absorbed in a vegetarian diet. [[129](https://pubmed.ncbi.nlm.nih.gov/31095149/)][[130](https://pubmed.ncbi.nlm.nih.gov/16401188/)][[56](https://pubmed.ncbi.nlm.nih.gov/12936958/)] Fiber itself worsens the activity of pancreatic lipase which is important for the absorption of fat soluble vitamins like A, D and K2. [[131](https://pubmed.ncbi.nlm.nih.gov/2819858/)]_ + +Joseph's reference for this claim is the same paper that he cited for his claim about phytate-mediated inhibition of iron absorption. However, straight from the author's conclusions, we can read: + +>_The iron and zinc from vegetarian diets are generally less bioavailable than from nonvegetarian diets because of reduced meat intake as well as the tendency to consume more phytic acid and other plant-based inhibitors of iron and zinc absorption. However, in Western countries with varied and abundant food supplies, it is not clear that this reduced bioavailability has any functional consequences._ + +What's worse, Joseph's reference for phytate-mediated inhibition of hepatic lipase activity is an in vitro study. It's not clear why we should care. + +# KALE FUCKED MY THYROID THO + +**Claim #48 (**[**34:19**](https://youtu.be/MpxgZGnEF7E?t=2059)**):** + +>_A high intake of goitrogenic foods like cabbage, kale and turnips can interfere with iodine functioning._ + +Show me the study that actually divulges that any of these sorts of foods have any goitrogenic effects, please. We've tried to look for this effect in foods that are highest in these so-called goitrogens, such as broccoli sprouts, and we so far haven't found any generalizable effect. [[132](https://pubmed.ncbi.nlm.nih.gov/30735751/)] In fact, the number of subjects with subclinical hypothyroidism actually went down in the broccoli sprout group, compared to baseline. + +**Claim #49 (**[**34:25**](https://youtu.be/MpxgZGnEF7E?t=2065)**):** + +>_Food Scientist Dr. Frederic Leroy has written an extensive article on the various examples of why it’s a challenge to acquire enough of certain nutrients just from plants due to inhibiting compounds like these. [[133](https://aleph-2020.blogspot.com/2019/05/animal-source-foods-provide-nutrients.html)] This nutrient challenge is part of the reason why The German Nutrition Society in 2016 and the French-speaking Pediatric HGN Group in 2019 recommend against a vegan diet for adolescents, children or mothers. [[134](https://www.ernaehrungs-umschau.de/english-articles/15-06-2016-vegan-diet/)][[135](https://pubmed.ncbi.nlm.nih.gov/31615715/)]_ + +Well, as long as we're appealing to authorities, we should point out that both the French and German governments recommend limiting meat intake to no more than 500g per week and 600g per week, respectively. + +![][image27] +[image27]: /blog/everettvegans/image27.png + +![][image28] +[image28]: /blog/everettvegans/image28.png + +# VEGAN MIDGET BABIES THO + +**Claim #50 (**[**34:49**](https://youtu.be/MpxgZGnEF7E?t=2089)**):** + +>_Several studies have found babies born to vegan mothers to have a lower birth weight than babies of omnivore mothers. [[136](https://pubmed.ncbi.nlm.nih.gov/30909771/)][[137](https://journals.lww.com/ijcm/Abstract/1999/24020/A_STUDY_OF_EFFECT_OF_MATERNAL_NUTRITION_ON.4.aspx)][[138](https://pubmed.ncbi.nlm.nih.gov/32776295/)][[139](https://pubmed.ncbi.nlm.nih.gov/8172120/)][[140](https://pubmed.ncbi.nlm.nih.gov/33232446/)][[141](https://www.nichd.nih.gov/newsroom/news/122120-vegetarian-diets)][[142](https://pubmed.ncbi.nlm.nih.gov/28745335/)][[143](https://sciendo.com/article/10.5604/01.3001.0014.9343)] +>_Birth weight can be a predictor of infant health and growth. [[144](https://pubmed.ncbi.nlm.nih.gov/15703531/)][[145](https://pubmed.ncbi.nlm.nih.gov/32928144/)][[146](https://pubmed.ncbi.nlm.nih.gov/26288495/)][[147](https://pubmed.ncbi.nlm.nih.gov/28840655/)] In fact, one study that meticulously analyzed the records of 4,300 adults who were in the Danish Medical Birth Register found that the lower their weight at birth, the shorter they would be as adults. [[148](https://pubmed.ncbi.nlm.nih.gov/10206622/)]_ +>_This study points out that the growth of vegetarian children was adequate, but less than average. [[39](https://pubmed.ncbi.nlm.nih.gov/2771551/)] I wonder how people would react to a doctor saying “your son won’t be as tall as he could be, but don’t worry his height will be adequate.”_ + +Firstly, it's probably not actually birth weights we should be caring about necessarily. It's whether or not the infants are considered small for gestational age. Secondly, Joseph's references don't actually provide very persuasive evidence to support the notion that vegan diets increase the risk of small for gestational age. One particularly strong reason for this is poor B12 supplementation practices, which is a known risk factor among vegans that has not been adequately accounted for. + +For instance, Ferrara et al. found that only 15% of the vegan cohort supplemented B12, while only 5% supplemented D3. Similarly, Yisahak et al. conducted a tangential study on vegetarians, but even then no assessment for B12 or D3 supplementation was made. + +In addition, the study by R.K. Sharma et al. was done in 1999 before fortification and supplementation standards were established. Although they found that low birth weights were largely explained by the height and weight of the mother and that anemia was a risk factor for small for gestational age. These authors also did not account for B12 supplementation. + +Kesary et al. lumped B12, iron, folate, and multivitamins together, and participants were said to be taking supplements if they took supplements more than once per week. However, the odds of small for gestational age between vegans and omnivores was not significant after an adjustment for BMI. Therefore, it is difficult to draw a definitive conclusion about the relationship between "vegan" diets and small for gestational age from this study. + +Basically if vegans tend to have lower baseline BMI and tend to gain less weight during pregnancy, normally they will give birth to smaller babies. By definition, since you shifted the distribution curve, more of them will fall bellow the 10th percentile. Any unique effect of vegan diets here are probably with respect to more powerfully resisting weight gain and than typical omnivorous diets. + +Finally, two cautionary narrative review articles by Miedziaszczyk et al. and Pawlak et al. highlighted that most of the vegan populations mentioned had either high MMA, low B12 intake or status, or poor supplementation practices. These observations further emphasize the importance of adequate B12 supplementation when considering the risks associated with vegan diets during pregnancy. Here's a quote from one of the authors: + +>_It should be thus concluded that vegan diets are appropriate for pregnant and lactating women only if these women habitually use reliable B12 sources, preferably oral supplements._ + +**Claim #51 (**[**38:18**](https://youtu.be/MpxgZGnEF7E?t=2118)**):** + +>_What is the difference between enough nutrients and the optimal amount of nutrients...cutting out nutrient dense animal foods doesn’t seem like a move in the right direction for health._ + +This just seems like pure speculation. Maybe optimal is not achievable without a supplement on any natural diet. I mean, think about it. What's the argument for omnivorous diets necessarily providing optimal amounts of all nutrients? If there's no argument for that, then it's possible that even the diet that he's recommending is horribly insufficient in some way. + +![][image29] +[image29]: /blog/everettvegans/image29.png + +How has Joseph determined that the optimal range for nutrient intakes aren't above what could be obtained from omnivorous diets? Seems like his argument here is begging the question. If it's the case that optimal levels of nutrients are only practical to obtain from supplements, then we'd all benefit— not just vegans. + +It's also true that this works in reverse. If Joseph is arguing that we should eat more meat to hit some nebulous "optimal" ranges for all nutrients, what's the argument that this is not true for plant foods? Perhaps eating more meat displaces plant foods and keeps us from achieving an optimal intake of some other plant-derived nutrients as well, notably vitamin C, folate, fibre, potassium, manganese, or polyphenols. Yes, Joseph, I live in the real world where getting ample fibre intake is actually beneficial for the vast majority of people. + +So perhaps the optimal intake of many of plant-derived nutrients cannot be achieved if you are eating a significant amount of meat. Since Joseph insists on discussing non-essential, animal-derived nutrients for which the evidence for benefit is paltry at best. There is literally more evidence of benefit for polyphenols than there is for carnitine, anserine, taurine, and perhaps even creatine. + +# MOAR ANCESTRAL DIETS THO + +**Claim #52 (**[**36:44**](https://youtu.be/MpxgZGnEF7E?t=2204)**):** + +>_For 99% of human history we relied on animal foods for nutrients - the an animal food containing diet has a strong track record that spans arguably over 1.7 million years. [[149](https://pubmed.ncbi.nlm.nih.gov/32508752/)][[150](https://bigthink.com/the-past/brain-evolution/)] Various cultures viewed animal foods as important to growth and despite the challenging circumstances they lived in, they were protected from infectious diseases, they didn’t have the modern diseases of civilization, and they enjoyed proper growth in their body, faces and mouths._ + +There is no source provided for Joseph's claim that "various cultures" do not suffer from the modern diseases of civilization. Joseph characterizes these diseases as "heart disease, cancer, osteoporosis, diabetes, and so on", but there is plenty of evidence against the notion that these diseases are somehow modern. + +Cancer in humans is a phenomenon that is over a million and a half years old, for example. [[151](https://carta.anthropogeny.org/libraries/bibliography/earliest-hominin-cancer-17-million-year-old-osteosarcoma-swartkrans-cave)] Heart disease is prevalent in nearly every population we study, whether traditional, ancient, or modern. [[152](https://pubmed.ncbi.nlm.nih.gov/23489753/)] Even the Tsimane have advanced atherosclerosis. [[153](https://pubmed.ncbi.nlm.nih.gov/28320601/)] Even diabetes dates back millennia. [[154](https://pubmed.ncbi.nlm.nih.gov/26788261/)] + +**Claim #53 (**[**37:07**](https://youtu.be/MpxgZGnEF7E?t=2227)**):** + +>_With that in mind, a plant-based diet is an experiment without any meaningful track record. It’s been a couple decades at best that people have been doing vegan diets, yet already many people quit for health reasons. Research is a promising story of progress - maybe one day we’ll learn enough to make sufficient plant-based replacements for animal foods. But it’s probably not happening any time soon._ + +It seems like the word "experiment" is being used in a strange way here. From what I can gather, Joseph is either trying to convey that there is significant risk entailed by being on a "vegan" diet OR that there is no historical precedent for animal-free diets and that we should apply some precautionary principle OR veganism is being used to test a hypothesis. + +Either of these three propositions requires an argument. If "experiment" is just being used as it is commonly used, as something done to test a hypothesis, then it is not clear that veganism is an experiment on that construal. If "experiment" just means that there is a possibility of some undesirable outcome actualizing, then it seems trivially true and misleading to refer to veganism as an experiment. If "experiment" means that there is some demonstrably entailment to a poor outcome, then he would actually need to provide decent evidence for that. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "van Ballegooijen, Adriana J., et al." + , title = "The Synergistic Interplay between Vitamins D and K for Bone and Cardiovascular Health: A Narrative Review" + , journal = "International Journal of Endocrinology" + , year = "2017" + , link = "https://doi.org/10.1155/2017/7454376" + } + , { author = "Yee, Michelle Min Fang, et al." + , title = "Vitamin A and Bone Health: A Review on Current Evidence" + , journal = "Molecules (Basel, Switzerland)" + , year = "2021" + , link = "https://doi.org/10.3390/molecules26061757" + } + , { author = "MS, AEGIS Communications, By Jerome C. Rose, PhD, Richard D. Roblee, DDS" + , title = "Interdisciplinary Analysis: Origins of Dental Crowding and Malocclusions - An Anthropological Perspective" + , journal = "" + , year = "" + , link = "https://www.aegisdentalnetwork.com/cced/2009/06/interdisciplinary-analysis-origins-of-dental-crowding-and-malocclusions-an-anthropological-perspective" + } + , { author = "Faunalytics" + , title = "A Summary Of Faunalytics’ Study Of Current And Former Vegetarians And Vegans" + , journal = "Faunalytics" + , year = "2016" + , link = "https://faunalytics.org/a-summary-of-faunalytics-study-of-current-and-former-vegetarians-and-vegans/" + } + , { author = "Grasgruber, P., et al." + , title = "Major Correlates of Male Height: A Study of 105 Countries" + , journal = "Economics and Human Biology" + , year = "2016" + , link = "https://doi.org/10.1016/j.ehb.2016.01.005" + } + , { author = "Armstrong, B., and R. Doll" + , title = "Environmental Factors and Cancer Incidence and Mortality in Different Countries, with Special Reference to Dietary Practices" + , journal = "International Journal of Cancer" + , year = "1975" + , link = "https://doi.org/10.1002/ijc.2910150411" + } + , { author = "Koebnick, C., et al." + , title = "Consequences of a Long-Term Raw Food Diet on Body Weight and Menstruation: Results of a Questionnaire Survey" + , journal = "Annals of Nutrition & Metabolism" + , year = "1999" + , link = "https://doi.org/10.1159/000012770" + } + , { author = "Novotny, Janet A., et al." + , title = "Beta-Carotene Conversion to Vitamin A Decreases as the Dietary Dose Increases in Humans" + , journal = "The Journal of Nutrition" + , year = "2010" + , link = "https://doi.org/10.3945/jn.109.116947" + } + , { author = "West, Clive E., et al." + , title = "Consequences of Revised Estimates of Carotenoid Bioefficacy for Dietary Control of Vitamin A Deficiency in Developing Countries" + , journal = "The Journal of Nutrition" + , year = "2002" + , link = "https://doi.org/10.1093/jn/132.9.2920S" + } + , { author = "Novotny, Janet A., et al." + , title = "Beta-Carotene Conversion to Vitamin A Decreases as the Dietary Dose Increases in Humans" + , journal = "The Journal of Nutrition" + , year = "2010" + , link = "https://doi.org/10.3945/jn.109.116947" + } + , { author = "Suzuki, Masako, and Meika Tomita" + , title = "Genetic Variations of Vitamin A-Absorption and Storage-Related Genes, and Their Potential Contribution to Vitamin A Deficiency Risks Among Different Ethnic Groups" + , journal = "Frontiers in Nutrition" + , year = "2022" + , link = "https://www.frontiersin.org/articles/10.3389/fnut.2022.861619" + } + , { author = "Leung, W. C., et al." + , title = "Two Common Single Nucleotide Polymorphisms in the Gene Encoding Beta-Carotene 15,15’-Monoxygenase Alter Beta-Carotene Metabolism in Female Volunteers" + , journal = "FASEB Journal: Official Publication of the Federation of American Societies for Experimental Biology" + , year = "2009" + , link = "https://doi.org/10.1096/fj.08-121962" + } + , { author = "Li, D., et al." + , title = "Selected Micronutrient Intake and Status in Men with Differing Meat Intakes, Vegetarians and Vegans" + , journal = "Asia Pacific Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1046/j.1440-6047.2000.00129.x" + } + , { author = "Schüpbach, R., et al." + , title = "Micronutrient Status and Intake in Omnivores, Vegetarians and Vegans in Switzerland" + , journal = "European Journal of Nutrition" + , year = "2017" + , link = "https://doi.org/10.1007/s00394-015-1079-7" + } + , { author = "van Jaarsveld, Paul J., et al." + , title = "Beta-Carotene-Rich Orange-Fleshed Sweet Potato Improves the Vitamin A Status of Primary School Children Assessed with the Modified-Relative-Dose-Response Test" + , journal = "The American Journal of Clinical Nutrition" + , year = "2005" + , link = "https://doi.org/10.1093/ajcn/81.5.1080" + } + , { author = "Ribaya-Mercado, Judy D., et al." + , title = "Carotene-Rich Plant Foods Ingested with Minimal Dietary Fat Enhance the Total-Body Vitamin A Pool Size in Filipino Schoolchildren as Assessed by Stable-Isotope-Dilution Methodology" + , journal = "The American Journal of Clinical Nutrition" + , year = "2007" + , link = "https://doi.org/10.1093/ajcn/85.4.1041" + } + , { author = "de Pee, S., et al." + , title = "Orange Fruit Is More Effective than Are Dark-Green, Leafy Vegetables in Increasing Serum Concentrations of Retinol and Beta-Carotene in Schoolchildren in Indonesia" + , journal = "The American Journal of Clinical Nutrition" + , year = "1998" + , link = "https://doi.org/10.1093/ajcn/68.5.1058" + } + , { author = "Tang, G., et al." + , title = "Green and Yellow Vegetables Can Maintain Body Stores of Vitamin A in Chinese Children" + , journal = "The American Journal of Clinical Nutrition" + , year = "1999" + , link = "https://doi.org/10.1093/ajcn/70.6.1069" + } + , { author = "Haskell, Marjorie J., et al." + , title = "Daily Consumption of Indian Spinach (Basella Alba) or Sweet Potatoes Has a Positive Effect on Total-Body Vitamin A Stores in Bangladeshi Men" + , journal = "The American Journal of Clinical Nutrition" + , year = "2004" + , link = "https://doi.org/10.1093/ajcn/80.3.705" + } + , { author = "Tang, Guangwen, et al." + , title = "Spinach or Carrots Can Supply Significant Amounts of Vitamin A as Assessed by Feeding with Intrinsically Deuterated Vegetables" + , journal = "The American Journal of Clinical Nutrition" + , year = "2005" + , link = "https://doi.org/10.1093/ajcn/82.4.821" + } + , { author = "Tang, Guangwen, et al." + , title = "Golden Rice Is an Effective Source of Vitamin A" + , journal = "The American Journal of Clinical Nutrition" + , year = "2009" + , link = "https://doi.org/10.3945/ajcn.2008.27119" + } + , { author = "Graßmann, Sophie, et al." + , title = "SNP Rs6564851 in the BCO1 Gene Is Associated with Varying Provitamin a Plasma Concentrations but Not with Retinol Concentrations among Adolescents from Rural Ghana" + , journal = "Nutrients" + , year = "2020" + , link = "https://doi.org/10.3390/nu12061786" + } + , { author = "Homma, Yosuke, et al." + , title = "A Case Report of Acute Vitamin A Intoxication Due to Ocean Perch Liver Ingestion" + , journal = "The Journal of Emergency Medicine" + , year = "2015" + , link = "https://doi.org/10.1016/j.jemermed.2014.12.056" + } + , { author = "Dewailly, E., et al." + , title = "Vitamin A Intoxication from Reef Fish Liver Consumption in Bermuda" + , journal = "Journal of Food Protection" + , year = "2011" + , link = "https://doi.org/10.4315/0362-028X.JFP-10-566" + } + , { author = "Nagai, K., et al." + , title = "Vitamin A Toxicity Secondary to Excessive Intake of Yellow-Green Vegetables, Liver and Laver" + , journal = "Journal of Hepatology" + , year = "1999" + , link = "https://doi.org/10.1016/s0168-8278(99)80174-3" + } + , { author = "van Stuijvenberg, Martha E., et al." + , title = "South African Preschool Children Habitually Consuming Sheep Liver and Exposed to Vitamin A Supplementation and Fortification Have Hypervitaminotic A Liver Stores: A Cohort Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2019" + , link = "https://doi.org/10.1093/ajcn/nqy382" + } + , { author = "Carpenter, T. O., et al." + , title = "Severe Hypervitaminosis A in Siblings: Evidence of Variable Tolerance to Retinol Intake" + , journal = "The Journal of Pediatrics" + , year = "1987" + , link = "https://doi.org/10.1016/s0022-3476(87)80109-9" + } + , { author = "Hovinen, Topi, et al." + , title = "Vegan Diet in Young Children Remodels Metabolism and Challenges the Statuses of Essential Nutrients" + , journal = "EMBO Molecular Medicine" + , year = "2021" + , link = "https://doi.org/10.15252/emmm.202013492" + } + , { author = "Weikert, Cornelia, et al." + , title = "Vitamin and Mineral Status in a Vegan Diet" + , journal = "Deutsches Arzteblatt International" + , year = "2020" + , link = "https://doi.org/10.3238/arztebl.2020.0575" + } + , { author = "Time for More Vitamin D" + , title = "Time for More Vitamin D" + , journal = "Harvard Health" + , year = "2008" + , link = "https://www.health.harvard.edu/staying-healthy/time-for-more-vitamin-d" + } + , { author = "Elorinne, Anna-Liisa, et al." + , title = "Food and Nutrient Intake and Nutritional Status of Finnish Vegans and Non-Vegetarians" + , journal = "PloS One" + , year = "2016" + , link = "https://doi.org/10.1371/journal.pone.0148235" + } + , { author = "Washington, District of Columbia 1800 I. Street NW and Dc 20006" + , title = "PolitiFact - Is Whole Milk Prohibited from Being Offered in New York Schools? Yes" + , journal = "@politifact" + , year = "2021" + , link = "https://www.politifact.com/factchecks/2021/jun/07/lorraine-lewandrowski/whole-milk-prohibited-being-offered-new-york-schoo/" + } + , { author = "Hariri, Essa, et al." + , title = "Vitamin K2-a Neglected Player in Cardiovascular Health: A Narrative Review" + , journal = "Open Heart" + , year = "2021" + , link = "https://doi.org/10.1136/openhrt-2021-001715" + } + , { author = "Siltari, Aino, and Heikki Vapaatalo" + , title = "Vascular Calcification, Vitamin K and Warfarin Therapy - Possible or Plausible Connection?" + , journal = "Basic & Clinical Pharmacology & Toxicology" + , year = "2018" + , link = "https://doi.org/10.1111/bcpt.12834" + } + , { author = "Sato, Toshiro, et al." + , title = "Comparison of Menaquinone-4 and Menaquinone-7 Bioavailability in Healthy Women" + , journal = "Nutrition Journal" + , year = "2012" + , link = "https://doi.org/10.1186/1475-2891-11-93" + } + , { author = "Schurgers, L. J., and C. Vermeer" + , title = "Determination of Phylloquinone and Menaquinones in Food. Effect of Food Matrix on Circulating Vitamin K Concentrations" + , journal = "Haemostasis" + , year = "2000" + , link = "https://doi.org/10.1159/000054147" + } + , { author = "Desmond, Małgorzata A., et al." + , title = "Growth, Body Composition, and Cardiovascular and Nutritional Risk of 5- to 10-y-Old Children Consuming Vegetarian, Vegan, or Omnivore Diets" + , journal = "The American Journal of Clinical Nutrition" + , year = "2021" + , link = "https://doi.org/10.1093/ajcn/nqaa445" + } + , { author = "Sanders, T. A." + , title = "Growth and Development of British Vegan Children" + , journal = "The American Journal of Clinical Nutrition" + , year = "1988" + , link = "https://doi.org/10.1093/ajcn/48.3.822" + } + , { author = "O’Connell, J. M., et al." + , title = "Growth of Vegetarian Children: The Farm Study" + , journal = "Pediatrics" + , year = "1989" + , link = "" + } + , { author = "Weder, Stine, et al." + , title = "Energy, Macronutrient Intake, and Anthropometrics of Vegetarian, Vegan, and Omnivorous Children (1−3 Years) in Germany (VeChi Diet Study)" + , journal = "Nutrients" + , year = "2019" + , link = "https://doi.org/10.3390/nu11040832" + } + , { author = "Weder, Stine, et al." + , title = "Intake of Micronutrients and Fatty Acids of Vegetarian, Vegan, and Omnivorous Children (1-3 Years) in Germany (VeChi Diet Study)" + , journal = "European Journal of Nutrition" + , year = "2022" + , link = "https://doi.org/10.1007/s00394-021-02753-3" + } + , { author = "Alexy, Ute, et al." + , title = "Nutrient Intake and Status of German Children and Adolescents Consuming Vegetarian, Vegan or Omnivore Diets: Results of the VeChi Youth Study" + , journal = "Nutrients" + , year = "2021" + , link = "https://doi.org/10.3390/nu13051707" + } + , { author = "" + , title = "Length-Weight Growth Analysis up to 12 Months of Age in Three Groups According to the Dietary Pattern Followed from Pregnant Mothers and Children during the First Year of Life" + , journal = "Minerva Pediatrics" + , year = "2021" + , link = "https://www.minervamedica.it/en/journals/minerva-pediatrics/article.php?cod=R15Y9999N00A21041604" + } + , { author = "Gilsing, A. M. J., et al." + , title = "Serum Concentrations of Vitamin B12 and Folate in British Male Omnivores, Vegetarians and Vegans: Results from a Cross-Sectional Analysis of the EPIC-Oxford Cohort Study" + , journal = "European Journal of Clinical Nutrition" + , year = "2010" + , link = "https://doi.org/10.1038/ejcn.2010.142" + } + , { author = "Herrmann, Wolfgang, et al." + , title = "Vitamin B-12 Status, Particularly Holotranscobalamin II and Methylmalonic Acid Concentrations, and Hyperhomocysteinemia in Vegetarians" + , journal = "The American Journal of Clinical Nutrition" + , year = "2003" + , link = "https://doi.org/10.1093/ajcn/78.1.131" + } + , { author = "Sheng, Xiaoyang, et al." + , title = "Effects of Dietary Intervention on Vitamin B12 Status and Cognitive Level of 18-Month-Old Toddlers in High-Poverty Areas: A Cluster-Randomized Controlled Trial" + , journal = "BMC Pediatrics" + , year = "2019" + , link = "https://doi.org/10.1186/s12887-019-1716-z" + } + , { author = "Del Bo’, Cristian, et al." + , title = "Effect of Two Different Sublingual Dosages of Vitamin B12 on Cobalamin Nutritional Status in Vegans and Vegetarians with a Marginal Deficiency: A Randomized Controlled Trial" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2019" + , link = "https://doi.org/10.1016/j.clnu.2018.02.008" + } + , { author = "Ho, Kok-Sun, et al." + , title = "Stopping or Reducing Dietary Fiber Intake Reduces Constipation and Its Associated Symptoms" + , journal = "World Journal of Gastroenterology" + , year = "2012" + , link = "https://doi.org/10.3748/wjg.v18.i33.4593" + } + , { author = "de Vries, Jan, et al." + , title = "Effects of Cereal, Fruit and Vegetable Fibers on Human Fecal Weight and Transit Time: A Comprehensive Review of Intervention Trials" + , journal = "Nutrients" + , year = "2016" + , link = "https://doi.org/10.3390/nu8030130" + } + , { author = "van der Schoot, Alice, et al." + , title = "The Effect of Fiber Supplementation on Chronic Constipation in Adults: An Updated Systematic Review and Meta-Analysis of Randomized Controlled Trials" + , journal = "The American Journal of Clinical Nutrition" + , year = "2022" + , link = "https://doi.org/10.1093/ajcn/nqac184" + } + , { author = "Tadesse, K." + , title = "The Effect of Dietary Fibre Isolates on Gastric Secretion, Acidity and Emptying" + , journal = "The British Journal of Nutrition" + , year = "1986" + , link = "https://doi.org/10.1079/bjn19860058" + } + , { author = "Rydning, Andreas, and Arnold Berstad" + , title = "Dietary Fibre and Peptic Ulcer" + , journal = "Scandinavian Journal of Gastroenterology" + , year = "1987" + , link = "https://doi.org/10.3109/00365528709095891" + } + , { author = "Harju, E." + , title = "Guar Gum Benefits Duodenal Ulcer Patients by Decreasing Gastric Acidity and Rate of Emptying of Gastric Contents 60 to 120 Minutes Postprandially" + , journal = "The American Surgeon" + , year = "1984" + , link = "" + } + , { author = "Okuda, K., and H. Takedatsu" + , title = "Absorption of Vitamin B12 in a Rectal Suppository" + , journal = "Proceedings of the Society for Experimental Biology and Medicine" + , year = "1966" + , link = "https://doi.org/10.3181/00379727-123-31527" + } + , { author = "Bolaman, Zahit, et al." + , title = "Oral versus Intramuscular Cobalamin Treatment in Megaloblastic Anemia: A Single-Center, Prospective, Randomized, Open-Label Study" + , journal = "Clinical Therapeutics" + , year = "2003" + , link = "https://doi.org/10.1016/s0149-2918(03)90096-8" + } + , { author = "Hunt, Janet R." + , title = "Bioavailability of Iron, Zinc, and Other Trace Minerals from Vegetarian Diets" + , journal = "The American Journal of Clinical Nutrition" + , year = "2003" + , link = "https://doi.org/10.1093/ajcn/78.3.633S" + } + , { author = "Scrimshaw, N. S." + , title = "Iron Deficiency" + , journal = "Scientific American" + , year = "1991" + , link = "https://doi.org/10.1038/scientificamerican1091-46" + } + , { author = "Rodriguez-Ramiro, I., et al." + , title = "Estimation of the Iron Bioavailability in Green Vegetables Using an in Vitro Digestion/Caco-2 Cell Model" + , journal = "Food Chemistry" + , year = "2019" + , link = "https://doi.org/10.1016/j.foodchem.2019.125292" + } + , { author = "Pawlak, Roman, and Kami Bell" + , title = "Iron Status of Vegetarian Children: A Review of Literature" + , journal = "Annals of Nutrition & Metabolism" + , year = "2017" + , link = "https://doi.org/10.1159/000466706" + } + , { author = "Pawlak, Roman, et al." + , title = "Iron Status of Vegetarian Adults: A Review of Literature" + , journal = "American Journal of Lifestyle Medicine" + , year = "2018" + , link = "https://doi.org/10.1177/1559827616682933" + } + , { author = "Levrat-Verny, M. A., et al." + , title = "Wholewheat Flour Ensures Higher Mineral Absorption and Bioavailability than White Wheat Flour in Rats" + , journal = "The British Journal of Nutrition" + , year = "1999" + , link = "https://doi.org/10.1017/s0007114599001075" + } + , { author = "Hallberg, L., et al." + , title = "Iron Absorption in Man: Ascorbic Acid and Dose-Dependent Inhibition by Phytate" + , journal = "The American Journal of Clinical Nutrition" + , year = "1989" + , link = "https://doi.org/10.1093/ajcn/49.1.140" + } + , { author = "Slywitch, Eric, et al." + , title = "Iron Deficiency in Vegetarian and Omnivorous Individuals: Analysis of 1340 Individuals" + , journal = "Nutrients" + , year = "2021" + , link = "https://doi.org/10.3390/nu13092964" + } + , { author = "Wilson, A. K., and M. J. Ball" + , title = "Nutrient Intake and Iron Status of Australian Male Vegetarians" + , journal = "European Journal of Clinical Nutrition" + , year = "1999" + , link = "https://doi.org/10.1038/sj.ejcn.1600696" + } + , { author = "Wißing, Christoph, et al." + , title = "Stable Isotopes Reveal Patterns of Diet and Mobility in the Last Neandertals and First Modern Humans in Europe" + , journal = "Scientific Reports" + , year = "2019" + , link = "https://doi.org/10.1038/s41598-019-41033-3" + } + , { author = "Raichle, Marcus E., and Debra A. Gusnard" + , title = "Appraising the Brain’s Energy Budget" + , journal = "Proceedings of the National Academy of Sciences of the United States of America" + , year = "2002" + , link = "https://doi.org/10.1073/pnas.172399499" + } + , { author = "Ben-Dor, Miki, et al." + , title = "Man the Fat Hunter: The Demise of Homo Erectus and the Emergence of a New Hominin Lineage in the Middle Pleistocene (ca. 400 Kyr) Levant" + , journal = "PloS One" + , year = "2011" + , link = "https://doi.org/10.1371/journal.pone.0028689" + } + , { author = "Dobersek, Urska, et al." + , title = "Meat and Mental Health: A Systematic Review of Meat Abstention and Depression, Anxiety, and Related Phenomena" + , journal = "Critical Reviews in Food Science and Nutrition" + , year = "2021" + , link = "https://doi.org/10.1080/10408398.2020.1741505" + } + , { author = "Agarwal, Ulka, et al." + , title = "A Multicenter Randomized Controlled Trial of a Nutrition Intervention Program in a Multiethnic Adult Population in the Corporate Setting Reduces Depression and Anxiety and Improves Quality of Life: The GEICO Study" + , journal = "American Journal of Health Promotion: AJHP" + , year = "2015" + , link = "https://doi.org/10.4278/ajhp.130218-QUAN-72" + } + , { author = "Katcher, Heather I., et al." + , title = "A Worksite Vegan Nutrition Program Is Well-Accepted and Improves Health-Related Quality of Life and Work Productivity" + , journal = "Annals of Nutrition & Metabolism" + , year = "2010" + , link = "https://doi.org/10.1159/000288281" + } + , { author = "Michalak, Johannes, et al." + , title = "Vegetarian Diet and Mental Disorders: Results from a Representative Community Survey" + , journal = "The International Journal of Behavioral Nutrition and Physical Activity" + , year = "2012" + , link = "https://doi.org/10.1186/1479-5868-9-67" + } + , { author = "Fazelian, Siavash, et al." + , title = "Adherence to the Vegetarian Diet May Increase the Risk of Depression: A Systematic Review and Meta-Analysis of Observational Studies" + , journal = "Nutrition Reviews" + , year = "2022" + , link = "https://doi.org/10.1093/nutrit/nuab013" + } + , { author = "Young, Melissa F., et al." + , title = "Maternal Hepcidin Is Associated with Placental Transfer of Iron Derived from Dietary Heme and Nonheme Sources" + , journal = "The Journal of Nutrition" + , year = "2012" + , link = "https://doi.org/10.3945/jn.111.145961" + } + , { author = "Peña-Rosas, Juan Pablo, et al." + , title = "Daily Oral Iron Supplementation during Pregnancy" + , journal = "The Cochrane Database of Systematic Reviews" + , year = "2015" + , link = "https://doi.org/10.1002/14651858.CD004736.pub5" + } + , { author = "Wallace, Taylor C., et al." + , title = "Choline: The Underconsumed and Underappreciated Essential Nutrient" + , journal = "Nutrition Today" + , year = "2018" + , link = "https://doi.org/10.1097/NT.0000000000000302" + } + , { author = "Wallace, Taylor C., et al." + , title = "Choline: The Neurocognitive Essential Nutrient of Interest to Obstetricians and Gynecologists" + , journal = "Journal of Dietary Supplements" + , year = "2020" + , link = "https://doi.org/10.1080/19390211.2019.1639875" + } + , { author = "Mazidi, Mohsen, and Andre Pascal Kengne" + , title = "Higher Adherence to Plant-Based Diets Are Associated with Lower Likelihood of Fatty Liver" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2019" + , link = "https://doi.org/10.1016/j.clnu.2018.08.010" + } + , { author = "Li, Xiude, et al." + , title = "A Healthful Plant-Based Diet Is Associated with Lower Odds of Nonalcoholic Fatty Liver Disease" + , journal = "Nutrients" + , year = "2022" + , link = "https://doi.org/10.3390/nu14194099" + } + , { author = "Yang, Chao-Qun, et al." + , title = "Dietary Patterns Modulate the Risk of Non-Alcoholic Fatty Liver Disease in Chinese Adults" + , journal = "Nutrients" + , year = "2015" + , link = "https://doi.org/10.3390/nu7064778" + } + , { author = "Chiarioni, Giuseppe, et al." + , title = "Vegan Diet Advice Might Benefit Liver Enzymes in Nonalcoholic Fatty Liver Disease: An Open Observational Pilot Study" + , journal = "Journal of Gastrointestinal and Liver Diseases: JGLD" + , year = "2021" + , link = "https://doi.org/10.15403/jgld-3064" + } + , { author = "Mokhtari, Zeinab, et al." + , title = "Egg Consumption and Risk of Non-Alcoholic Fatty Liver Disease" + , journal = "World Journal of Hepatology" + , year = "2017" + , link = "https://doi.org/10.4254/wjh.v9.i10.503" + } + , { author = "Asemi, Z., et al." + , title = "Total, Dietary, and Supplemental Calcium Intake and Mortality from All-Causes, Cardiovascular Disease, and Cancer: A Meta-Analysis of Observational Studies" + , journal = "Nutrition, Metabolism, and Cardiovascular Diseases: NMCD" + , year = "2015" + , link = "https://doi.org/10.1016/j.numecd.2015.03.008" + } + , { author = "Pana, Tiberiu A., et al." + , title = "Calcium Intake, Calcium Supplementation and Cardiovascular Disease and Mortality in the British Population: EPIC-Norfolk Prospective Cohort Study and Meta-Analysis" + , journal = "European Journal of Epidemiology" + , year = "2021" + , link = "https://doi.org/10.1007/s10654-020-00710-8" + } + , { author = "Wang, Xia, et al." + , title = "Dietary Calcium Intake and Mortality Risk from Cardiovascular Disease and All Causes: A Meta-Analysis of Prospective Cohort Studies" + , journal = "BMC Medicine" + , year = "2014" + , link = "https://doi.org/10.1186/s12916-014-0158-6" + } + , { author = "Yang, Chao, et al." + , title = "The Evidence and Controversy Between Dietary Calcium Intake and Calcium Supplementation and the Risk of Cardiovascular Disease: A Systematic Review and Meta-Analysis of Cohort Studies and Randomized Controlled Trials" + , journal = "Journal of the American College of Nutrition" + , year = "2020" + , link = "https://doi.org/10.1080/07315724.2019.1649219" + } + , { author = "Arasu, Kanimolli, et al." + , title = "Effect of Soluble Corn Fibre and Calcium Supplementation on Bone Mineral Content and Bone Mineral Density in Preadolescent Malaysian Children-a Double-Blind Randomised Controlled Trial (PREBONE-Kids Study)" + , journal = "Osteoporosis International: A Journal Established as Result of Cooperation between the European Foundation for Osteoporosis and the National Osteoporosis Foundation of the USA" + , year = "2023" + , link = "https://doi.org/10.1007/s00198-023-06702-0" + } + , { author = "Voulgaridou, Gavriela, et al." + , title = "Vitamin D and Calcium in Osteoporosis, and the Role of Bone Turnover Markers: A Narrative Review of Recent Data from RCTs" + , journal = "Diseases (Basel, Switzerland)" + , year = "2023" + , link = "https://doi.org/10.3390/diseases11010029" + } + , { author = "Tong, Tammy Y. N., et al." + , title = "Vegetarian and Vegan Diets and Risks of Total and Site-Specific Fractures: Results from the Prospective EPIC-Oxford Study" + , journal = "BMC Medicine" + , year = "2020" + , link = "https://doi.org/10.1186/s12916-020-01815-3" + } + , { author = "Ma, Baoshan, et al." + , title = "Causal Associations of Anthropometric Measurements With Fracture Risk and Bone Mineral Density: A Mendelian Randomization Study" + , journal = "Journal of Bone and Mineral Research: The Official Journal of the American Society for Bone and Mineral Research" + , year = "2021" + , link = "https://doi.org/10.1002/jbmr.4296" + } + , { author = "Nethander, Maria, et al." + , title = "Assessment of the Genetic and Clinical Determinants of Hip Fracture Risk: Genome-Wide Association and Mendelian Randomization Study" + , journal = "Cell Reports. Medicine" + , year = "2022" + , link = "https://doi.org/10.1016/j.xcrm.2022.100776" + } + , { author = "Chan, Mei Y., et al." + , title = "Relationship between Body Mass Index and Fracture Risk Is Mediated by Bone Mineral Density" + , journal = "Journal of Bone and Mineral Research: The Official Journal of the American Society for Bone and Mineral Research" + , year = "2014" + , link = "https://doi.org/10.1002/jbmr.2288" + } + , { author = "Castro, Jonathan P., et al." + , title = "Differential Effect of Obesity on Bone Mineral Density in White, Hispanic and African American Women: A Cross Sectional Study" + , journal = "Nutrition & Metabolism" + , year = "2005" + , link = "https://doi.org/10.1186/1743-7075-2-9" + } + , { author = "Filardo, Giovanni, et al." + , title = "Categorizing BMI May Lead to Biased Results in Studies Investigating In-Hospital Mortality after Isolated CABG" + , journal = "Journal of Clinical Epidemiology" + , year = "2007" + , link = "https://doi.org/10.1016/j.jclinepi.2007.01.008" + } + , { author = "Thorpe, Donna L., et al." + , title = "Dietary Patterns and Hip Fracture in the Adventist Health Study 2: Combined Vitamin D and Calcium Supplementation Mitigate Increased Hip Fracture Risk among Vegans" + , journal = "The American Journal of Clinical Nutrition" + , year = "2021" + , link = "https://doi.org/10.1093/ajcn/nqab095" + } + , { author = "Sellmeyer, D. E., et al." + , title = "A High Ratio of Dietary Animal to Vegetable Protein Increases the Rate of Bone Loss and the Risk of Fracture in Postmenopausal Women. Study of Osteoporotic Fractures Research Group" + , journal = "The American Journal of Clinical Nutrition" + , year = "2001" + , link = "https://doi.org/10.1093/ajcn/73.1.118" + } + , { author = "Purchas, R. W., et al." + , title = "Concentrations in Beef and Lamb of Taurine, Carnosine, Coenzyme Q(10), and Creatine" + , journal = "Meat Science" + , year = "2004" + , link = "https://doi.org/10.1016/S0309-1740(03)00181-5" + } + , { author = "Rosqvist, Fredrik, et al." + , title = "Potential Role of Milk Fat Globule Membrane in Modulating Plasma Lipoproteins, Gene Expression, and Cholesterol Metabolism in Humans: A Randomized Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2015" + , link = "https://doi.org/10.3945/ajcn.115.107045" + } + , { author = "Rodríguez-Morató, Jose, et al." + , title = "Comparison of the Postprandial Metabolic Fate of U-13C Stearic Acid and U-13C Oleic Acid in Postmenopausal Women" + , journal = "Arteriosclerosis, Thrombosis, and Vascular Biology" + , year = "2020" + , link = "https://doi.org/10.1161/ATVBAHA.120.315260" + } + , { author = "Bergeron, Nathalie, et al." + , title = "Effects of Red Meat, White Meat, and Nonmeat Protein Sources on Atherogenic Lipoprotein Measures in the Context of Low Compared with High Saturated Fat Intake: A Randomized Controlled Trial" + , journal = "The American Journal of Clinical Nutrition" + , year = "2019" + , link = "https://doi.org/10.1093/ajcn/nqz035" + } + , { author = "Mozaffarian, Dariush, et al." + , title = "Food Compass Is a Nutrient Profiling System Using Expanded Characteristics for Assessing Healthfulness of Foods" + , journal = "Nature Food" + , year = "2021" + , link = "https://doi.org/10.1038/s43016-021-00381-y" + } + , { author = "Zeisel, Steven H., and Kerry-Ann da Costa" + , title = "Choline: An Essential Nutrient for Public Health" + , journal = "Nutrition Reviews" + , year = "2009" + , link = "https://doi.org/10.1111/j.1753-4887.2009.00246.x" + } + , { author = "Bahnfleth, Charlotte L., et al." + , title = "Prenatal Choline Supplementation Improves Child Sustained Attention: A 7-Year Follow-up of a Randomized Controlled Feeding Trial" + , journal = "FASEB Journal: Official Publication of the Federation of American Societies for Experimental Biology" + , year = "2022" + , link = "https://doi.org/10.1096/fj.202101217R" + } + , { author = "Colombo, John, et al." + , title = "Prenatal DHA Supplementation and Infant Attention" + , journal = "Pediatric Research" + , year = "2016" + , link = "https://doi.org/10.1038/pr.2016.134" + } + , { author = "Ramakrishnan, Usha, et al." + , title = "Prenatal Supplementation with DHA Improves Attention at 5 y of Age: A Randomized Controlled Trial" + , journal = "The American Journal of Clinical Nutrition" + , year = "2016" + , link = "https://doi.org/10.3945/ajcn.114.101071" + } + , { author = "Klatt, Kevin C., et al." + , title = "Prenatal Choline Supplementation Improves Biomarkers of Maternal Docosahexaenoic Acid (DHA) Status among Pregnant Participants Consuming Supplemental DHA: A Randomized Controlled Trial" + , journal = "The American Journal of Clinical Nutrition" + , year = "2022" + , link = "https://doi.org/10.1093/ajcn/nqac147" + } + , { author = "Jackson, Kristina Harris, et al." + , title = "Baseline Red Blood Cell and Breast Milk DHA Levels Affect Responses to Standard Dose of DHA in Lactating Women on a Controlled Feeding Diet" + , journal = "Prostaglandins, Leukotrienes, and Essential Fatty Acids" + , year = "2021" + , link = "https://doi.org/10.1016/j.plefa.2021.102248" + } + , { author = "Loinard-González, Aura Alex P., et al." + , title = "Genetic Variants in One-Carbon Metabolism and Their Effects on DHA Biomarkers in Pregnant Women: A Post-Hoc Analysis" + , journal = "Nutrients" + , year = "2022" + , link = "https://doi.org/10.3390/nu14183801" + } + , { author = "Wu, Guoyao" + , title = "Important Roles of Dietary Taurine, Creatine, Carnosine, Anserine and 4-Hydroxyproline in Human Nutrition and Health" + , journal = "Amino Acids" + , year = "2020" + , link = "https://doi.org/10.1007/s00726-020-02823-6" + } + , { author = "Lourenço, R., and M. E. Camilo" + , title = "Taurine: A Conditionally Essential Amino Acid in Humans? An Overview in Health and Disease" + , journal = "Nutricion Hospitalaria" + , year = "2002" + , link = "" + } + , { author = "Avgerinos, Konstantinos I., et al." + , title = "Effects of Creatine Supplementation on Cognitive Function of Healthy Individuals: A Systematic Review of Randomized Controlled Trials" + , journal = "Experimental Gerontology" + , year = "2018" + , link = "https://doi.org/10.1016/j.exger.2018.04.013" + } + , { author = "McMorris, T., et al." + , title = "Effect of Creatine Supplementation and Sleep Deprivation, with Mild Exercise, on Cognitive and Psychomotor Performance, Mood State, and Plasma Concentrations of Catecholamines and Cortisol" + , journal = "Psychopharmacology" + , year = "2006" + , link = "https://doi.org/10.1007/s00213-005-0269-z" + } + , { author = "Dickinson, Hayley, et al." + , title = "Creatine Supplementation during Pregnancy: Summary of Experimental Studies Suggesting a Treatment to Improve Fetal and Neonatal Morbidity and Reduce Mortality in High-Risk Human Pregnancy" + , journal = "BMC Pregnancy and Childbirth" + , year = "2014" + , link = "https://doi.org/10.1186/1471-2393-14-150" + } + , { author = "Park, Sanghee, et al." + , title = "Metabolic Evaluation of the Dietary Guidelines’ Ounce Equivalents of Protein Food Sources in Young Adults: A Randomized Controlled Trial" + , journal = "The Journal of Nutrition" + , year = "2021" + , link = "https://doi.org/10.1093/jn/nxaa401" + } + , { author = "Gehring, Joséphine, et al." + , title = "Consumption of Ultra-Processed Foods by Pesco-Vegetarians, Vegetarians, and Vegans: Associations with Duration and Age at Diet Initiation" + , journal = "The Journal of Nutrition" + , year = "2021" + , link = "https://doi.org/10.1093/jn/nxaa196" + } + , { author = "Schurgers, Leon J., et al." + , title = "Novel Effects of Diets Enriched with Corn Oil or with an Olive Oil/Sunflower Oil Mixture on Vitamin K Metabolism and Vitamin K-Dependent Proteins in Young Men" + , journal = "Journal of Lipid Research" + , year = "2002" + , link = "" + } + , { author = "Okuyama, Harumi, et al." + , title = "Medicines and Vegetable Oils as Hidden Causes of Cardiovascular Disease and Diabetes" + , journal = "Pharmacology" + , year = "2016" + , link = "https://doi.org/10.1159/000446704" + } + , { author = "Hashimoto, Yoko, et al." + , title = "Canola and Hydrogenated Soybean Oils Accelerate Ectopic Bone Formation Induced by Implantation of Bone Morphogenetic Protein in Mice" + , journal = "Toxicology Reports" + , year = "2014" + , link = "https://doi.org/10.1016/j.toxrep.2014.10.021" + } + , { author = "Okuyama, Harumi, et al." + , title = "A Critical Review of the Consensus Statement from the European Atherosclerosis Society Consensus Panel 2017" + , journal = "Pharmacology" + , year = "2018" + , link = "https://doi.org/10.1159/000486374" + } + , { author = "Raederstorff, Daniel, et al." + , title = "Vitamin E Function and Requirements in Relation to PUFA" + , journal = "The British Journal of Nutrition" + , year = "2015" + , link = "https://doi.org/10.1017/S000711451500272X" + } + , { author = "North, K., and J. Golding" + , title = "A Maternal Vegetarian Diet in Pregnancy Is Associated with Hypospadias. The ALSPAC Study Team. Avon Longitudinal Study of Pregnancy and Childhood" + , journal = "BJU International" + , year = "2000" + , link = "https://doi.org/10.1046/j.1464-410x.2000.00436.x" + } + , { author = "Carmichael, Suzan L., et al." + , title = "Hypospadias and Maternal Intake of Phytoestrogens" + , journal = "American Journal of Epidemiology" + , year = "2013" + , link = "https://doi.org/10.1093/aje/kws591" + } + , { author = "Rashid, Rumaisa, et al." + , title = "Genistein Lowers Fertility with Pronounced Effect in Males: Meta-Analyses on Pre-Clinical Studies" + , journal = "Andrologia" + , year = "2022" + , link = "https://doi.org/10.1111/and.14511" + } + , { author = "Canada, Health" + , title = "Soy Leghemoglobin (LegH) Preparation as an Ingredient in a Simulated Meat Product and Other Ground Beef Analogues" + , journal = "" + , year = "2021" + , link = "https://www.canada.ca/en/health-canada/services/food-nutrition/genetically-modified-foods-other-novel-foods/approved-products/soy-leghemoglobin/document.html" + } + , { author = "Proulx, Amy K., and Manju B. Reddy" + , title = "Iron Bioavailability of Hemoglobin from Soy Root Nodules Using a Caco-2 Cell Culture Model" + , journal = "Journal of Agricultural and Food Chemistry" + , year = "2006" + , link = "https://doi.org/10.1021/jf052268l" + } + , { author = "ImpossibleFoods" + , title = "Twitter" + , journal = "" + , year = "2018" + , link = "https://twitter.com/ImpossibleFoods/status/1000397509196505089?s=20" + } + , { author = "Rodhouse, J. C., et al." + , title = "Red Kidney Bean Poisoning in the UK: An Analysis of 50 Suspected Incidents between 1976 and 1989" + , journal = "Epidemiology and Infection" + , year = "1990" + , link = "https://doi.org/10.1017/s095026880004810x" + } + , { author = "Thompson, Lilian U., et al." + , title = "Effect of Heat Processing on Hemagglutinin Activity in Red Kidney Beans" + , journal = "Journal of Food Science" + , year = "1983" + , link = "https://doi.org/10.1111/j.1365-2621.1983.tb14831.x" + } + , { author = "Adamcová, Anežka, et al." + , title = "Lectin Activity in Commonly Consumed Plant-Based Foods: Calling for Method Harmonization and Risk Assessment" + , journal = "Foods (Basel, Switzerland)" + , year = "2021" + , link = "https://doi.org/10.3390/foods10112796" + } + , { author = "Pei, Yaqiong, et al." + , title = "Impact of Plant Extract on the Gastrointestinal Fate of Nutraceutical-Loaded Nanoemulsions: Phytic Acid Inhibits Lipid Digestion but Enhances Curcumin Bioaccessibility" + , journal = "Food & Function" + , year = "2019" + , link = "https://doi.org/10.1039/c9fo00545e" + } + , { author = "Yuangklang, C., et al." + , title = "Effect of Sodium Phytate Supplementation on Fat Digestion and Cholesterol Metabolism in Female Rats" + , journal = "Journal of Animal Physiology and Animal Nutrition" + , year = "2005" + , link = "https://doi.org/10.1111/j.1439-0396.2005.00525.x" + } + , { author = "Hansen, W. E." + , title = "Effect of Dietary Fiber on Pancreatic Lipase Activity in Vitro" + , journal = "Pancreas" + , year = "1987" + , link = "https://doi.org/10.1097/00006676-198703000-00012" + } + , { author = "Chartoumpekis, Dionysios V., et al." + , title = "Broccoli Sprout Beverage Is Safe for Thyroid Hormonal and Autoimmune Status: Results of a 12-Week Randomized Trial" + , journal = "Food and Chemical Toxicology: An International Journal Published for the British Industrial Biological Research Association" + , year = "2019" + , link = "https://doi.org/10.1016/j.fct.2019.02.004" + } + , { author = "Animal Source Foods in Ethical, Sustainable & Healthy Diets" + , title = "Animal Source Foods in Ethical, Sustainable & Healthy Diets: Nutrients Are Not Always Easily Obtained from Plants Only" + , journal = "" + , year = "" + , link = "https://aleph-2020.blogspot.com/2019/05/animal-source-foods-provide-nutrients.html" + } + , { author = "Watzl, Margrit Richter, Heiner Boeing, Dorle Grünewald-Funk, Helmut Heseker, Anja Kroke, Eva Leschik-Bonnet, Helmut Oberritter, Daniela Strohm, Bernhard" + , title = "Vegan Diet" + , journal = "" + , year = "2016" + , link = "https://www.ernaehrungs-umschau.de/english-articles/15-06-2016-vegan-diet/" + } + , { author = "Lemale, J., et al." + , title = "Vegan Diet in Children and Adolescents. Recommendations from the French-Speaking Pediatric Hepatology, Gastroenterology and Nutrition Group (GFHGNP)" + , journal = "Archives De Pediatrie: Organe Officiel De La Societe Francaise De Pediatrie" + , year = "2019" + , link = "https://doi.org/10.1016/j.arcped.2019.09.001" + } + , { author = "Ferrara, Pietro, et al." + , title = "The Impact of Lacto-Ovo-/Lacto-Vegetarian and Vegan Diets during Pregnancy on the Birth Anthropometric Parameters of the Newborn" + , journal = "The Journal of Maternal-Fetal & Neonatal Medicine: The Official Journal of the European Association of Perinatal Medicine, the Federation of Asia and Oceania Perinatal Societies, the International Society of Perinatal Obstetricians" + , year = "2020" + , link = "https://doi.org/10.1080/14767058.2019.1590330" + } + , { author = "Sharma, R. K., et al." + , title = "A STUDY OF EFFECT OF MATERNAL NUTRITION ON INCIDENCE OF LOW BIRTH WEIGHT" + , journal = "Indian Journal of Community Medicine" + , year = "1999" + , link = "https://journals.lww.com/ijcm/Abstract/1999/24020/A_STUDY_OF_EFFECT_OF_MATERNAL_NUTRITION_ON.4.aspx" + } + , { author = "Kesary, Yuval, et al." + , title = "Maternal Plant-Based Diet during Gestation and Pregnancy Outcomes" + , journal = "Archives of Gynecology and Obstetrics" + , year = "2020" + , link = "https://doi.org/10.1007/s00404-020-05689-x" + } + , { author = "Sanders, T. A., and S. Reddy" + , title = "Vegetarian Diets and Children" + , journal = "The American Journal of Clinical Nutrition" + , year = "1994" + , link = "https://doi.org/10.1093/ajcn/59.5.1176S" + } + , { author = "Yisahak, Samrawit F., et al." + , title = "Vegetarian Diets during Pregnancy, and Maternal and Neonatal Outcomes" + , journal = "International Journal of Epidemiology" + , year = "2021" + , link = "https://doi.org/10.1093/ije/dyaa200" + } + , { author = "NIH" + , title = "Science Update: Vegetarian Diets during Pregnancy Associated with Small Infant Birth Weight" + , journal = "Https://Www.Nichd.Nih.Gov" + , year = "2020" + , link = "https://www.nichd.nih.gov/newsroom/news/122120-vegetarian-diets" + } + , { author = "Pawlak, R." + , title = "To Vegan or Not to Vegan When Pregnant, Lactating or Feeding Young Children" + , journal = "European Journal of Clinical Nutrition" + , year = "2017" + , link = "https://doi.org/10.1038/ejcn.2017.111" + } + , { author = "Miedziaszczyk, Miłosz, et al." + , title = "The Safety of a Vegan Diet During Pregnancy" + , journal = "Postępy Higieny i Medycyny Doświadczalnej" + , year = "2021" + , link = "https://doi.org/10.5604/01.3001.0014.9343" + } + , { author = "Islam, M. Mazharul" + , title = "The Effects of Low Birth Weight on School Performance and Behavioral Outcomes of Elementary School Children in Oman" + , journal = "Oman Medical Journal" + , year = "2015" + , link = "https://doi.org/10.5001/omj.2015.50" + } + , { author = "Falcão, Ila R., et al." + , title = "Factors Associated with Low Birth Weight at Term: A Population-Based Linkage Study of the 100 Million Brazilian Cohort" + , journal = "BMC Pregnancy and Childbirth" + , year = "2020" + , link = "https://doi.org/10.1186/s12884-020-03226-x" + } + , { author = "Misra, Akshay, et al." + , title = "A Longitudinal Study to Determine Association of Various Maternal Factors with Neonatal Birth Weight at a Tertiary Care Hospital" + , journal = "Medical Journal, Armed Forces India" + , year = "2015" + , link = "https://doi.org/10.1016/j.mjafi.2015.03.001" + } + , { author = "Sinha, Bireshwar, et al." + , title = "Low-Birthweight Infants Born to Short-Stature Mothers Are at Additional Risk of Stunting and Poor Growth Velocity: Evidence from Secondary Data Analyses" + , journal = "Maternal & Child Nutrition" + , year = "2018" + , link = "https://doi.org/10.1111/mcn.12504" + } + , { author = "Sørensen, H. T., et al." + , title = "Birth Weight and Length as Predictors for Adult Height" + , journal = "American Journal of Epidemiology" + , year = "1999" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a009881" + } + , { author = "Wells, Jonathan C. K., and Jay T. Stock" + , title = "Life History Transitions at the Origins of Agriculture: A Model for Understanding How Niche Construction Impacts Human Growth, Demography and Health" + , journal = "Frontiers in Endocrinology" + , year = "2020" + , link = "https://doi.org/10.3389/fendo.2020.00325" + } + , { author = "Big Think" + , title = "Our Ancestors First Developed Humanlike Brains 1.7 Million Years Ago" + , journal = "Big Think" + , year = "2021" + , link = "https://bigthink.com/the-past/brain-evolution/" + } + , { author = "Odes, E., et al." + , title = "Earliest Hominin Cancer: 1.7-Million-Year-Old Osteosarcoma from Swartkrans Cave, South Africa" + , journal = "South African Journal of Science" + , year = "2016" + , link = "https://doi.org/http://dx.doi.org/10.17159/sajs.2016/20150471" + } + , { author = "Thompson, Randall C., et al." + , title = "Atherosclerosis across 4000 Years of Human History: The Horus Study of Four Ancient Populations" + , journal = "Lancet (London, England)" + , year = "2013" + , link = "https://doi.org/10.1016/S0140-6736(13)60598-X" + } + , { author = "Kaplan, Hillard, et al." + , title = "Coronary Atherosclerosis in Indigenous South American Tsimane: A Cross-Sectional Cohort Study" + , journal = "Lancet (London, England)" + , year = "2017" + , link = "https://doi.org/10.1016/S0140-6736(17)30752-3" + } + , { author = "Karamanou, Marianna, et al." + , title = "Milestones in the History of Diabetes Mellitus: The Main Contributors" + , journal = "World Journal of Diabetes" + , year = "2016" + , link = "https://doi.org/10.4239/wjd.v7.i1.1" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/FeldwitzFuckery.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/FeldwitzFuckery.elm new file mode 100755 index 0000000..ec6e54b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/FeldwitzFuckery.elm @@ -0,0 +1,33 @@ +module Config.Pages.Blogs.MainBlog.FeldwitzFuckery exposing (..) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleFeldwitzFuckery : BlogArticle +articleFeldwitzFuckery = + { articleName = "" + , articleLink = Path.toString Path.Blog_Feldwitzfuckery + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "" + , articlePublished = "" + , articleBody = """ + + + +![][image1] +[image1]: /blog/feldwitzfuckery/image1.png + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/HunterGatherers.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/HunterGatherers.elm new file mode 100755 index 0000000..0c31d61 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/HunterGatherers.elm @@ -0,0 +1,246 @@ +module Config.Pages.Blogs.MainBlog.HunterGatherers exposing (articleHunterGatherers) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleHunterGatherers : BlogArticle +articleHunterGatherers = + { articleName = "Should Modern Humans Eat Like Hunter-Gatherers?" + , articleLink = Path.toString Path.Blog_Huntergatherers + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "huntergatherers" + , articlePublished = "May 14, 2021" + , articleBody = """ +Many Paleo diet advocates claim that hunter-gatherer diets optimally promote the long-term health of human beings. There are typically two primary justifications for this claim— firstly, the fact that hunter-gatherer populations typically appear to be robustly healthy, and secondly, the fact that humans evolved eating these types of diets. While these are technically statements of fact, I find myself forced to take a page out of the Paleo-dieter's playbook, as I remind them that correlation doesn't equal causation. So, let's dig into why their reasoning is flawed. + +Firstly, let me hit you with a thought experiment for a moment. Do you think that the elderly people within a given population would appear either more healthy or less healthy if that population _never_ had access to modern medical technology? Think about this for a moment. You may understandably intuit that their health would probably be worse, correct? But that probably isn't what would happen. They would probably appear healthier, and I'll explain why. + +# SURVIVORSHIP BIAS + +If a population never had access to modern medical technology, one of the things you couldn't reliably do is save sick or injured children. No matter what culture you observe, a sizable proportion of children will develop infectious illnesses. These illnesses, like bacterial or viral infections, are generally mundane by modern standards. However, without modern medicine many children who developed these types of illnesses would likely not survive them. + +Those who are more prone to illness likely do not have the same chances of survival as those who are less prone to illness. As such, why wouldn't the elderly in this hypothetical population present with more robust health as a result? Without medical intervention, the environment is essentially selecting for the fittest possible individuals in our hypothetical population. This would likely generate the appearance of more robust health in the elderly. Consider this carefully for a moment. If you weed out all of the weaker people, of course the remaining population is going to appear stronger. + +This presents a significant problem for Paleo diet advocates who choose to cite the robust health of hunter-gatherer populations as a justification for the Paleo diet, or as a justification for recommending the diet to others. Most Paleo-dieters do seem to be aware of the environmental adversity faced by hunter-gatherer populations. But they often don't seem to appreciate how this also produces significant challenges for their narrative. + +For example, if you remind a Paleo-dieter that hunter-gatherers typically had an average life expectancy of around 30 years, they will often immediately retort by stating that those estimates are confounded by infant and child mortality. But therein lies the problem— they can't have it both ways. A Paleo diet advocate cannot use that argument without tacitly admitting that infant and child mortality is typically enormously high among hunter-gatherer populations. Which it most certainly is [[1](https://www.sciencedirect.com/science/article/abs/pii/S1090513812001237)]. + +![][image1] +[image1]: /blog/huntergatherers/image1.png + +Approximately 26.8% of infants and 48.8% of prepubescent children die in hunter-gatherer populations. With such a high proportion of children dying, how could it be the case that the apparent health of elderly hunter-gatherers is **not** coloured by this? Remember, hunter-gatherer populations likely appear healthier because the least resilient members of those populations are already dead. Paleo diet advocates cannot admit that hunter-gatherer populations had high rates of infant and child mortality without also admitting that the resulting population is a heavily biased sample. + +This type of confounding is known as survivorship bias. Basically, survivorship bias is a type of selection bias that can occur when those who did not survive a selection event or process are overlooked in favour of those who did survive. For example, let's say we were trying to construct better body armour for soldiers to wear in combat. Perhaps we might conduct a study of the soldiers who returned from battle. We could collect bullet wound distribution pattern data to help ascertain where soldiers were most likely to get shot. + +![][image2] +[image2]: /blog/huntergatherers/image2.png + +However, as we see in the graphic above, this sort of analysis would exclude all those who were shot and did **not** survive. It would also overlook the sorts of bullet wound distribution patterns that tended to lead to death, which would actually have given us a significantly clearer picture of how we might construct better body armour. + +Likewise, when Paleo diet advocates claim that we should eat like hunter-gatherers because hunter-gatherers are robustly healthy, they're not appreciating how survivorship bias is confounding their appraisal of hunter-gatherer health. They are essentially overlooking the other fifty percent of the hunter-gatherer population that didn't survive. + +For this reason, it is dubious to use the apparent good health of hunter-gatherers as the basis for the assumption that their diets are appropriate for modern humans. Until Paleo diet advocates can figure out a way to explain why survivorship bias would not be confounding in an evaluation of hunter-gatherer health, they cannot rely on the apparent good health of hunter-gatherer populations to determine the applicability of hunter-gatherer diets to modern humans. In reality, the degree to which hunter-gatherer diets are appropriate for modern humans remains unclear. + +But this isn't the only erroneous argument that Paleo-dieters will use to justify their claims. Often times Paleo diet advocates will also suggest that since we evolved eating certain foods, it is absurd to believe that any of the foods that we evolved eating could pose a long-term health risk to the average person. This reasoning has been used to dismiss robust and well-studied diet-disease relationships, such as saturated fat and cardiovascular disease, red meat and cancer, or even sodium and hypertension [[2](https://pubmed.ncbi.nlm.nih.gov/32428300/)][[3](https://pubmed.ncbi.nlm.nih.gov/28487287/)][[4](https://pubmed.ncbi.nlm.nih.gov/27216139/)][[5](https://pubmed.ncbi.nlm.nih.gov/28655835/)]. + +Right off the bat it is quite easy to identify that this is a blatant appeal to nature fallacy, and can be outright dismissed on that basis alone. However, it is important to describe precisely why this line of reasoning fails. What we really want to know is whether or not foods are necessarily beneficial (or neutral) for long-term health merely because we evolved eating them. + +To explore this question, let's first briefly consider how Darwinian natural selection works. Essentially, it is the process by which random gene mutations are selected for by different environmental challenges. Some mutations are better at dealing with certain environmental challenges than other mutations. As a result, these more adaptive mutations increase an organism's chances of producing offspring. These organisms subsequently pass on these adaptive mutations to their offspring as well. + +![][image3] +[image3]: /blog/huntergatherers/image3.png + +In this image we see that black mice are less likely to get eaten by the bird than tan mice. For this reason, the random mutations that produces black mice rather than tan mice ends up being naturally selected for by the environment. However, environmental challenges like getting eaten aren't quite the same as environmental challenges that affect the long-term health of an organism. + +# SELECTION SHADOW + +Getting eaten when you're young is an acute event. Developing a life-threatening chronic disease in old-age, as a result of a life-long environmental exposure (like a food or nutrient), is a long, protracted event. It is unlikely that selection pressure applies to these two events symmetrically, because adaptations occur as a function of successful reproduction. As a result, the probability that _deleterious_ traits will be successfully selected against likely diminishes with age. + +So, the question ends up being: how long after reproductive age does natural selection still robustly apply to human beings? Surely selection pressure doesn't end at reproductive age, because human children need human adults to raise them and care for them. But does selective pressure exist to a meaningful degree for those in the age ranges that typically associate with life-threatening chronic disease? Some scholars have attempted to estimate the force of natural selection as a function of age [[6](https://pubmed.ncbi.nlm.nih.gov/30124168/)]. + +![][image4] +[image4]: /blog/huntergatherers/image4.png + +Applying the above graph to human beings, our best estimations suggest that the forces of natural selection rapidly wane down to nil shortly after sexual maturity, which would be approximately 16 to 17 years of age. Around the ages of 30 to 40 is when humans likely enter the "selection shadow", which is the zone wherein natural selection no longer robustly applies. + +It seems highly unlikely that the fate of a population could ever hinge on the fitness of middle-aged people who are past their prime. For fun, let's estimate the age range wherein peak human performance is likely to occur. Perhaps we could look at the average age range of Olympic athletes [[7](https://venngage.com/blog/olympics/)]. + +![][image5] +[image5]: /blog/huntergatherers/image5.png + +The average age range of Olympic athletes is between ~22.5 and ~25.5, which is well before the age range seen within the selection shadow. Which honestly makes sense if you think about it. As you age it becomes less likely that natural selection will select against deleterious traits, like losing athletic performance. Once inside the selection shadow, there is likely insufficient selective pressure to extend peak physical performance into higher and higher age ranges. + +The selection shadow may actually be observable in some existing traditional populations as well, such as the Tsimané people of Bolivia. While they are technically hunter/forager-horticulturalists and not strictly hunter-gatherers, they are one of the only traditional populations for which we have decent data regarding the progression of chronic disease. + +Using a measurement of atherosclerotic cardiovascular disease (ASCVD) progression known as coronary artery calcification (CAC) scoring, researchers were able to quantify the prevalence of ASCVD by age group among the Tsimané [[8](https://pubmed.ncbi.nlm.nih.gov/28320601/)]. + +![][image6] +[image6]: /blog/huntergatherers/image6.png + +It should also be noted that CAC scores are indicative of advanced ASCVD [[9](https://pubmed.ncbi.nlm.nih.gov/24530667/)]. The exclusive use of CAC scoring in this study of the Tsimané leaves us with many interpretive challenges. For example, if CAC scores are representative of advanced ASCVD (so called "hard plaques"), what proportion of less advanced ASCVD (so-called "soft plaque") might have been overlooked? It is difficult to say for sure. But the bottom line is that the Tsimané experience increases in chronic disease at approximately the same time as modern populations— well inside the selection shadow. + +Granted, the prevalence of chronic disease in the Tsimané is overall lower than that of Western cultures. But, this could be expected given the fact that their diets and lifestyles are likely preferable to that of Western cultures as well. Not to mention the possible confounding due to survivorship bias, to which they are also not immune [[10](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3502712/)]. The Tsimané have infant mortality rates that are many fold higher than in Western cultures. This means that the Tsimané are vulnerable to the same type of confounding via survivorship bias that we discussed earlier, thus adding more layers of interpretive challenges. + +The methods used to determine the age-ranges of the Tsimané were also questionable, and relied mostly on anecdote and personal judgement rather than objective measurements. + +>_“Birth years were assigned based on a combination of methods including using known ages from written records, relative age lists, dated events, photo comparisons of people with known ages, and cross-validation of information from independent interviews of kin.”_ + +When compared to more objective measures of age, the methods described above would appear to overestimate ages as the age of the subjects increases [[11](https://pubmed.ncbi.nlm.nih.gov/27511193/)]. Below the age of 40, estimates appear to be rather accurate. However, the age estimations used by Kaplan et al. (2017) would seem to overestimate ages by approximately 15 years above the age of 60. After adjusting for this, it is unlikely that CAC prevalence among the Tsimané differs significantly from Western populations. In fact, it might actually be higher. + +# ANTAGONISTIC PLEIOTROPY + +It is also imperative to mention that foods to which we are adapted might actually be more likely to be harmful for us as we age. This is because of a concept in evolutionary biology called antagonistic pleiotropy, which is the most widely accepted explanation for the evolutionary origin of aging [[12](https://pubmed.ncbi.nlm.nih.gov/31870250/)][[13](https://pubmed.ncbi.nlm.nih.gov/30524730/)]. The theory of antagonistic pleiotropy essentially posits some genetic adaptations can trade long-term health for short-term reproductive success. However, it can be inferred that most genetic adaptations are antagonistically pleiotropic. + +Essentially, human DNA tends to degrade over time when it doesn't rightfully need to, as evidenced by the existence of biologically immortal organisms. Human DNA repair is also regulated and gene-specific. Given these facts, the interaction between gene degradation and gene repair is likely to be adaptive. This assigns every gene in our DNA that tends to degrade more with time a single antagonistically pleiotropic trait. Since most DNA in the human genome degrades over time, we can infer that over 50% of genes are antagonistically pleiotropic. + +Since adaptations to foods are no more or less genetic than any other adaptations, we can infer that most adaptations to food are also likely to be antagonistic pleiotropic as well. From here we just infer that antagonistic pleiotropy applies more to ancestral foods than it does to novel foods. Which would suggest that the foods to which we are most strongly adapted would tend to be most antagonistically pleiotropic. This increases the likelihood that ancestral foods trade long-term fitness for short-term reproductive success. + +For example, perhaps adaptations to sodium and saturated fat consumption, like regulated changes in blood pressure or lipoprotein secretion from the liver, may help to carry people to reproductive age without incident. However, those adaptations might actually increase the risk of poorer health later in life if those dietary exposures persist too long. This is why we cannot assume that natural diets are actually appropriate for maintaining the long-term health of modern humans. These adaptations to diet are likely to be antagonistic pleiotropic. + +Without scientific evidence to help inform our attitudes toward the relative health value of novel foods, the health value of those foods remains is a black box. Due to the principle of indifference, we have no particular reason to suspect that truly novel foods will be either beneficial or detrimental. However, if it can be demonstrated that both an ancestral food and a novel food have the same thriving potential during the reproductive years, we can actually infer that the novel food is to be favoured. + +Novel foods do not belong to the domain of foods that have the potential to be antagonistic pleiotropic, since we did not evolve consuming them. Conversely, the ancestral food in our scenario is likely to be antagonistically pleiotropic. Thus, the novel food is to be favoured over the ancestral food in this case. This concept can be illustrated clearly with a couple of simple tables. + +![][image7] +[image7]: /blog/huntergatherers/image7.png + +To summarize, we can infer that ancestral foods are likely to have both positive short-term health value, as well as negative long-term health value. However, in the absence of empirical data, our doxastic attitude toward the health value of novel foods should be one of agnosticism. When the thriving potential of novel foods and ancestral foods show non-inferiority, we infer that the novel foods is less likely to be detrimental for long-term health. Altogether, the argument can be summarized like this: + +![][argument1] +[argument1]: /blog/huntergatherers/argument1.png + +Essentially, once you equalize advantages across a given novel food and a given ancestral food, the inherent disadvantages of antagonistic pleiotropy would leave us favouring the novel food over the ancestral food for long-term health. From here we can infer a priori that a diet that maximizes benefits and minimizes risks for the most amount of people is likely to be a diet that is on some level unnatural or non-ancestral. It is also important to discuss what this position is **not** arguing. It is **not** being argued that every novel food is going to be superior to every ancestral food, and it is **not** being argued that all ancestral foods are bad. + +As an aside, one might point out that while ancestral foods like meat seem to increase the risk of many diseases, while other ancestral foods like fruit seem to decrease the risk of many diseases. So what gives? My arguments apply equally to fruit, and adaptations of fruit are also likely to be antagonistically pleiotropic. However, it is likely the case that the antagonistically pleiotropic pathways that are influenced by foods like fruit are less impactful than those influenced by foods like meat. + +Diet is about substitutions. Replacing meat with fruit lowers risk, but that doesn't mean that fruit is without long-term harms or risks as well. Bearing this in mind, I posit that if we truly want to maximize the thriving potential of food, we must engineer our own food. Assuming that no diet of natural foods will actually lower risk to zero, if we wanted to improve the health value of food even more, how would we accomplish this without artificially manipulating those foods? In fact, we have evidence that the health value of natural foods can be improved, with examples like Golden rice. + +# OPTIMAL DIETS + +Lastly, it has also been suggested by some Paleo diet advocates that certain hunter-gatherer migrant studies provide us with a justification for why hunter-gatherer diets are appropriate for modern humans. This is due to the fact that these studies demonstrate that when certain hunter-gatherer populations transition from their traditional diets to more Westernized diets, they experience increases in chronic disease risk [[14](https://pubmed.ncbi.nlm.nih.gov/6937778/)][[15](https://pubmed.ncbi.nlm.nih.gov/7462380/)]. However, this is ultimately irrelevant to my point. + +The fact that Western diets increase disease risk relative to certain hunter-gatherer diets does not actually lend any credibility to the notion that modern humans can achieve robust health that is equal to that of hunter-gatherers merely by emulating their diets. Perhaps the Western diet is so bad that it would negatively impact the health of any human population who ate it over the long-term. But, it could also be the case that hunter-gatherer diets are still inappropriate for modern humans in many ways— ways that may not be obvious for the reasons I've discussed throughout this article. These are not incompatible concepts. + +The most I would have to grant is that a hunter-gatherer diet is likely an improvement over a Western diet. But that is a far cry from ascertaining that a hunter-gatherer diet is optimal for the long-term health of modern humans. This is just a gross overextrapolation from altogether irrelevant data. + +The last inference is the icing on the cake, and a bit more convoluted, but it is necessary to argue it to an ancestral diet advocate. This is next argument cuts to the core of their epistemology regarding ancestral diets and health. All we need to do is prime the ancestral diet advocate for the inference by asking them if they identify as "**F**" (as defined below). If they do, then we proceed. If they don't, then their motivations for advocating for ancestral diets diets isn't clear at all. + +![][argument2] +[argument2]: /blog/huntergatherers/argument2.png + +Essentially, if our interlocutor identifies as "**F**", then all we need to do is demonstrate to them that "**N**" exists, and we're essentially home free. If they accept that "**N**" exists and they also identify as "**F**", then they should be in favour of substituting such a novel food for such an ancestral food. If they don't, then they have a contradiction. This is where the ancestral diet advocate could face quite a dilemma. + +However, there is a way around this for them, but it's absurd. They can simply reject the evidence for "**N**" existing. Which would be a hilarious move for them to make, but they can make it if they want. However, implicit in this move is the rejection of all evidence that supports "**N**" existing, regardless of the quality. + +For example, if they maintain that animal fat consumption is more supportive of health than vegetable fat consumption, they'd need to reject the multiple meta-analyses and meta-regression analyses of randomized controlled trials on the subject, as well as the consistency of effect in seen in high internal validity epidemiology. The implications of taking such a position are hilarious, because they could very easily have to also reject many other diet/lifestyle-disease relationships that they likely take for granted on much weaker evidence. Such as exercise and alcohol consumption affecting cardiovascular disease risk. + +It is likely that the vaunted "optimal human diet", which is to say a diet that maximizes long-term health for the greatest number of people, has actually yet to be discovered. Ultimately, to answer the question of what foods are healthy, we need science. We need robust outcome data on modern human beings, not speculation and appeal to nature fallacies. We need this science to teach us how to eat. + +# UPDATE + +Chris Masterjohn has apparently written a [lengthy response](https://chrismasterjohnphd.substack.com/p/ancestral-health-vs-antagonistic) to my position on antagonistic pleiotropy and how it relates to the long-term health value of ancestral foods. Many have asked me to rebut the article, but it's not clear to me why I should. He's not interacting with the argument at all. Let me give you an example to help illustrate my feelings in this matter. If I give someone an argument, and their response is to turn around and scream at a wall, should I feel any sort of drive to "rebut" the screaming? I don't think so. + +Constructing a lengthy reply to Masterjohn's article would only serve to give readers the impression that he actually said anything of substance against my position, which he hasn't. When someone tells me that they disagree with an argument that I have presented, I take this to mean one of two things. Either they have an argument of their own that forms a conclusion that is the negation of at least one of my premises, or they give at least one of my premises such low credence that they just deny that it's true. Masterjohn didn't do either in his article. + +Masterjohn just spends the article giving low credence to concepts that aren't even entailed from the argument itself, so why should I care? It's doubly hilarious to expect me to rebut his article when he actually signed off on the entailments of my position at least twice in our [debate](https://chrismasterjohnphd.substack.com/p/the-ancestral-health-debate) when he was actually interacting with the argument itself and not going off on tangents. Once at [58:26](https://youtu.be/n1I5xgvERbo?t=3506) and again at [1:39:16](https://youtu.be/n1I5xgvERbo?t=5956). Not sure what more there is to comment on here. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Anthony A. Volka and Jeremy A. Atkinson" + , title = "Infant and child death in the human environment of evolutionary adaptation" + , journal = "Evolution and Human Behavior" + , year = "2013" + , link = "https://www.sciencedirect.com/science/article/abs/pii/S1090513812001237" + } + , { author = "Lee Hooper, et al." + , title = "Reduction in saturated fat intake for cardiovascular disease" + , journal = "Cochrane Database Syst Rev" + , year = "2020" + , link = "https://pubmed.ncbi.nlm.nih.gov/32428300/" + } + , { author = "Arash Etemadi, et al." + , title = "Mortality from different causes associated with meat, heme iron, nitrates, and nitrites in the NIH-AARP Diet and Health Study: population based cohort study" + , journal = "BMJ" + , year = "2017" + , link = "https://pubmed.ncbi.nlm.nih.gov/28487287/" + } + , { author = "Andrew Mente, et al." + , title = "Associations of urinary sodium excretion with cardiovascular events in individuals with and without hypertension: a pooled analysis of data from four studies" + , journal = "Lancet" + , year = "2016" + , link = "https://pubmed.ncbi.nlm.nih.gov/27216139/" + } + , { author = "Rik H G Olde Engberink, et al." + , title = "Use of a Single Baseline Versus Multiyear 24-Hour Urine Collection for Estimation of Long-Term Sodium Intake and Associated Cardiovascular and Renal Risk" + , journal = "Circulation" + , year = "2017" + , link = "https://pubmed.ncbi.nlm.nih.gov/28655835/" + } + , { author = "Thomas Flatt and Linda Partridge" + , title = "Horizons in the evolution of aging" + , journal = "BMC Biol" + , year = "2018" + , link = "https://pubmed.ncbi.nlm.nih.gov/30124168/" + } + , { author = "Ryan McCready" + , title = "For Olympic Athletes, Is 30 the New 20?" + , journal = "" + , year = "2016" + , link = "https://venngage.com/blog/olympics/" + } + , { author = "Hillard Kaplan, et al." + , title = "Coronary atherosclerosis in indigenous South American Tsimane: a cross-sectional cohort study" + , journal = "Lancet" + , year = "2017" + , link = "https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(17)30752-3/fulltext" + } + , { author = "Mahesh V Madhavan, et al." + , title = "Coronary artery calcification: pathogenesis and prognostic implications" + , journal = "J Am Coll Cardiol" + , year = "2014" + , link = "https://pubmed.ncbi.nlm.nih.gov/24530667/" + } + , { author = "Michael Gurven" + , title = "Infant and fetal mortality among a high fertility and mortality population in the Bolivian Amazon" + , journal = "Soc Sci Med" + , year = "2012" + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3502712/" + } + , { author = "Horvath et al." + , title = "An epigenetic clock analysis of race/ethnicity, sex, and coronary heart disease" + , journal = "Genome Biol" + , year = "2016" + , link = "https://pubmed.ncbi.nlm.nih.gov/27511193/" + } + , { author = "J Mitteldorf" + , title = "What Is Antagonistic Pleiotropy?" + , journal = "Biochemistry (Mosc)" + , year = "2019" + , link = "https://pubmed.ncbi.nlm.nih.gov/31870250/" + } + , { author = "He and Zhang" + , title = "Toward a molecular understanding of pleiotropy" + , journal = "Genetics" + , year = "2006" + , link = "https://pubmed.ncbi.nlm.nih.gov/16702416/" + } + , { author = "J M Stanhope and I A Prior" + , title = "The Tokelau island migrant study: prevalence and incidence of diabetes mellitus" + , journal = "N Z Med J" + , year = "1980" + , link = "https://pubmed.ncbi.nlm.nih.gov/6937778/" + } + , { author = "J M Stanhope and I A Prior" + , title = "The Tokelau Island Migrant Study: serum lipid concentration in two environments" + , journal = "J Chronic Dis" + , year = "1981" + , link = "https://pubmed.ncbi.nlm.nih.gov/7462380/" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/MeatApologetics.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/MeatApologetics.elm new file mode 100755 index 0000000..ae21e11 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/MeatApologetics.elm @@ -0,0 +1,415 @@ +module Config.Pages.Blogs.MainBlog.MeatApologetics exposing (articleMeatApologetics) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleMeatApologetics : BlogArticle +articleMeatApologetics = + { articleName = "A Systematic Appraisal of Pro-meat Apologetics" + , articleLink = Path.toString Path.Blog_Meatapologetics + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "meatapologetics" + , articlePublished = "Apr 13, 2022" + , articleBody = """ +Recently, a controversial paper reviewing both the health and environmental benefits of animal foods was published to the journal, Animal [[1](https://pubmed.ncbi.nlm.nih.gov/35158307/)]. This was brought to my attention by one of my patrons, who specifically requested that I respond to the first section of the article, titled "why the nutritional case against animal source foods may be overstated". My response was originally supposed to be a reaction video for my patrons. But, the more of the paper that I read, the more I realized that this would require a much more systematic appraisal. + +Although I have only reviewed one section of the paper, I am told that the rest of the paper is also filled with questionable claims, falsehoods, half-truths, and dubious reasoning. As such, I will leave it to people with more domain knowledge to comment on the latter sections of the paper. As for the section that I was tasked with critiquing, I'm completely comfortable with systematically evaluating the claims contained within it. So, let's get into it. + +>_Even though advocacy for moderate to heavy restriction [of animal foods] is echoed by various public heath institutions worldwide, suggesting apparent consensus, the scientific debate is not settled as the evidence has been challenged by various scientists, both for red meat (Truswell, 2009; Hite et al., 20100; Alexander et al., 2015; Klurfeld, 2015; Kruger & Zhou, 2018; Händel et al., 2020; Hill et al., 2020; Johnston et al., 2019; Leroy and Cofnas, 2020; Sholl et al., 2021)_ + +**Weasel words:** + +Citing a couple of authors to represent the "public heath institutions" that advocate for animal food restriction, whilst also citing ten authors who challenge this notion, is a painfully misleading move. The evidence for reducing most animal foods is actually extensive, with only a small handful of exceptions. Not only that, but it's also questionable whether or not any public health institutions actually advocate for the moderate or heavy restriction of these exceptions. It's unclear, because the terms "moderate" and "heavy" are not clearly defined. + +**Motte and Bailey:** + +The paragraph began by referencing the presumed attitudes of "public health institutions" toward animal foods more broadly. A truly extraordinary claim that is not supposed by any of the their reference material. They then follow it up by citing authors who have pushed back specifically on these institutions' attitudes toward red meat and saturated fat. Most public health institutions that are concerned with nutrition do indeed advocate for the restriction of these foods. + +>_...and saturated fat, which is not exclusive to animal source foods (Astrup et al., 2020; Krauss & Kris Etherton, 2020)._ + +**Red herring:** + +While there are some plant foods that are high in saturated fat, we need not consume them. Those sources of saturated fat can be avoided on an animal food restricted diet. This is less true of the animal foods that these authors are specifically attempting to defend. Not only that, but no public health institutions are advocating for the consumption of plant foods like coconut or palm oil. So, I'm not even sure what this point is meant to address. + +# EPIDEMIOLOGY THO + +>_Among other concerns, one of the objections is that pleas for restriction are based on conflicting findings and observational relationships that are not necessarily causal, suffering from confounding and bias (Grosso et al., 2017; Händel et al., 2020; Hill et al., 2020; Leroy & Barnard, 2020; Nordhagen et al., 2020)._ + +**Potential contradiction:** + +Confounding is a causal concept. All posited confounders need to be validated as genuine confounders using evidence that meets these authors' bar for causal inference. Otherwise we don't have a reason to consider them confounders at all. The truth is that virtually all accepted confounders in this domain are validated via epidemiological data itself. I can formalize the argument like this: + +![][argument1] +[argument1]: /blog/meatapologetics/argument1.png + +In the above syllogism, the authors could very easily be affirming P and ¬P. If the authors are rejecting epidemiological evidence while simultaneously positing confounders that will be validated with epidemiological evidence, their position would entail a contradiction. + +>_Unwarranted use of causal language is nonetheless widespread in the interpretation of nutritional epidemiological data, thereby posing a systemic problem and undermining the field’s credibility (Cofield et al., 2010; Ioannidis, 2018)._ + +**Red herring:** + +Firstly, there is no reference for the claim that causal language is widespread in the interpretation of nutritional epidemiological data. Secondly, even if it were true, nutritional epidemiology has excellent validation for both its results as well as the underpinning methodology, considering its limitations and shortcomings. + +If the goalpost for causal inference is human experiments, then the use of causal language is likely to be warranted more often than it is unwarranted. This is due to the high degree of concordance between the results of nutritional epidemiology and randomized controlled trials [[2](https://pubmed.ncbi.nlm.nih.gov/34526355/)][[3](https://pubmed.ncbi.nlm.nih.gov/23700648/)][[4](https://pubmed.ncbi.nlm.nih.gov/34308960/)]. Regardless, it's not clear how the widespread use of causal language poses either a systemic problem or undermines the field's credibility. Again, it just isn't clear what the point of these claims is supposed to be. + +>_Moreover, the associations between red meat and metabolic disease have not only been evaluated as weak..._ + +**Red herring:** + +It is not true that these associations are weak. When meta-analytically summated the associations are often close to linear. Not only for total mortality but also for many major chronic diseases [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)][[6](https://pubmed.ncbi.nlm.nih.gov/29039970/)][[7](https://pubmed.ncbi.nlm.nih.gov/28397016/)]. The associations generally only appear weak when there are certain sources of bias present, such as inadequate exposure contrasts, follow-up times, participant numbers, or even overadjustment for mediators. + +>_...translating into small absolute risks based on low to very low certainty evidence (Johnston et al., 2019)..._ + +**Red herring:** + +Absolute risk and certainty are concepts that don't strongly interact. You can have low absolute risks and a high degree of certainty, such as with successful human trials with event-based stopping conditions. You can also have high absolute risks and low certainty, such as with underpowered human studies with high event rates. + +It's also not clear why the authors would choose to favour absolute risk over relative risk, considering that the maximum possible absolute risk differences are going to be dictated by event rates in the comparator population. This concept can be easily illustrated referring to populations that have longer follow-up times, such as with the literature on LDL and cardiovascular disease risk [[8](https://pubmed.ncbi.nlm.nih.gov/30571575/)]. + +![][image1] +[image1]: /blog/meatapologetics/image1.png + +The distance between the two green lines represents the absolute risk difference between low and high LDL over 10 years. Whereas the distance between the two red lines represents the absolute risk difference between low and high LDL over 30 years. Here we can see that if insufficient follow-up is observed, absolute risk differences will inevitably be smaller. This is because event rates naturally increase with time. + +The meta-analysis by Vernooij et al. (2019) that the authors cited to support the claim of "small" absolute risk differences with red meat had a median follow-up time of 10.5 years for cardiovascular disease [[9](https://pubmed.ncbi.nlm.nih.gov/31569217/)]. Despite this limitation, Vernooij et al. did not appear to have made any substantive attempt to explore the heterogeneity between their included studies with subgroup analyses or meta-regression analyses. Had they done so, they could have subgrouped by follow-up time and inevitably found that the absolute risks were higher in cohorts with longer follow-ups. + +But we can take it a step further. We can reveal the inconsistency in their reasoning by formalizing their argument against nutritional epidemiology, and showing that their criticisms apply to, say, human experiments as well. + +![][argument2] +[argument2]: /blog/meatapologetics/argument2.png + +Using the authors' own logic, we can show that they would have to dismiss human experimental evidence on the same basis. This is because human experimental evidence is vulnerable to the same types of limitations that the authors are positing as presumably invalidating for nutritional epidemiology. + +>_Associations are particularly noticeable in North America, where meat is often consumed through a fast-food window and where high-meat consumers tend to also eat less healthy diets and follow less healthy lifestyles in general. In a Canadian study, eating more meat was only associated with more all-cause cancer incidence for the subpopulation eating the lowest amounts of fruits and vegetables (Maximova et al., 2020)._ + +**Potential contradiction:** + +Again, the authors appear to be dismissing nutritional epidemiological evidence on the basis of confounding, without justifying their asymmetrical attitudes toward the supporting evidence for the confounders they're positing. What is true of the evidence between fruits and vegetables and cancer and the evidence between meat and cancer, such that we can infer causality for one and not the other? + +**Equivocation:** + +This is the second time the authors have shifted the goalpost regarding what types of animals foods that are in question. First they were discussing animal foods simpliciter, only to shift the goalpost to red meat. Now they were talking about red meat, and have shifted goalposts to meat as a broad category. Whether this is intentional or just the result of sloppy writing, it is not a good look for the authors. + +>_Several large-scale population-based studies, performed in individuals with ‘healthy lifestyles’, such as the Oxford-EPIC Study (Key et al., 2003) and the 45-and-Up Study (Mihrshahi et al., 2017), also find that the negative effects of red meat consumption on all-cause mortality become benign._ + +**Red Herring:** + +From the wider literature, the typical threshold for harm with meat is at approximately 100g/day on average [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)]. + +![][image2] +[image2]: /blog/meatapologetics/image2.png + +The Oxford-EPIC cohort lacks power in those ranges [[10](https://pubmed.ncbi.nlm.nih.gov/23497300/)]. Data on the exposure contrasts in the 45-and-Up Study are even more unpersuasive [[11](https://pubmed.ncbi.nlm.nih.gov/28040519/)]. We have far more robust data than this, with better internal validity, follow-up times, and measurements. + +In this Japanese cohort with a follow-up of 14 years, diet and lifestyle covariates were largely balanced across the quantiles of red meat intake [[12](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. In fact, many covariates we'd suspect to be detrimental actually favoured meat consumption. Despite this, total meat was still associated with a statistically significant 21% increase in all-cause mortality among men between the ages of 65 and 79 years old, and a borderline-significant 41% increase in all-cause mortality risk among women between the ages of 45 and 54 years old. + +![][image3] +[image3]: /blog/meatapologetics/image3.png + +These results could indicate that meat consumption is more likely to lead to premature death due to an unmeasured cause earlier in life than with men. Perhaps the seemingly premature increase in mortality could plausibly be attributed to an unmeasured female-specific endpoint, such as breast cancer [[13](https://pubmed.ncbi.nlm.nih.gov/31389007/)]. + +Again, just to hammer the point home, we can actually defeat the authors' position with a simple modus tollens. + +![][argument3] +[argument3]: /blog/meatapologetics/argument3.png + +Given the weight and strength of the evidence in favour of meat restriction for longevity, it would be quite hilarious to see the authors attempt to reject P2. The evidence they referenced from the Oxford-EPIC cohrot and the 45-and-Up Study could be used in an attempt to reject P2. However, that evidence is very easily superseded by higher internal validity evidence with greater power, not to mention in populations that don't suffer from the same supposed confounding. + +>_If red meat were indeed causally driving the associations, one would anticipate finding stronger effects in systematic reviews looking specifically at red meat intake (able to evaluate a large intake gradient) compared to dietary pattern studies (smaller intake gradient) (Johnston et al., 2018)._ + +**Potential contradiction:** + +The association between all-cause mortality and red meat consumption is stronger than the inverse association between all-cause mortality and fruit and vegetable consumption in the most well-done systematic reviews [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)]. Again, what is true of the association between fruits and vegetables and all-cause mortality and red meat and all-cause mortality, such that we can infer causality for one and not the other? + +>_On the contrary, the absolute risk reductions from both reviews specific to intake versus dietary pattern (Johnston et al., 2019) were very similar in their magnitude of effect, indicating the possibility that, even after adjustment, a multitude of other diet or lifestyle components may be confounding the associations irrespective of whether they are negative or positive (Zeraatkar & Johnston, 2019)._ + +**Red herring:** + +This literally just doesn't make any sense. Similar effect sizes are not indicators of multicollinearity or interaction between exposures. I have no idea how the authors come to this conclusion. If I punch people in the face on Mondays and kick people in the balls on Wednesdays, the risk of injury is equal between both Mondays and Wednesdays, but Mondays and Wednesdays aren't the same thing. Just as dietary patterns and individual foods aren't the same thing. + +Just because the contribution of meat and diet/lifestyle factors have similar magnitudes of effect doesn't mean a mutual adjustment would do anything to either effect. Both exposures could be interacting with the outcome without interacting with each other. This is easily one of the most bizarre claims in the entire paper. They're also comparing effect sizes between analyses investigating different populations. It's just unfounded speculation. + +>_While such troubling incongruity can be partially ascribed to differences in methodological set-up between studies, it has been hypothesised that the associations found in the West could at least partially be seen as cultural constructs generated by responses to norms of eating right (Hite, 2018)._ + +**Red herring:** + +Again, these associations are seen in populations that are not consuming Westernized diets [[12](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. I'm not entirely sure why the authors seem to believe that these associations are limited to Western populations eating Western diets with Western attitudes toward health. + +>_An important question to consider, therefore, is "whether intake of animal and plant proteins is a marker of overall dietary patterns or of social class" (Naghshi et al., 2020). Upper-middle classes, who are particularly sensitive to the ideologies of eating virtuous, tend to eat less red meat and saturated fat because of what they symbolise, and because of what they are being told by authorities and moralising societal discourse (Leroy & Hite, 2020). However, those same people are also more educated, wealthier, and healthier in general (Leroy & Cofnas, 2020)._ + +**Equivocation:** + +Yet again, the authors have shifted their goalpost. They went from animal foods to red meat, from red meat to meat, and now from meat to animal protein. Again, it's unclear if this is intentional or just really atrocious writing on the part of the authors. But, I will attempt to keep my rebuttals relevant to the authors' most recently stated goalpost. + +**Bullshit:** + +These associations are seen even when socioeconomic status are largely balanced across the quantiles of animal protein intake [[14](https://pubmed.ncbi.nlm.nih.gov/33624505/)]. In fact, in this analysis of the Women's Health Initiative Observational Study by Sun et al. (2021), those who consumed the most plant protein were typically in the lower socioeconomic strata. This is in direct opposition to their speculation about socioeconomic status confounding. Additionally, replacing animal protein with plant protein associates with a reduced risk of all-cause mortality even in populations that are situated in a higher socioeconomic stratum [[15](https://pubmed.ncbi.nlm.nih.gov/27479196/)]. + +>_Even if multivariable models are used to account for such confounding effects as smoking, alcohol consumption, or obesity, it may not be possible to disentangle the effects of all dietary and lifestyle factors involved, especially given the low certainty of evidence._ + +**Potential contradiction:** + +Yet again, we find ourselves needing to ask the authors what is true of the evidence between smoking/alcohol/obesity and health outcomes and animal foods/red meat/meat/animal protein and health outcomes such that we can infer causality for one and not the other? Thus far, the authors have not divulged any clear answers to this question in their paper. + +>_Therefore, WHO (2015) mentions that eating unprocessed red meat "has not yet been established as a cause of cancer” (emphasis added)..._ + +**Appeal to authority:** + +Causal inference is an epistemic question, informed and largely adjudicated by statistics. It's rather interesting that the authors tend to offer next to no critical appraisal of methodology or interpretation when the results concord with their (obvious) biases. So far any evidence against animal food consumption as been scrutinized extensively, albeit fallaciously, but the same attempt at rigour is not extended to the counterevidence. + +>_...while IARC (2015) stated that "chance, bias, and confounding could not be ruled out” with respect to the association between red meat intake and colorectal cancer. According to some (e.g., Hite, 2018), nutritional epidemiology of chronic disease is thus at risk of capturing cultural artefacts and health beliefs within observational relationships, rather than reliably quantifying actual health effects. Such observations are then used to reinforce dietary advice, potentially creating a positive feedback loop (Leroy & Hite, 2020)._ + +**Red herring:** + +This is true of any association, as per the Duhem-Quine thesis [[16](https://en.wikipedia.org/wiki/Duhem%E2%80%93Quine_thesis)]. Causal inference is a separate consideration, and the fact that auxiliary hypotheses can be proposed is tangential. The authors imply that the ability to appeal to these auxiliary hypotheses presents a barrier to reliably quantifying actual health effects. What type of evidence do they propose needs to be used, then? Because no scientific evidence is free from this limitation. + +>_This problem is further underlined by the lack of support from intervention trials (O’Connor et al., 2017; Turner & Lloyd, 2017; Leroy & Cofnas, 2020), which are designed to account for known and unknown confounders, and the fact that the mechanistic rationale for red meats remains speculative at best (Delgado et al., 2020; Leroy & Barnard, 2020)._ + +**Equivocation:** + +The authors' references don't support the claim. Until this point they were discussing the impact of meat products on disease outcomes, not disease risk markers or biochemical mechanisms. However, one of the only studies that did attempt to replace animal foods in the diet also showed one of the largest effect sizes in reducing the risk of acute myocardial infarction [[17](https://pubmed.ncbi.nlm.nih.gov/7911176/)]. On top of that, the most well-controlled human mechanistic studies also support the inference that meat increases CVD risk factors [[18](https://pubmed.ncbi.nlm.nih.gov/31161217/)]. + +>_Taken together, various public health organisations make a case for the reduction of animal source foods based on their interpretation of the prevailing scientific evidence. Others, however, argue that conclusive proof for (some of) these recommendations is missing, particularly given the contribution of animal source foods to closing essential micronutrient gaps (Leroy & Barnard, 2020)._ + +**Potential contradiction:** + +The authors need to define "conclusive proof", and demonstrate how it has been shown for all variables that they are positing as confounding. However, it's beginning to sound as though they're getting close to planting their goalpost at human experimental evidence. However, this would be a mistake, as they've already posited a number of confounders for which we have no human experimental evidence for causal interaction with the outcomes that have been discussed. + +# NATURAL THO + +>_Arguing for strong reductions contradicts common-sense approaches, especially from an anthropological perspective (Gupta, 2016; Leroy et al., 2020a). Meat, marrow, and seafood are evolutionary components of the human diet, even if they may have displayed some nutritional and biochemical differences compared to what is produced today in intensified operations, e.g., with respect to fat composition (Kuipers et al., 2010; Manzano-Baena & Salguero-Herrera 2018) and the presence of phytochemicals (van Vliet et al., 2021a, and 2021b). The health impact of these differences may be significant but remains difficult to quantify, though polyunsaturated fatty acids/saturated fatty acids and omega 3/6 ratios of wild ruminants living in current times are similar to pasture-raised (grass-fed) beef, but dissimilar to grain-fed beef (Cordain et al., 2002b). Be that as it may, the abundant consumption of animal source foods over 2.5 million years has resulted in an adapted human anatomy, metabolism, and cognitive capacity that is divergent from other apes (Milton, 2003; Mann, 2018). Also, many hunter-gatherer populations consume far larger amounts of meat and other animal source foods (sometimes > 300 kg/p/y), than what is now consumed in the West (around 100 kg/p/y). This is likely still much below what was once valid for early humans preying on megafauna (Ben-Dor & Barkai, 2020). On a caloric basis, the animal:plant ratio of Western diets (about 1:2 in the US; Rehkamp, 2016) is the inverse of most pre-agricultural diets (mean of 2:1; Cordain et al., 2000). Such high amounts of animal source foods are not necessarily indicative of a health advantage, but it can be assumed that animal source foods are at least compatible with good health._ + +**Equivocation:** + +Apparently we've gone from talking about animal foods to talking about red meat, from talking about red meat to talking about meat, from talking about meat to talking about animal protein, and now from talking about animal protein to to talking about meat, marrow, and seafood. This is truly astonishing. Especially considering that now they're including seafood, which no major public health institution recommends that we eschew. + +**Appeal to nature:** + +Just because meat is an integral part of our evolutionary history does not actually mean that it is necessarily beneficial for the long-term health of modern humans. In fact, there are valid reasons to suspect that foods to which we are most strongly adapted may actually be more detrimental for long-term health, via antagonistic pleiotropy. I discuss this in a previous blog article [[19](https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers)]. + +Appeal to nature fallacies basically affirm that because something is natural (or in this case, "evolutionary"), it then follows that it is good. However, taking this position leads to hilarious consequences. Let me demonstrate by formalizing the authors' position once more. + +![][argument4] +[argument4]: /blog/meatapologetics/argument4.png + +It should be obvious straight away why this is problematic. There are plenty of things that are natural or "evolutionary" that we also consider to be undesirable, and we can illustrate that with a reductio ad absurdum. + +![][argument5] +[argument5]: /blog/meatapologetics/argument5.png + +If animal foods are good by virtue of them being natural or "evolutionary", the authors will have to explain to me why something like rape is not good. As they share the same property of being evolutionary. + +>_So-called "diseases of modernity" were rare in ancestral communities, in contrast to what is now seen in regions where Western diets rich in energy-dense foods and (sedentary) lifestyles prevail. In the US, 71% of packaged foods are ultraprocessed (Baldridge et al., 2019)..._ + +**Red herring:** + +There are a number of epistemic barriers that challenge inferences about the long-term health value of more primitive living conditions for modern humans, such as survivorship bias [[20](https://pubmed.ncbi.nlm.nih.gov/25489027/)]. Primitive cultures tend to have very high rates of infant and child mortality, which modern medicine can rescue. When those children are _not_ saved, the population will appear more robust by weeding out less resilient people. When those children _are_ saved, you increase the number of less resilient people within the population. + +>_Even if this has been described as a "paradox” (Cordain et al., 2002a), it mainly indicates that today’s assumptions about healthy diets, as being de facto low in red meat and saturated fat, are flawed and represent a romanticised Western viewpoint._ + +**Strawman:** + +No public health institutions are suggesting that healthy diets are _defined_ by the absence of red meat and saturated fat. Rather, diets lower in red meat and saturated fat tend to be healthier than diets that are higher in red meat and saturated fat. But, this doesn't mean that other factors don't also matter. These dietary patterns have many other characteristics that contribute to healthfulness that have nothing to do with red meat or saturated fat. + +>_To sum up, although animal source foods are primary components of the Western diet, they are also evolutionary foods to which the human body is anatomically and metabolically adapted, up to the level of the microbiome (Sholl et al., 2021), and has always obtained key nutrients from._ + +**Appeal to nature:** + +The status of red meat as an evolutionary food is tangential to the question of whether or not red meat increases long-term disease risk in modern populations. Investigations into the health status of primitive cultures is insufficient to inform this question. + +>_Although further research may be needed, their role in chronic diseases could as well be a mere artefact based on association with the actual damage from other dietary and lifestyle factors. It is uncertain yet possible that high intake of red meat could become problematic in a contemporary Western context._ + +**Red herring:** + +Again, this is true of any association. Causal inference is a separate consideration, and the fact that auxiliary hypotheses can be proposed is, again, tangential. + +**Potential contradiction:** + +For the last time, posited confounders require validation that meets the authors' bar for causal inference. Thus far, no such bar has been provided and no validation was offered for any of the confounders that were posited. That which is stated without evidence can be dismissed without evidence. Anyone can baselessly speculate. + +# TSIMANE THO + +>_Moreover, contemporary cultures that have maintained traditional diets and lifestyles typically have low burdens of chronic disease (e.g., Kaplan et al., 2017)._ + +**Red herring:** + +The authors reference a cross-sectional analysis of the Tsimane population conducted by Kaplan et al. (2017) [[21](https://pubmed.ncbi.nlm.nih.gov/28320601/)]. It's questionable whether or not their results qualify as low burdens of chronic disease for that population in the first place. + +![][image4] +[image4]: /blog/meatapologetics/image4.png + +This is made even more questionable after accounting for ~15-year age overestimations that were likely to have biased their results [[22](https://immunityageing.biomedcentral.com/articles/10.1186/s12979-019-0165-8)][[23](https://pubmed.ncbi.nlm.nih.gov/27511193/)][[24](https://pubmed.ncbi.nlm.nih.gov/34038540/)]. After this adjustment, the cardiovascular disease burden within the Tsimane is likely largely comparable with the results of the MESA cohort. + +![][image5] +[image5]: /blog/meatapologetics/image5.png + +Here on the chart above we see Tsimane age estimates using DNA methylation on the Y axis, against Tsimane age estimates using the methods of Kaplan et al. on the X axis. Kaplan et al. (2017) estimated the ages of the Tsimane participants using written records, relative age lists, dated events, photo comparisons of people with known ages, and cross-validation of information from independent interviews of kin. + +Apparently such methodology would appear to introduce a fair amount of bias, as the more objective measures of age tend not to agree with them. Furthermore, all of these more robust measures of age seem to point to overestimations on the party of Kaplan et al. that are all roughly in the same ballpark of 10-20 years. + +**Equivocation:** + +The category of "chronic disease" is a superset, including many individual diseases. The only disease endpoint investigated in the authors' reference was cardiovascular disease progression (measured by coronary artery calcification). So, I'm not sure why they feel justified in referring to chronic disease as a broad category with this single reference. + +To wrap this up, I'd just like to say that I've never before seen a peer-reviewed publication that was so densely packed with logical fallacies and inconsistencies. Mind you this is only the first section, related to disease risk. I was only responsible for appraising this section, but from what I've been told about the remainder of the paper it could potentially be even more absurd. Which is scary to me. + +Altogether the authors were guilty of eleven red herrings, six potential contradictions, five equivocations, and eight other assorted fallacies. From what I've read, no truly persuasive arguments were offered in favour of their view, and their attempts to criticize the prevailing paradigm were uniformly hollow and superficial. + +Ultimately, the authors actually describe the absurdity of their approach better than I could in the introduction of their paper. Truly astonishing. + +>_Due to constraints in format, we restrict ourselves to generating a perspective that favours concepts over details and methodological data._ + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Leroy, Frédéric, et al." + , title = "Animal Board Invited Review: Animal Source Foods in Healthy, Sustainable, and Ethical Diets - An Argument against Drastic Limitation of Livestock in the Food System" + , journal = "Animal: An International Journal of Animal Bioscience" + , year = "2022" + , link = "https://doi.org/10.1016/j.animal.2022.100457" + } + , { author = "Schwingshackl, Lukas, et al." + , title = "Evaluating Agreement between Bodies of Evidence from Randomised Controlled Trials and Cohort Studies in Nutrition Research: Meta-Epidemiological Study" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2021" + , link = "https://doi.org/10.1136/bmj.n1864" + } + , { author = "Moorthy, Denish, et al." + , title = "Concordance Between the Findings of Epidemiological Studies and Randomized Trials in Nutrition: An Empirical Evaluation and Citation Analysis: Nutritional Research Series, Vol. 6" + , journal = "Agency for Healthcare Research and Quality (US)" + , year = "2013" + , link = "http://www.ncbi.nlm.nih.gov/books/NBK138246/" + } + , { author = "Beyerbach, Jessica, et al." + , title = "Evaluating Concordance of Bodies of Evidence from Randomized Controlled Trials, Dietary Intake, and Biomarkers of Intake in Cohort Studies: A Meta-Epidemiological Study" + , journal = "Advances in Nutrition (Bethesda, Md.)" + , year = "2022" + , link = "https://doi.org/10.1093/advances/nmab095" + } + , { author = "Schwingshackl, Lukas, et al." + , title = "Food Groups and Risk of All-Cause Mortality: A Systematic Review and Meta-Analysis of Prospective Studies" + , journal = "The American Journal of Clinical Nutrition" + , year = "2017" + , link = "https://doi.org/10.3945/ajcn.117.153148" + } + , { author = "Bechthold, Angela, et al." + , title = "Food Groups and Risk of Coronary Heart Disease, Stroke and Heart Failure: A Systematic Review and Dose-Response Meta-Analysis of Prospective Studies" + , journal = "Critical Reviews in Food Science and Nutrition" + , year = "2019" + , link = "https://doi.org/10.1080/10408398.2017.1392288" + } + , { author = "Schwingshackl, Lukas, et al." + , title = "Food Groups and Risk of Type 2 Diabetes Mellitus: A Systematic Review and Meta-Analysis of Prospective Studies" + , journal = "European Journal of Epidemiology" + , year = "2017" + , link = "https://doi.org/10.1007/s10654-017-0246-y" + } + , { author = "Abdullah, Shuaib M., et al." + , title = "Long-Term Association of Low-Density Lipoprotein Cholesterol With Cardiovascular Mortality in Individuals at Low 10-Year Risk of Atherosclerotic Cardiovascular Disease" + , journal = "Circulation" + , year = "2018" + , link = "https://doi.org/10.1161/CIRCULATIONAHA.118.034273" + } + , { author = "Vernooij, Robin W. M., et al." + , title = "Patterns of Red and Processed Meat Consumption and Risk for Cardiometabolic and Cancer Outcomes: A Systematic Review and Meta-Analysis of Cohort Studies" + , journal = "Annals of Internal Medicine" + , year = "2019" + , link = "https://doi.org/10.7326/M19-1583" + } + , { author = "Rohrmann, Sabine, et al." + , title = "Meat Consumption and Mortality--Results from the European Prospective Investigation into Cancer and Nutrition" + , journal = "BMC Medicine" + , year = "2013" + , link = "https://doi.org/10.1186/1741-7015-11-63" + } + , { author = "Mihrshahi, Seema, et al." + , title = "Vegetarian Diet and All-Cause Mortality: Evidence from a Large Population-Based Australian Cohort - the 45 and Up Study" + , journal = "Preventive Medicine" + , year = "2017" + , link = "https://doi.org/10.1016/j.ypmed.2016.12.044" + } + , { author = "Saito, Eiko, et al." + , title = "Association between Meat Intake and Mortality Due to All-Cause and Major Causes of Death in a Japanese Population" + , journal = "PloS One" + , year = "2020" + , link = "https://doi.org/10.1371/journal.pone.0244007" + } + , { author = "Lo, Jamie J., et al." + , title = "Association between Meat Consumption and Risk of Breast Cancer: Findings from the Sister Study" + , journal = "International Journal of Cancer" + , year = "2020" + , link = "https://doi.org/10.1002/ijc.32547" + } + , { author = "Sun, Yangbo, et al." + , title = "Association of Major Dietary Protein Sources With All-Cause and Cause-Specific Mortality: Prospective Cohort Study" + , journal = "Journal of the American Heart Association" + , year = "2021" + , link = "https://doi.org/10.1161/JAHA.119.015553" + } + , { author = "Song, Mingyang, et al." + , title = "Association of Animal and Plant Protein Intake With All-Cause and Cause-Specific Mortality" + , journal = "JAMA Internal Medicine" + , year = "2016" + , link = "https://doi.org/10.1001/jamainternmed.2016.4182" + } + , { author = "Duhem–Quine Thesis" + , title = "Duhem–Quine Thesis" + , journal = "Wikipedia" + , year = "2022" + , link = "https://en.wikipedia.org/w/index.php?title=Duhem%E2%80%93Quine_thesis&oldid=1065410241" + } + , { author = "de Lorgeril, M., et al." + , title = "Mediterranean Alpha-Linolenic Acid-Rich Diet in Secondary Prevention of Coronary Heart Disease" + , journal = "Lancet (London, England)" + , year = "1994" + , link = "https://doi.org/10.1016/s0140-6736(94)92580-1" + } + , { author = "Bergeron, Nathalie, et al." + , title = "Effects of Red Meat, White Meat, and Nonmeat Protein Sources on Atherogenic Lipoprotein Measures in the Context of Low Compared with High Saturated Fat Intake: A Randomized Controlled Trial" + , journal = "The American Journal of Clinical Nutrition" + , year = "2019" + , link = "https://doi.org/10.1093/ajcn/nqz035" + } + , { author = "Hiebert, Nick" + , title = "Should Modern Humans Eat Like Hunter-Gatherers?" + , journal = "The Nutrivore" + , year = "2021" + , link = "https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers." + } + , { author = "Perrin, James M., et al." + , title = "The Rise in Chronic Conditions among Infants, Children, and Youth Can Be Met with Continued Health System Innovations" + , journal = "Health Affairs (Project Hope)" + , year = "2014" + , link = "https://doi.org/10.1377/hlthaff.2014.0832" + } + , { author = "Kaplan, Hillard, et al." + , title = "Coronary Atherosclerosis in Indigenous South American Tsimane: A Cross-Sectional Cohort Study" + , journal = "Lancet (London, England)" + , year = "2017" + , link = "https://doi.org/10.1016/S0140-6736(17)30752-3" + } + , { author = "Li, Mingde, et al." + , title = "Age Related Human T Cell Subset Evolution and Senescence" + , journal = "Immunity & Ageing" + , year = "2019" + , link = "https://doi.org/10.1186/s12979-019-0165-8" + } + , { author = "Horvath, Steve, et al." + , title = "An Epigenetic Clock Analysis of Race/Ethnicity, Sex, and Coronary Heart Disease" + , journal = "Genome Biology" + , year = "2016" + , link = "https://doi.org/10.1186/s13059-016-1030-0" + } + , { author = "Irimia, Andrei, et al." + , title = "The Indigenous South American Tsimane Exhibit Relatively Modest Decrease in Brain Volume With Age Despite High Systemic Inflammation" + , journal = "The Journals of Gerontology. Series A, Biological Sciences and Medical Sciences" + , year = "2021" + , link = "https://doi.org/10.1093/gerona/glab138" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/NagraGoodrich.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/NagraGoodrich.elm new file mode 100755 index 0000000..f5d22c6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/NagraGoodrich.elm @@ -0,0 +1,332 @@ +module Config.Pages.Blogs.MainBlog.NagraGoodrich exposing (articleNagraGoodrich) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleNagraGoodrich : BlogArticle +articleNagraGoodrich = + { articleName = "Grading Tucker Goodrich: A Lesson in Debate Etiquette" + , articleLink = Path.toString Path.Blog_Nagragoodrich + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = True + , articleImage = "nagragoodrich" + , articlePublished = "May 12, 2022" + , articleBody = """ +Back in August of 2021, I invited [Tucker Goodrich](https://twitter.com/TuckerGoodrich) to a debate about the health value of seed oils. Tucker agreed to participate immediately, but after a brief back-and-forth (which resulted in Tucker [contradicting himself](https://twitter.com/The_Nutrivore/status/1428064287059324929?s=20&t=rmYpT72-5Tan31MnU_ptlw)), he eventually [withdrew](https://twitter.com/TuckerGoodrich/status/1428062578668830720?s=20&t=rmYpT72-5Tan31MnU_ptlw) without an explicit justification. Shortly thereafter he wrote a [blog article](https://yelling-stop.blogspot.com/2021/12/thoughts-on-nick-hieberts-comprehensive.html), wherein he paints a caricature of the events that transpired, which included everything from exaggerations to full-throated lies. Despite this, I reinvited him to debate multiple times since the incident, with either no response or outright refusals in reply. + +My initial invitation was prompted by my discovery that Tucker was actually just straight up [fabricating evidence](https://twitter.com/The_Nutrivore/status/1489863311155810304?s=20&t=DhYUMrwmqG260Ft7uNHozg) in a debate with a friend of mine, [Alan Flanagan](https://www.alineanutrition.com/about/). Needless to say, Tucker appears to be a particularly dishonest actor and a coward. When he wants to engage with me he does so in the safety of his blog, and critiques my writings and public statements with strawman arguments and red herrings, as well as just attacking very low-hanging fruit. At this point I don't think it's unfair to speculate that he conducts himself in this manner because he knows his arguments would not withstand scrutiny in a debate against me. + +Recently I was invited to set the record straight and shed some light on some of Tucker's more misleading claims on [Mark Bell's Power Project](https://www.youtube.com/watch?v=omzCi2CGoxo). Naturally Tucker felt compelled to write [a response](http://yelling-stop.blogspot.com/2022/02/thoughts-on-nick-hiebert-on-mark-bells.html) that was also particularly low-level and ultimately did not provide any stable defeaters for any of my positions. That didn't stop him from writing the article as though my arguments had been thoroughly dispatched, despite his counterarguments not even meaningfully interacting with what I had said to begin with. + +At this point I figured that enough was enough. So, I contacted an acquaintance of mine (who through this whole ordeal would become a friend), [Matthew Nagra](https://drmatthewnagra.com). I knew Matt was experienced in empirical debate and didn't hold any whacky heterodox views about seed oils, so I asked him if he'd be interested in debating Tucker. Matt agreed and promptly extended an invitation to Tucker. After Tucker agreed to a debate against Matt on [Simon Hill](https://twitter.com/theproof)'s [podcast](https://theproof.com/podcast/), it was time to get to work. With some help from [Matthew Madore](https://twitter.com/MattMadore576) over at [My Nutrition Science](https://www.mynutritionscience.com/authors-page/), we developed about 200 pages worth of debate-prep, syllogisms, and dialogue trees over approximately six weeks. + +As you will see throughout this article, our hard work paid off in the sweetest way possible. Matt was able to tease an absolutely enormous amount of dodges, strawman arguments, and straight up contradictions out of Tucker. It was more than any of us could have hoped for, and it truly reveals just how weak Tucker's arguments really are. The number of self-defeating bullets Tucker tried to bite in order to stay ahead in the debate was exquisite— a true treat. All in all, I'm very pleased with the results. Matt did a truly phenomenal job. Enjoy! + +# DEBATE + +Let's start. Tucker and Matt both agree to the following: + +**Debate Rules:** + +1) The debate will be open and conversation-style. + +2) Both parties will avoid talking over one another. + +3) Both parties must answer questions directly. + +4) Both parties will make and address one claim at a time. + +5) Both parties will refrain from using personal insults. + +6) Both parties will provide adequate time for response. + +**Matt's Debate Proposition:** + +>_It is more reasonable to believe that seed oils are beneficial, rather than harmful, for coronary heart disease risk._ + +**Tucker's Definition of Seed Oils:** + +>_Oils made from seeds, like canola oil, soybean oil, sunflower oil, etc. Not the fleshy part of the fruit, like olive oil, palm oil, avocado oil, or coconut oil. With the primary focus being high linoleic acid oils._ + +# NUTRITIONAL EPIDEMIOLOGY + +**Rule violation (**[**30:20**](https://youtu.be/5nZSV-DyVRM?t=1820)**,** [**30:38**](https://youtu.be/5nZSV-DyVRM?t=1838)**):** + +Tucker breaks rule three twice. Matt provides evidence from three independent analyses that shows a concordance rate of 65-67% between nutritional epidemiology and nutritional randomized controlled trials (RCTs). Matt then asks Tucker if nutritional epidemiological evidence is concordant with nutritional RCTs two thirds of the time, which is a yes or no question. Tucker responds by saying its irrelevant due to being a tangent. However, it's not clear exactly how Matt's question is an irrelevant tangent, since it directly interacts with Tucker's opening claim at the beginning of the debate. + +**Strawman (**[**32:09**](https://youtu.be/5nZSV-DyVRM?t=1929)**):** + +Tucker finally answers "no" in response to Matt's question. When Matt asks why not, Tucker responds by saying "it's just a meta-analysis", which doesn't provide us with any clarity on why he provided the answer that he did. Tucker further elaborates with a strawman of Matt's position, stating that the data provided by Matt doesn't provide us with any information about the likelihood of a high-LA intervention being beneficial. However, this wasn't Matt's point. Matt's point was that Tucker's characterization of nutritional epidemiology on the whole was a red herring and false. + +# MINNESOTA CORONARY EXPERIMENT + +**Rule violation (**[**37:24**](https://youtu.be/5nZSV-DyVRM?t=2239)**):** + +Tucker breaks rule three for the third time. Matt shows Tucker the power calculation from MCE, and demonstrates that the trial was actually underpowered. Matt then asks Tucker if the trial had adequate power. Tucker again says that the question is irrelevant, stating that when a trial shows harm, it shouldn't be discounted based on a P-value. This is a truly bizarre answer, as Matt has yet to discount the trial. + +**Rule violation (**[**38:50**](https://youtu.be/5nZSV-DyVRM?t=2330)**):** + +Tucker breaks rule four. Instead of resolving Matt's point about MCE, Tucker wants to pivot to the LA Veterans Administration Hospital Trial (LAVAT). + +**Rule violation (**[**43:20**](https://youtu.be/5nZSV-DyVRM?t=2600)**):** + +Tucker breaks rule three for the fourth time. Matt presents a subgroup analysis from MCE that shows that older subjects who maintained the intervention diet for more one year tended to see a benefit when compared to the control diet. Matt asks Tucker if the older subjects in MCE who were consuming the intervention diet for longer saw a benefit compared to the control diet. Tucker rejects the question, saying that Matt is citing a "sub-population" analysis, and that it is superseded by the total outcome. This answer doesn't interact with Matt's question. + +**Rule violation (**[**42:56**](https://youtu.be/5nZSV-DyVRM?t=2576)**,** [**43:30**](https://youtu.be/5nZSV-DyVRM?t=2610)**):** + +Tucker breaks rule three for the fifth time. Matt rephrases his question, asking Tucker if harm would be more likely if subjects were to maintain the intervention diet for a longer period of time as opposed to a shorter period of time in MCE. Tucker again, dismisses a yes-or-no question as being irrelevant without any clarifying explanation. + +**Rule violation (**[**44:06**](https://youtu.be/5nZSV-DyVRM?t=2646)**):** + +Tucker breaks rule two. Matt wants to elaborate on why his question is important, but Tucker cuts him off. Matt allows it, but Tucker shouldn't have done it to begin with. + +**Rule violation (**[**48:18**](https://youtu.be/5nZSV-DyVRM?t=2898)**):** +Tucker breaks rule one and three. Tucker attempts an explanation for why MCE showed benefit for older subjects over two years. When Matt asks for further clarification, Tucker refuses to provide it. Not only is this directly dodging a question, this behaviour also calls into question whether or not Tucker is actually there for an open, conversation-style debate. + +**Rule violation (**[**49:07**](https://youtu.be/5nZSV-DyVRM?t=2947)**):** + +Tucker breaks rule four again. Instead of resolving Matt's point about MCE, Tucker wants to pivot to the Oslo Diet-Heart Study (ODHS). + + +**Strawman (**[**50:34**](https://youtu.be/5nZSV-DyVRM?t=3034)**):** + +Tucker offers a strawman of Matt's position, claiming that Matt's conclusions were based on ODHS. In fact, Matt's position was not based on ODHS, and Matt even said that the evidence underpinning his position is virtually the same if ODHS is omitted completely. + +**Strawman (**[**51:52**](https://youtu.be/oYsRgsJoZc4?t=3112)**):** + +Tucker offers a strawman of Matt's position, claiming that the composition of fats in margarines would need to be known in order to conclude that trans-fats (TFA) were confounding in MCE. This isn't Matt's position. Matt's position was that TFA confounding is likely based on two pieces of evidence. Firstly, the vast majority of margarines during that time period contained TFA. Secondly, there was disagreement between the observed cholesterol changes and the predicted cholesterol changes in MCE. From these data Matt infers that TFA confounding was likely, which is merely a truism that can be soundly inferred a priori. Matt doesn't conclude that TFA confounding did in fact occur. He merely takes the position that is likely. + +**Rule violation (**[**55:27**](https://youtu.be/oYsRgsJoZc4?t=3327)**):** + +Tucker breaks rule three. Matt asks Tucker if he thinks that a cooking oil with 1% TFA would be equivalent to a cooking oil with 15% TFA, which is a yes or no question. Tucker responds by saying that TFA confounding would have to be a systematic issue across all of the RCTs using Matt's assumptions. However, this doesn't interact with Matt's question. + +**Rule violation (**[**1:02:00**](https://youtu.be/oYsRgsJoZc4?t=3720)**):** + +Tucker breakers rule three again. Tucker cites a result from the LAVAT that is incongruent with Matt's figures, so Matt asks him what Tucker's figure is representing. After Matt finishes explaining the incongruency, he asks Tucker where he is getting the number from. Instead of answering, Tucker just asks him what his point is. + +**Potential contradiction (**[**1:08:00**](https://youtu.be/oYsRgsJoZc4?t=4080)**):** + +Tucker concedes that LAVAT showed a slight benefit for vegetable oils compared to animal fats. However, earlier he characterized MCE as showing "harm", but it wasn't qualified as slight. However, LAVAT showed a statistically significant 49% increase in CVD mortality risk in the control group, but MCE showed a non-significant 24% increase in CVD mortality risk in the intervention group. If a non-significant 24% increase in CVD mortality is noteworthy in Tucker's view, why is a statistically significant 49% increase in CVD mortality risk only slight in his view as well? + +Without further elaboration, would have to either accept that the increase in CVD mortality in LAVAT is noteworthy, or accept that the CVD mortality increase in MCE is at least just as unnoteworthy as LAVAT, if he wishes to stay consistent. We can syllogize the logical entailments of accepting the CVD mortality risk in MCE as "not slight" like this: + +![][argument1] +[argument1]: /blog/nagragoodrich/argument1.png + +# LA VETERANS ADMINISTRATION HOSPITAL STUDY + +**Rule violation (**[**1:08:22**](https://youtu.be/oYsRgsJoZc4?t=4102)**,** [**1:08:34**](https://youtu.be/oYsRgsJoZc4?t=4114)**):** + +Tucker breaks rule three two more times. Matt presented data from LAVAT that divulged that the intervention diet resulted in statistically significant benefits to CVD mortality and all-cause mortality. Matt asked Tucker if he though the data shows that the intervention diet in LAVAT resulted in a benefit to CVD mortality and all-cause mortality, which is again a yes or no question. First, Tucker dismisses the question, saying that LAVAT also saw an increase in cancer. When Matt asks again, Tucker says that he doesn't agree that studies can be "sliced and diced", which doesn't interact with Matt's question. + +**Rule violation (**[**1:10:44**](https://youtu.be/oYsRgsJoZc4?t=4244)**,** [**1:14:22**](https://youtu.be/oYsRgsJoZc4?t=4462)**):** + +Tucker breaks rule four two more times. Instead of resolving Matt's point about LAVAT, Tucker tries to pivot to talking about the standard American diet (SAD), which is tangential to the claim being discussed at that moment. When asked again, Tucker responds by talking about rates of acute myocardial infarction (AMI) in Africans, which is also tangential to the claim being discussed at that moment. + +**Rule violation (**[**1:18:03**](https://youtu.be/QGNNsiINehI?t=4683)**):** + +Tucker breaks rule three yet again. Matt attempts an internal critique by asking if Tucker would believe that adding vegetable oils to the SAD would be a benefit, based on the results of LAVAT. Tucker replies by saying that Lee Hooper would conclude that there is little to no benefit. A truly bizarre reply that doesn't interact with Matt's question at all. + +**Potential contradiction (**[**1:21:11**](https://youtu.be/QGNNsiINehI?t=4871)**):** + +Matt responds to ecological data that Tucker presented earlier, stating that he disagrees with the notion that it can be used to determine independent effects of seed oils. Tucker denies that he is making such a claim, and clarifies that he is speculating off that data. However, earlier in the debate Tucker objected to Matt's speculation regarding TFA confounding in MCE. Why is it OK for Tucker to submit speculation as evidence but not OK for Matt to submit speculation as evidence? + +Without further elaboration, it's unclear why Tucker would not be OK with a priori inferences about the potentially confounding effects of TFA in MCE being used in debate, when he also relies on such a priori inferences. Such as when he infers from ecological data that seed oils are likely to be detrimental. We can syllogize the logical entailments of accepting the use of a priori inferences in debate like this: + +![][argument2] +[argument2]: /blog/nagragoodrich/argument2.png + +# LYON DIET-HEART STUDY + +**Rule violation (**[**1:32:15**](https://youtu.be/QGNNsiINehI?t=5535)**):** + +Tucker breaks rule four once more. At this point, both are discussing Lyon Diet-Heart Study (LDHS), and the differential effects of the various dietary modifications that were made in that study, such as the reduction in LA. Matt takes the position that it is unlikely the the 73% reduction in AMI risk seen in LDHS is attributable to LA-reduction due to many other dietary variables changing alongside the reduction in LA. Tucker takes the position that reduction in LA explains the majority of the effect. Instead of resolving Matt's point about LDHS, Tucker wants to pivot to discussing the mechanisms of atherosclerosis. + +**Potential contradiction (**[**1:35:45**](https://youtu.be/QGNNsiINehI?t=5745)**):** + +Tucker holds the view that alpha-linolenic acid reduces risk, but he also holds the view that risk is mediated solely by LA-specific metabolites. However, this is true of all non-LA fatty acids. If the metabolites that confer harm are LA-specific, then shouldn't all non-LA fatty acids be equally non-atherogenic? He tries to reconcile this by saying that ALA "blocks" the negative effects of LA. Does that mean that ALA is an antioxidant? Does the mean that ALA detoxifies LA-specific metabolites somehow? He offers no further explanation. + +**Rule violation (**[**1:47:53**](https://youtu.be/QGNNsiINehI?t=6473)**):** + +Tucker breaks both rule two and rule six. In response to an objection from Tucker, Matt wanted to ask a question so that he could have specific clarity on Tucker's position, but Tucker cut Matt off before Matt could ask. + +# LOW DENSITY LIPOPROTEINS + +**Potential contradiction (**[**1:39:20**](https://youtu.be/QGNNsiINehI?t=5960)**):** + +Matt uses one of Tucker's references to present an internal critique. The reference appears to contradict Tucker's model of CVD by stating that hyperlipidemia is sufficient to explain the development of CVD in all its manifestations. Tucker objects to this, saying that the paper is referring to the "genetic hypothesis" of CVD, which involves CVD risk being conferred via genetically mediated concentrations of LDL. Tucker elaborates by stating that if the hypothesis were true, there wouldn't be observable differences in CVD rates between people with the same genetic background between different environments. This appears to be discounting the possibility that LDL can vary between individuals within a genetically homogenous group. Yet, here he affirms that environmental factors like dietary modification can affect LDL levels. + +**Strawman (**[**1:49:00**](https://youtu.be/QGNNsiINehI?t=6540)**):** + +Matt claims that oxidation of LDL is virtually inevitable after LDL are irreversibly retained within the subendothelial space. Tucker objects, saying it is not inevitable. Matt asks for clarification, requesting evidence that oxidation can be abolished in the subendothelial space. Tucker informs Matt that the fat composition of the diet can influence LDL oxidation rates. After Matt tells Tucker that this isn't what he's asking about, Tucker insists that this is indeed what Matt is asking about, without any further explanation. + +**Potential contradiction (**[**1:53:46**](https://youtu.be/QGNNsiINehI?t=6826)**):** + +Tucker correctly states that the LA-derived metabolite, malondialdehyde (MDA), is responsible for oxidative modification of LDL particles. However, he also states that ALA can produce this metabolite as well. If Tucker's position is that MDA-mediated oxidative modification of LDL particles initiates CVD, then why would it matter if an intervention involves both LA and ALA? At **58:32**, Tucker states that the inclusion of ALA confounded LAVAT. + +If Tucker wants to remain consistent, he'll have to explain why the atherogenic properties of ALA that are entailed from his stated position don't seem to matter. He seems to singling out LA based on characteristics that he admits are shared by ALA. Without further elaboration, Tucker should have to accept ALA as atherogenic, and the reasoning can be syllogized like this: + +![][argument3] +[argument3]: /blog/nagragoodrich/argument3.png + +**Direct contradiction (2:18:19):** + +Tucker directly contradicts himself when he suggests that corn oil is not a seed oil. At **1:43:50**, he cited two primary interventions that demonstrate that seed oils produce harm, but the sole oil used in those trials was corn oil. + +![][argument4] +[argument4]: /blog/nagragoodrich/argument4.png + +# TUCKER CONCEDES + +**Potential contradiction (**[**2:09:08**](https://youtu.be/QGNNsiINehI?t=7748)**):** + +Tucker again concedes that LAVAT showed a "fairly small" benefit of vegetable oils compared to animal fats. Earlier in the debate, Tucker stated that other trials such as MCE as showed "harm". However, LAVAT showed a statistically significant 49% increase in CVD mortality risk in the control group, but MCE showed a non-significant 24% increase in CVD mortality risk in the intervention group. If a non-significant 24% increase in CVD mortality is noteworthy in Tucker's view, why is a statistically significant 49% increase in CVD mortality risk only "fairly small" in Tucker's view as well? + +**Rule violation (**[**2:10:08**](https://youtu.be/QGNNsiINehI?t=7808)**,** [**2:10:41**](https://youtu.be/QGNNsiINehI?t=7841)**):** + +Tucker breaks rule three another three times. After Tucker implies that the benefits seen in LAVAT are inconsequential, Matt once again presents the findings of LAVAT. Matt asks Tucker if he believes that a 33% reduction to all-cause mortality and a 35% reduction to CVD mortality is "small", which is a yes or no question. Rather than answering, Tucker starts talking about Christopher Ramsden's meta-analysis. When Matt asks again, Tucker continues talking about the Ramsden meta-analysis. + +**Rule violation (**[**2:10:52**](https://youtu.be/QGNNsiINehI?t=7852)**):** + +Tucker breaks rule one again. Matt attempts to explain what his question for Tucker is, but Tucker mind-reads and tries to tell Matt what he means instead of listening. + +**Direct contradiction (**[**2:10:59**](https://youtu.be/QGNNsiINehI?t=7859)**):** + +Tucker objects to Matt's use of LAVAT to demonstrate a potential benefit of seed oils, saying that "you can't take one single RCT and prove an effect". However, this is the exact manner in which Tucker relies on LDHS to demonstrate the benefits of LA reduction in the context of high ALA. There is no other study that included such an intervention. + +Without additional clarification, Tucker would need to reject his own reliance on LDHS to prove the effect of LA-reduction in the context of an ALA-rich diet. Such an entailment can be syllogized like this: + +![][argument5] +[argument5]: /blog/nagragoodrich/argument5.png + +**Rule violation (**[**2:13:03**](https://youtu.be/QGNNsiINehI?t=7983)**):** + +In an astonishing feat, Tucker breaks rules two, four, five, and six all at the same time. Rather than engaging with Matt's question about the clinical significance of the LAVAT results, Tucker dodges by attacking Matt's intellectual integrity. When Matt attempts to interject, Tucker cuts Matt off, attempting to pivot to discussing meta-analyses despite agreeing to systematically discuss the relevant trials one by one. + +**Strawman (**[**2:14:21**](https://youtu.be/QGNNsiINehI?t=8061)**):** + +Tucker finishes his rant by suggesting that the LAVAT results don't show that increasing seed oils can "reduce heart disease by 30%", which was not at all what Matt was suggesting. All Matt asked Tucker was whether or not Tucker believed that the effects observed in LAVAT were small. + +**Strawman (**[**2:14:33**](https://youtu.be/QGNNsiINehI?t=8073)**):** + +Tucker claims that Matt agreed that you cannot "prove" something based on one study, and in fact meta-analysis is required for proof. Matt never committed himself to such a concept for causal inference. This is a truly bizarre move on Tucker's part. + +# HOOPER 2020 META-ANALYSIS + +**Rule violation (**[**2:16:32**](https://youtu.be/QGNNsiINehI?t=8192)**):** + +Tucker breaks rules two and six again. Now discussing the paper by Hooper et al. (2020), Tucker asks Matt where in the paper can the evidence for his claims be found. Matt attempts to respond, but Tucker cuts Matt off again by asking the exact same question he just asked, but with a slightly more crazed inflection. + +**Rule violation (**[**2:19:30**](https://youtu.be/QGNNsiINehI?t=8370)**,** [**2:19:38**](https://youtu.be/QGNNsiINehI?t=8378)**,** [**2:19:45**](https://youtu.be/QGNNsiINehI?t=8385)**):** + +Tucker breaks rule three three more times. Tucker criticizes the Hooper (2020) meta-analysis by stating that the analysis found "little to no effect" of reducing saturated fat on CVD mortality. Not only is this tangential, but Matt humours the objection long enough to make the point that events is a much more sensitive endpoint than mortality, and events is where the benefit can be seen. Matt follows up by asking Tucker if he thinks reducing total CVD events is beneficial if all else was held equal, which is a simple yes or no question. Rather than answering, Tucker starts painting a caricature of Matt's question instead. When it is clear that Matt is not getting a straight answer, the moderator interjects and allows the yes-or-no question to be asked again. Again, Tucker dodges. + +**Direct contradiction (**[**2:21:19**](https://youtu.be/QGNNsiINehI?t=8479)**):** + +Tucker takes the position that silent and non-fatal AMIs are not important outcomes and we need not care about them. Yet, at [**1:16:22**](https://youtu.be/QGNNsiINehI?t=4582), Tucker makes it clear that silent and non-fatal AMIs are important and that we should care about them. + +This one is pretty straight forward. Either silent and non-fatal AMIs are important and we should care about them, or they are not important and we shouldn't care about them. If Tucker wishes to remain consistent while also preserving his own arguments, we'd need to accept that silent and non-fatal AMIs are important, and that we should care about them. This entailment can by syllogized like this: + +![][argument6] +[argument6]: /blog/nagragoodrich/argument6.png + +**Rule violation (**[**2:25:20**](https://youtu.be/QGNNsiINehI?t=8720)**):** + +Tucker breaks rule four for the seventh time. After agreeing to discuss the results of Hooper (2020), Tucker suddenly attempts to steer the debate toward some sort of meta-level discussion about seed oil consumption in the general population. + +**Rule violation (**[**2:30:31**](https://youtu.be/QGNNsiINehI?t=9031)**):** + +Tucker breaks both rules four and six. The moderator poses a question to both Matt and Tucker, and gets a satisfactory answer from both Matt and Tucker. However, rather than returning the floor to the moderator or continuing with the debate, Tucker takes the opportunity to address points that Matt hasn't even made yet in the debate, and doesn't give Matt any amount of time to respond. + +**Rule violation (**[**2:37:06**](https://youtu.be/QGNNsiINehI?t=9426)**):** + +Tucker breaks rules two and four again. The moderator recognizes that Tucker's incoherent flow-of-consciousness monologue has been going on for nearly ten minutes, and the moderator tries to interject. Tucker cuts the moderator off and proceeds to ramble about vitamin E for another minute. + +# ECOLOGICAL STUDIES + +**Rule violation (**[**2:38:42**](https://youtu.be/QGNNsiINehI?t=9522)**):** + +Tucker can't help but break rule four again. Tucker interjects, before Matt can even finish a single sentence, in order to tell Matt that ecological studies are the worst form of epidemiology. At this point it is fair to say that Tucker is breaking rule one as well. It's clear that Tucker is no longer here for an "open, conversation-style" debate. + +**Direct contradiction (**[**2:38:50**](https://youtu.be/QGNNsiINehI?t=9530)**):** + +Tucker takes the position that ecological studies are of critical importance, superseding all other forms of epidemiology. Yet, only moments earlier, Tucker took the position that ecological studies are the worst form of epidemiological evidence. + +Again, we have another relatively simple inconsistency to address. In order for Tucker to make his case against seed oils, he systematically rejected all nutritional epidemiology except for ecological studies. Yet, claiming that ecological studies are the worst form of epidemiology entails a contradiction, as it means that Tucker is simultaneously holding the view that it is both the best and the worst form of epidemiology at the same time. If Tucker wished to resolve the inconsistency, he'd probably have to acknowledge that ecological studies are not the worst form of epidemiology. This can be syllogized like this: + +![][argument7] +[argument7]: /blog/nagragoodrich/argument7.png + +# SYDNEY DIET-HEART STUDY + +**Direct contradiction (**[**2:42:37**](https://youtu.be/QGNNsiINehI?t=9757)**):** + +Tucker makes the claim that we can't know whether or not the margarine used in Sydney Diet-Heart Study (SDHS) contained TFA. Moments later, at [**2:44:23**](https://youtu.be/QGNNsiINehI?t=9863) he suggests that it is valid to argue that we absolutely can know the margarine in SDHS did not contain TFA. + +If Tucker maintains that it cannot be known whether or not TFA was confounding in SDHS, then he cannot posit that it can be known one way or the other. Either position that Tucker took could work for his argument on this subject, but they're just not compatible with each other, and that can be illustrated like this: + +![][argument8] +[argument8]: /blog/nagragoodrich/argument8.png + + +**Rule violation (**[**2:57:59**](https://youtu.be/QGNNsiINehI?t=10679)**,** [**2:58:53**](https://youtu.be/QGNNsiINehI?t=10733)**):** + +Tucker breaks rule three two more times. While discussing a paper that models substitutions of olive oil for various other fats, Matt asks Tucker if he has any problems with the paper. Rather than answering, Tucker starts discussing issues he has with another paper published by the same group investigating dairy fat. Matt attempts to interject, but Tucker continues to discuss previous research on potatoes that was also published by this group. + + +**Rule violation (**[**2:59:44**](https://youtu.be/QGNNsiINehI?t=10784)**):** + +Tucker breaks rules two, three, and four again. Matt once again asks Tucker if he has any issues with the olive oil substitution analysis. Rather than answering, Tucker cuts Matt off before he can finish asking his question, and Tucker starts asking why Matt included the paper in his references. + + +**Rule violation (**[**3:00:44**](https://youtu.be/QGNNsiINehI?t=10844)**):** + +Tucker once again breaks rule three. Matt asks his yes-or-no question yet again, to which Tucker responds by stating that the mechanisms favour his position. This is just another dodge. + + +**Rule violation (**[**3:00:53**](https://youtu.be/QGNNsiINehI?t=10853)**,** [**3:02:18**](https://youtu.be/QGNNsiINehI?t=10938)**):** + +Tucker breaks rule three again, despite it now being enforced by the moderator. The moderator notices that Matt is not getting an answer to his question, and the moderator steps and reminds Tucker of the question being asked. Rather than answering the question, Tucker continues to discuss mechanisms. The moderator again notices that this doesn't answer Matt's question, and implores Tucker to answer. Again, Tucker dodges the question and starts talking about the paper itself, rather than addressing Matt's question about Tucker's interpretation of the paper. + + +**Rule violation (**[**3:06:00**](https://youtu.be/QGNNsiINehI?t=11160)**):** + +Tucker breaks rules one and six again. Not even one minute after Tucker grants Matt the floor to make a point about mechanistic data, Tucker interrupts Matt on the basis that Matt's point isn't relevant. Though, only moments before, the moderator gave Matt the floor to complete his point. It is clear that Tucker has no respect for the moderator's wishes, nor the debate parameters. + + +**Rule violation (**[**3:06:52**](https://youtu.be/QGNNsiINehI?t=11212)**):** + +Tucker breaks rules one and six again. For the second time, Tucker interrupts Matt when he's been given the floor by the moderator to complete his point. + +# OLIVE OIL SUBSTITUTION ANALYSIS + +**Rule violation (**[**3:13:34**](https://youtu.be/QGNNsiINehI?t=11614)**):** + +Tucker breaks rules two again. Rather than letting Matt complete his point about the olive oil substitution analysis, Tucker interrupts him. + +**Direct contradiction (**[**3:15:10**](https://youtu.be/QGNNsiINehI?t=11710)**):** + +Tucker concedes that margarine and mayonnaise are not the same thing as isolated vegetable oils. However, at [**3:14:30**](https://youtu.be/QGNNsiINehI?t=11670), Tucker rejects that there are differences between margarine, mayonnaise, and isolated vegetable oils. Another layer of hilarity would be to point out that if Tucker maintains that mayonnaise is the same as an isolated seed oil, he'd be holding the position that corn oil is not a seed oil, but mayonnaise is. + +![][argument9] +[argument9]: /blog/nagragoodrich/argument9.png + +# DISCUSSION + +This is where the debate portion of the episode ends, with Matt and Tucker both giving their closing statements. Altogether, Tucker violated the rules at least 50 times and committed at least 18 fallacies, and that's not counting the various hilarious empirical and epistemic claims that Tucker made. For anyone interested in reading more about Tucker's errors, Matt published a comprehensive rebuttal to his personal blog, which can be found on [Matt's blog](https://drmatthewnagra.com/seed-oil-debate-with-tucker-goodrich/). From what I could tell, Matt did not really break the rules at all, except for perhaps a few minor instances when he attempted to interject when Tucker was rambling. Other than that, he conducted himself according to the rules. + +Whether you're skeptical, supportive, or unsure of Tucker's work, I hope that this debate, as well as the breakdown contained within this article, gives you a decent perspective on just how bad his arguments actually are. I'm truly failing to imagine any good reasons for why someone with a stable position, which is truly robust to scrutiny, should struggle this hard to stay consistent in a debate. Tucker's performance was truly terrible, and should be eye-opening to anyone who thought that he might have even a scrap of credibility within this domain. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/PlantBasedMeta.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/PlantBasedMeta.elm new file mode 100755 index 0000000..10aa297 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/PlantBasedMeta.elm @@ -0,0 +1,1391 @@ +module Config.Pages.Blogs.MainBlog.PlantBasedMeta exposing (articlePlantBasedMeta) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articlePlantBasedMeta : BlogArticle +articlePlantBasedMeta = + { articleName = "Plant-Based Diets (An Independent Meta-Analysis)" + , articleLink = Path.toString Path.Blog_Plantbasedmeta + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "plantbasedmeta" + , articlePublished = "Feb 5, 2021" + , articleBody = """ +On the back of my independent meta-analysis investigating the relationship between low carbohydrate/ketogenic diets and health markers in intervention trials, I now give you my independent meta-analysis investigating the relationship between plant-based diets and health markers in intervention trials. + +The plant-based community has just as much of a tendency to cherry-pick study results as any other diet community wherein certainty is low and guruism is high. This independent meta-analysis is my attempt to add some clarity to online and academic discourse regarding plant-based diets and health—do these types of diets actually live up to the hype? + +It is my hope that this blog article might serve as an educational resource for anyone aiming to learn about how plant-based diets could relate to health. As well as whether or not those health outcomes are independent of duration or weight loss. There are many supposed effects of plant-based that many of us may just take for granted, such as reductions in low density lipoprotein cholesterol or lower inflammatory markers. However, it is unclear whether or not these effects, if they exist at all, are independent of weight loss or the duration of time spent on the diet. + +It is also true that some of us may expect negative things to happen on a plant-based diet, like elevated triglycerides or higher blood glucose. It is likewise unclear whether or not these effects are independent of weight loss or the total amount of time spent on the diet. Hopefully the data below will help inform some of these debates and discussions, as well as help rectify any potential misconceptions one might have. + +I will also not be including any interpretations of any of the data. I am not a health professional of any kind, and it is not my job to interpret this data. I searched for it. I collated it. And now it's yours. + +Results will be stratified six ways: + +1. Plant-based diets compared to control. + +2. Plant-based diets compared to baseline. + +3. Plant-based diets stratified by duration, compared to control. + +4. Plant-based diets stratified by duration, compared to baseline. + +5. Plant-based diets stratified by weight loss, compared to control. + +6. Plant-based diets stratified by weight loss, compared to baseline. + +**Inclusion Criteria:** + +Due to the fact that there is no clear, standardized definition of a "plant-based" diet in the literature, the inclusion criteria for this meta-analysis was difficult to formulate. An obvious correlate for a diet that emphasizes plant foods might be dietary cholesterol (due to it only being found in animal foods). However, no trial actually achieved a zero-cholesterol diet in the intervention group, and some diets may be higher in dietary cholesterol despite a significant overall decrease in animal food consumption. For example, a diet that substitutes 150 kcal of eggs for 1000 kcal of assorted animal products could potentially have the exact same dietary cholesterol yield overall, despite the fact that one diet may be significantly more plant-based than the other diet. + +A minority of studies divulged the percentage of calories from either animal foods or non-animal foods in the intervention diets. So, such criteria would have narrowed the range of eligible trials to an unacceptable degree. In order to insulate myself from criticisms to the greatest degree possible, I let the literature itself dictate my inclusion criteria. If the experimental diet used in an intervention trial had been referenced as "plant-based" or "vegan" in the literature (either in a meta-analysis, narrative review, systematic review, trial paper, etc.), I invoked the if-it-is-good-enough-for-them-it-is-good-enough-for-me principle, and included them. Don't fucking @ me, bro. + +**Disclaimer:** + +This is not a peer-reviewed publication. This blog article is for educational and/or entertainment purposes only. This blog article is not an academic reference, nor does it stand in place of current or future peer reviewed, academic research into plant-based diets and health. There are multiple methodological limitations that make robust interpretation challenging in many cases. + +If you have enjoyed my work and want me to continue producing this sort of content, consider supporting me on Patreon. Every little bit helps! Thank you for your time! Enjoy! + +# ANTHROPOMETRICS + +# BODY WEIGHT + +**Body Weight: Plant-based (vs Control)** + +![][image5] +[image5]: /blog/plantbasedmeta/image5.png + +**Body Weight: Plant-based (vs Baseline)** + +![][image6] +[image6]: /blog/plantbasedmeta/image6.png + +**Body Weight: Plant-based by Duration (vs Control)** + +![][image7] +[image7]: /blog/plantbasedmeta/image7.png + +**Body Weight: Plant-based by Duration (vs Baseline)** + +![][image8] +[image8]: /blog/plantbasedmeta/image8.png + +**Body Weight: Plant-based by Weight Loss (vs Control)** + +![][image9] +[image9]: /blog/plantbasedmeta/image9.png + +**Body Weight: Plant-based by Weight Loss (vs Baseline)** + +![][image10] +[image10]: /blog/plantbasedmeta/image10.png + +# BODY FAT MASS + +**Body Fat Mass: Plant-based (vs Control)** + +![][image11] +[image11]: /blog/plantbasedmeta/image11.png + +**Body Fat Mass: Plant-based (vs Baseline)** + +![][image12] +[image12]: /blog/plantbasedmeta/image12.png + +**Body Fat Mass: Plant-based by Duration (vs Control)** + +![][image13] +[image13]: /blog/plantbasedmeta/image13.png + +**Body Fat Mass: Plant-based by Duration (vs Baseline)** + +![][image14] +[image14]: /blog/plantbasedmeta/image14.png + +**Body Fat Mass: Plant-based by Weight Loss (vs Control)** + +![][image15] +[image15]: /blog/plantbasedmeta/image15.png + +**Body Fat Mass: Plant-based by Weight Loss (vs Baseline)** + +![][image16] +[image16]: /blog/plantbasedmeta/image16.png + +# FAT FREE MASS + +**Fat Free Mass: Plant-based (vs Control)** + +![][image17] +[image17]: /blog/plantbasedmeta/image17.png + +**Fat Free Mass: Plant-based (vs Baseline)** + +![][image18] +[image18]: /blog/plantbasedmeta/image18.png + +**Fat Free Mass: Plant-based by Duration (vs Control)** + +![][image19] +[image19]: /blog/plantbasedmeta/image19.png + +**Fat Free Mass: Plant-based by Duration (vs Baseline)** + +![][image20] +[image20]: /blog/plantbasedmeta/image20.png + +**Fat Free Mass: Plant-based by Weight Loss (vs Control)** + +![][image21] +[image21]: /blog/plantbasedmeta/image21.png + +**Fat Free Mass: Plant-based by Weight Loss (vs Baseline)** + +![][image22] +[image22]: /blog/plantbasedmeta/image22.png + +# BODY MASS INDEX + +**Body Mass Index: Plant-based (vs Control)** + +![][image23] +[image23]: /blog/plantbasedmeta/image23.png + +**Body Mass Index: Plant-based (vs Baseline)** + +![][image24] +[image24]: /blog/plantbasedmeta/image24.png + +**Body Mass Index: Plant-based by Duration (vs Control)** + +![][image25] +[image25]: /blog/plantbasedmeta/image25.png + +**Body Mass Index: Plant-based by Duration (vs Baseline)** + +![][image26] +[image26]: /blog/plantbasedmeta/image26.png + +**Body Mass Index: Plant-based by Weight Loss (vs Control)** + +![][image27] +[image27]: /blog/plantbasedmeta/image27.png + +**Body Mass Index: Plant-based by Weight Loss (vs Baseline)** + +![][image28] +[image28]: /blog/plantbasedmeta/image28.png + +# WAIST HIP RATIO + +**Waist Hip Ratio: Plant-based (vs Control)** + +![][image29] +[image29]: /blog/plantbasedmeta/image29.png + +**Waist Hip Ratio: Plant-based (vs Baseline)** + +![][image30] +[image30]: /blog/plantbasedmeta/image30.png + +**Waist Hip Ratio: Plant-based by Duration (vs Control)** + +![][image31] +[image31]: /blog/plantbasedmeta/image31.png + +**Waist Hip Ratio: Plant-based by Duration (vs Baseline)** + +![][image32] +[image32]: /blog/plantbasedmeta/image32.png + +**Waist Hip Ratio: Plant-based by Weight Loss (vs Control)** + +![][image33] +[image33]: /blog/plantbasedmeta/image33.png + +**Waist Hip Ratio: Plant-based by Weight Loss (vs Baseline)** + +![][image34] +[image34]: /blog/plantbasedmeta/image34.png + +# VISCERAL ADIPOSE TISSUE + +**Visceral Adipose Tissue: Plant-based (vs Control)** + +![][image35] +[image35]: /blog/plantbasedmeta/image35.png + +**Visceral Adipose Tissue: Plant-based (vs Baseline)** + +![][image36] +[image36]: /blog/plantbasedmeta/image36.png + +# INTRAHEPATIC LIPID + +**Intrahepatic Lipid: Plant-based (vs Control)** + +![][image37] +[image37]: /blog/plantbasedmeta/image37.png + +**Intrahepatic Lipid: Plant-based (vs Baseline)** + +![][image38] +[image38]: /blog/plantbasedmeta/image38.png + +**Intrahepatic Lipid: Plant-based by Duration (vs Control)** + +![][image39] +[image39]: /blog/plantbasedmeta/image39.png + +**Intrahepatic Lipid: Plant-based by Duration (vs Baseline)** + +![][image40] +[image40]: /blog/plantbasedmeta/image40.png + +**Intrahepatic Lipid: Plant-based by Weight Loss (vs Control)** + +![][image41] +[image41]: /blog/plantbasedmeta/image41.png + +**Intrahepatic Lipid: Plant-based by Weight Loss (vs Baseline)** + +![][image42] +[image42]: /blog/plantbasedmeta/image42.png + +# INTRAMYOCELLULAR LIPID + +**Intramyocellular Lipid: Plant-based (vs Control)** + +![][image43] +[image43]: /blog/plantbasedmeta/image43.png + +**Intramyocellular Lipid: Plant-based (vs Baseline)** + +![][image44] +[image44]: /blog/plantbasedmeta/image44.png + +# CARDIOVASCULAR + +# SYSTOLIC BLOOD PRESSURE + +**Systolic Blood Pressure: Plant-based (vs Control)** + +![][image45] +[image45]: /blog/plantbasedmeta/image45.png + +**Systolic Blood Pressure: Plant-based (vs Baseline)** + +![][image46] +[image46]: /blog/plantbasedmeta/image46.png + +**Systolic Blood Pressure: Plant-based by Duration (vs Control)** + +![][image47] +[image47]: /blog/plantbasedmeta/image47.png + +**Systolic Blood Pressure: Plant-based by Duration (vs Baseline)** + +![][image48] +[image48]: /blog/plantbasedmeta/image48.png + +**Systolic Blood Pressure: Plant-based by Weight Loss (vs Control)** + +![][image49] +[image49]: /blog/plantbasedmeta/image49.png + +**Systolic Blood Pressure: Plant-based by Weight Loss (vs Baseline)** + +![][image50] +[image50]: /blog/plantbasedmeta/image50.png + +# DIASTOLIC BLOOD PRESSURE + +**Diastolic Blood Pressure: Plant-based (vs Control)** + +![][image51] +[image51]: /blog/plantbasedmeta/image51.png + +**Diastolic Blood Pressure: Plant-based (vs Baseline)** + +![][image52] +[image52]: /blog/plantbasedmeta/image52.png + +**Diastolic Blood Pressure: Plant-based by Duration (vs Control)** + +![][image53] +[image53]: /blog/plantbasedmeta/image53.png + +**Diastolic Blood Pressure: Plant-based by Duration (vs Baseline)** + +![][image54] +[image54]: /blog/plantbasedmeta/image54.png + +**Diastolic Blood Pressure: Plant-based by Weight Loss (vs Control)** + +![][image55] +[image55]: /blog/plantbasedmeta/image55.png + +**Diastolic Blood Pressure: Plant-based by Weight Loss (vs Baseline)** + +![][image56] +[image56]: /blog/plantbasedmeta/image56.png + +# CHEMISTRY + +# HEMAGLOBIN A1C + +**Hemoglobin A1C: Plant-based (vs Control)** + +![][image57] +[image57]: /blog/plantbasedmeta/image57.png + +**Hemoglobin A1C: Plant-based (vs Baseline)** + +![][image58] +[image58]: /blog/plantbasedmeta/image58.png + +**Hemoglobin A1C: Plant-based by Duration (vs Control)** + +![][image59] +[image59]: /blog/plantbasedmeta/image59.png + +**Hemoglobin A1C: Plant-based by Duration (vs Baseline)** + +![][image60] +[image60]: /blog/plantbasedmeta/image60.png + +**Hemoglobin A1C: Plant-based by Weight Loss (vs Control)** + +![][image61] +[image61]: /blog/plantbasedmeta/image61.png + +**Hemoglobin A1C: Plant-based by Weight Loss (vs Baseline)** + +![][image62] +[image62]: /blog/plantbasedmeta/image62.png + +# BLOOD GLUCOSE + +**Blood Glucose: Plant-based (vs Control)** + +![][image63] +[image63]: /blog/plantbasedmeta/image63.png + +**Blood Glucose: Plant-based (vs Baseline)** + +![][image64] +[image64]: /blog/plantbasedmeta/image64.png + +**Blood Glucose: Plant-based by Duration (vs Control)** + +![][image65] +[image65]: /blog/plantbasedmeta/image65.png + +**Blood Glucose: Plant-based by Duration (vs Baseline)** + +![][image66] +[image66]: /blog/plantbasedmeta/image66.png + +**Blood Glucose: Plant-based by Weight Loss (vs Control)** + +![][image67] +[image67]: /blog/plantbasedmeta/image67.png + +**Blood Glucose: Plant-based by Weight Loss (vs Baseline)** + +![][image68] +[image68]: /blog/plantbasedmeta/image68.png + +# URIC ACID + +**Uric Acid: Plant-based (vs Control)** + +![][image69] +[image69]: /blog/plantbasedmeta/image69.png + +**Uric Acid: Plant-based (vs Baseline)** + +![][image70] +[image70]: /blog/plantbasedmeta/image70.png + +**Uric Acid: Plant-based by Duration (vs Control)** + +![][image71] +[image71]: /blog/plantbasedmeta/image71.png + +**Uric Acid: Plant-based by Duration (vs Baseline)** + +![][image72] +[image72]: /blog/plantbasedmeta/image72.png + +# WHITE BLOOD CELL COUNT + +**White Blood Cell Count: Plant-based (vs Control)** + +![][image73] +[image73]: /blog/plantbasedmeta/image73.png + +**White Blood Cell Count: Plant-based (vs Baseline)** + +![][image74] +[image74]: /blog/plantbasedmeta/image74.png + +**White Blood Cell Count: Plant-based by Duration (vs Control)** + +![][image75] +[image75]: /blog/plantbasedmeta/image75.png + +**White Blood Cell Count: Plant-based by Duration (vs Baseline)** + +![][image76] +[image76]: /blog/plantbasedmeta/image76.png + +#TRIMETHYLAMINE N-OXIDE + +**Trimethylamine N-Oxide: Plant-based (vs Control)** + +![][image77] +[image77]: /blog/plantbasedmeta/image77.png + +**Trimethylamine N-Oxide: Plant-based (vs Baseline)** + +![][image78] +[image78]: /blog/plantbasedmeta/image78.png + +# MALONDIALDEHYDE + +**Malondialdehyde: Plant-based (vs Control)** + +![][image79] +[image79]: /blog/plantbasedmeta/image79.png + +**Malondialdehyde: Plant-based (vs Baseline)** + +![][image80] +[image80]: /blog/plantbasedmeta/image80.png + +**Malondialdehyde: Plant-based by Duration (vs Control)** + +![][image81] +[image81]: /blog/plantbasedmeta/image81.png + +**Malondialdehyde: Plant-based by Duration (vs Baseline)** + +![][image82] +[image82]: /blog/plantbasedmeta/image82.png + +# ENDOCRINE + +# INSULIN + +**Insulin: Plant-based (vs Control)** + +![][image83] +[image83]: /blog/plantbasedmeta/image83.png + +**Insulin: Plant-based (vs Baseline)** + +![][image84] +[image84]: /blog/plantbasedmeta/image84.png + +**Insulin: Plant-based by Duration (vs Control)** + +![][image85] +[image85]: /blog/plantbasedmeta/image85.png + +**Insulin: Plant-based by Duration (vs Baseline)** + +![][image86] +[image86]: /blog/plantbasedmeta/image86.png + +**Insulin: Plant-based by Weight Loss (vs Control)** + +![][image87] +[image87]: /blog/plantbasedmeta/image87.png + +**Insulin: Plant-based by Weight Loss (vs Baseline)** + +![][image88] +[image88]: /blog/plantbasedmeta/image88.png + +# INSULIN-LIKE GROWTH FACTOR 1 + +**Insulin-Like Growth Factor 1: Plant-based (vs Control)** + +![][image89] +[image89]: /blog/plantbasedmeta/image89.png + +**Insulin-Like Growth Factor 1: Plant-based (vs Baseline)** + +![][image90] +[image90]: /blog/plantbasedmeta/image90.png + +# INFLAMMATION + +# HIGH SENSITIVITY C-REACTIVE PROTEIN + +**High Sensitivity C-Reactive Protein: Plant-based (vs Control)** + +![][image91] +[image91]: /blog/plantbasedmeta/image91.png + +**High Sensitivity C-Reactive Protein: Plant-based (vs Baseline)** + +![][image92] +[image92]: /blog/plantbasedmeta/image92.png + +**High Sensitivity C-Reactive Protein: Plant-based by Duration (vs Control)** + +![][image93] +[image93]: /blog/plantbasedmeta/image93.png + +**High Sensitivity C-Reactive Protein: Plant-based by Duration (vs Baseline)** + +![][image94] +[image94]: /blog/plantbasedmeta/image94.png + +**High Sensitivity C-Reactive Protein: Plant-based by Weight Loss (vs Control)** + +![][image95] +[image95]: /blog/plantbasedmeta/image95.png + +**High Sensitivity C-Reactive Protein: Plant-based by Weight Loss (vs Baseline)** + +![][image96] +[image96]: /blog/plantbasedmeta/image96.png + +# LOW SENSITIVITY C-REACTIVE PROTEIN + +**Low Sensitivity C-Reactive Protein: Plant-based (vs Control)** + +![][image97] +[image97]: /blog/plantbasedmeta/image97.png + +**Low Sensitivity C-Reactive Protein: Plant-based (vs Baseline)** + +![][image98] +[image98]: /blog/plantbasedmeta/image98.png + +**Low Sensitivity C-Reactive Protein: Plant-based by Duration (vs Control)** + +![][image99] +[image99]: /blog/plantbasedmeta/image99.png + +**Low Sensitivity C-Reactive Protein: Plant-based by Duration (vs Baseline)** + +![][image100] +[image100]: /blog/plantbasedmeta/image100.png + +# TUMOR NECROSIS FACTOR + +**Tumor Necrosis Factor: Plant-based (vs Control)** + +![][image101] +[image101]: /blog/plantbasedmeta/image101.png + +**Tumor Necrosis Factor: Plant-based (vs Baseline)** + +![][image102] +[image102]: /blog/plantbasedmeta/image102.png + +# INTERCELLULAR ADHESION MOLECULE 1 + +**Intercellular Adhesion Molecule 1: Plant-based (vs Control)** + +![][image103] +[image103]: /blog/plantbasedmeta/image103.png + +**Intercellular Adhesion Molecule 1: Plant-based (vs Baseline)** + +![][image104] +[image104]: /blog/plantbasedmeta/image104.png + +**Intercellular Adhesion Molecule 1: Plant-based by Duration (vs Control)** + +![][image105] +[image105]: /blog/plantbasedmeta/image105.png + +**Intercellular Adhesion Molecule 1: Plant-based by Duration (vs Baseline)** + +![][image106] +[image106]: /blog/plantbasedmeta/image106.png + +# VASCULAR CELLULAR ADHESION MOLECULE 1 + +**Vascular Cellular Adhesion Molecule 1: Plant-based (vs Control)** + +![][image107] +[image107]: /blog/plantbasedmeta/image107.png + +**Vascular Cellular Adhesion Molecule 1: Plant-based (vs Baseline)** + +![][image108] +[image108]: /blog/plantbasedmeta/image108.png + +**Vascular Cellular Adhesion Molecule 1: Plant-based by Duration (vs Control)** + +![][image109] +[image109]: /blog/plantbasedmeta/image109.png + +**Vascular Cellular Adhesion Molecule 1: Plant-based by Duration (vs Baseline)** + +![][image110] +[image110]: /blog/plantbasedmeta/image110.png + +# MONOCYTE CHEMOATTRACTANT PROTEIN-1 + +**Monocyte Chemoattractant Protein-1: Plant-based (vs Control)** + +![][image111] +[image111]: /blog/plantbasedmeta/image111.png + +**Monocyte Chemoattractant Protein-1: Plant-based (vs Baseline)** + +![][image112] +[image112]: /blog/plantbasedmeta/image112.png + +# INTERLEUKIN 6 + +**Interleukin 6: Plant-based (vs Control)** + +![][image113] +[image113]: /blog/plantbasedmeta/image113.png + +**Interleukin 6: Plant-based (vs Baseline)** + +![][image114] +[image114]: /blog/plantbasedmeta/image114.png + +**Interleukin 6: Plant-based by Duration (vs Control)** + +![][image115] +[image115]: /blog/plantbasedmeta/image115.png + +**Interleukin 6: Plant-based by Duration (vs Baseline)** + +![][image116] +[image116]: /blog/plantbasedmeta/image116.png + +# INTERLEUKIN 8 + +**Interleukin 8: Plant-based (vs Control)** + +![][image117] +[image117]: /blog/plantbasedmeta/image117.png + +**Interleukin 8: Plant-based (vs Baseline)** + +![][image118] +[image118]: /blog/plantbasedmeta/image118.png + +# INTERLEUKIN 10 + +**Interleukin 10: Plant-based (vs Control)** + +![][image119] +[image119]: /blog/plantbasedmeta/image119.png + +**Interleukin 10: Plant-based (vs Baseline)** + +![][image120] +[image120]: /blog/plantbasedmeta/image120.png + +# KIDNEY FUNCTION + +# UREA + +**Urea: Plant-based (vs Control)** + +![][image121] +[image121]: /blog/plantbasedmeta/image121.png + +**Urea: Plant-based (vs Baseline)** + +![][image122] +[image122]: /blog/plantbasedmeta/image122.png + +# LIPIDOLOGY + +# LOW DENSITY LIPOPROTEIN CHOLESTEROL + +**Low Density Lipoprotein Cholesterol: Plant-based (vs Control)** + +![][image123] +[image123]: /blog/plantbasedmeta/image123.png + +**Low Density Lipoprotein Cholesterol: Plant-based (vs Baseline)** + +![][image124] +[image124]: /blog/plantbasedmeta/image124.png + +**Low Density Lipoprotein Cholesterol: Plant-based by Duration (vs Control)** + +![][image125] +[image125]: /blog/plantbasedmeta/image125.png + +**Low Density Lipoprotein Cholesterol: Plant-based by Duration (vs Baseline)** + +![][image126] +[image126]: /blog/plantbasedmeta/image126.png + +**Low Density Lipoprotein Cholesterol: Plant-based by Weight Loss (vs Control)** + +![][image127] +[image127]: /blog/plantbasedmeta/image127.png + +**Low Density Lipoprotein Cholesterol: Plant-based by Weight Loss (vs Baseline)** + +![][image128] +[image128]: /blog/plantbasedmeta/image128.png + +# HIGH DENSITY LIPOPROTEIN CHOLESTEROL + +**High Density Lipoprotein Cholesterol: Plant-based (vs Control)** + +![][image129] +[image129]: /blog/plantbasedmeta/image129.png + +**High Density Lipoprotein Cholesterol: Plant-based (vs Baseline)** + +![][image130] +[image130]: /blog/plantbasedmeta/image130.png + +**High Density Lipoprotein Cholesterol: Plant-based by Duration (vs Control)** + +![][image131] +[image131]: /blog/plantbasedmeta/image131.png + +**High Density Lipoprotein Cholesterol: Plant-based by Duration (vs Baseline)** + +![][image132] +[image132]: /blog/plantbasedmeta/image132.png + +**High Density Lipoprotein Cholesterol: Plant-based by Weight Loss (vs Control)** + +![][image133] +[image133]: /blog/plantbasedmeta/image133.png + +**High Density Lipoprotein Cholesterol: Plant-based by Weight Loss (vs Baseline)** + +![][image134] +[image134]: /blog/plantbasedmeta/image134.png + +# TRIGLYCERIDES + +**Triglycerides: Plant-based (vs Control)** + +![][image135] +[image135]: /blog/plantbasedmeta/image135.png + +**Triglycerides: Plant-based (vs Baseline)** + +![][image136] +[image136]: /blog/plantbasedmeta/image136.png + +**Triglycerides: Plant-based by Duration (vs Control)** + +![][image137] +[image137]: /blog/plantbasedmeta/image137.png + +**Triglycerides: Plant-based by Duration (vs Baseline)** + +![][image138] +[image138]: /blog/plantbasedmeta/image138.png + +**Triglycerides: Plant-based by Weight Loss (vs Control)** + +![][image139] +[image139]: /blog/plantbasedmeta/image139.png + +**Triglycerides: Plant-based by Weight Loss (vs Baseline)** + +![][image140] +[image140]: /blog/plantbasedmeta/image140.png + +# APOLIPOPROTEIN B + +**Apolipoprotein B: Plant-based (vs Control)** + +![][image141] +[image141]: /blog/plantbasedmeta/image141.png + +**Apolipoprotein B: Plant-based (vs Baseline)** + +![][image142] +[image142]: /blog/plantbasedmeta/image142.png + +**Apolipoprotein B: Plant-based by Duration (vs Control)** + +![][image143] +[image143]: /blog/plantbasedmeta/image143.png + +**Apolipoprotein B: Plant-based by Duration (vs Baseline)** + +![][image144] +[image144]: /blog/plantbasedmeta/image144.png + +**Apolipoprotein B: Plant-based by Weight Loss (vs Control)** + +![][image145] +[image145]: /blog/plantbasedmeta/image145.png + +**Apolipoprotein B: Plant-based by Weight Loss (vs Baseline)** + +![][image146] +[image146]: /blog/plantbasedmeta/image146.png + +# APOLIPOPROTEIN A1 + +**Apolipoprotein A1: Plant-based (vs Control)** + +![][image147] +[image147]: /blog/plantbasedmeta/image147.png + +**Apolipoprotein A1: Plant-based (vs Baseline)** + +![][image148] +[image148]: /blog/plantbasedmeta/image148.png + +**Apolipoprotein A1: Plant-based by Duration (vs Control)** + +![][image149] +[image149]: /blog/plantbasedmeta/image149.png + +**Apolipoprotein A1: Plant-based by Duration (vs Baseline)** + +![][image150] +[image150]: /blog/plantbasedmeta/image150.png + +**Apolipoprotein A1: Plant-based by Weight Loss (vs Control)** + +![][image151] +[image151]: /blog/plantbasedmeta/image151.png + +**Apolipoprotein A1: Plant-based by Weight Loss (vs Baseline)** + +![][image152] +[image152]: /blog/plantbasedmeta/image152.png + +# LOW DENSITY LIPOPROTEIN PARTICLE COUNT + +**Low Density Lipoprotein Particle Count: Plant-based (vs Control)** + +![][image153] +[image153]: /blog/plantbasedmeta/image153.png + +**Low Density Lipoprotein Particle Count: Plant-based (vs Baseline)** + +![][image154] +[image154]: /blog/plantbasedmeta/image154.png + +**Low Density Lipoprotein Particle Count: Plant-based by Duration (vs Control)** + +![][image155] +[image155]: /blog/plantbasedmeta/image155.png + +**Low Density Lipoprotein Particle Count: Plant-based by Duration (vs Baseline)** + +![][image156] +[image156]: /blog/plantbasedmeta/image156.png + +# LOW DENSITY LIPOPROTEIN PARTICLE SIZE + +**Low Density Lipoprotein Particle Size: Plant-based (vs Control)** + +![][image157] +[image157]: /blog/plantbasedmeta/image157.png + +**Low Density Lipoprotein Particle Size: Plant-based (vs Baseline)** + +![][image158] +[image158]: /blog/plantbasedmeta/image158.png + +**Low Density Lipoprotein Particle Size: Plant-based by Duration (vs Control)** + +![][image159] +[image159]: /blog/plantbasedmeta/image159.png + +**Low Density Lipoprotein Particle Size: Plant-based by Duration (vs Baseline)** + +![][image160] +[image160]: /blog/plantbasedmeta/image160.png + +# LIVER FUNCTION + +**Alanine Aminotransferase (U/L) + +![][image161] +[image161]: /blog/plantbasedmeta/image161.png + +**Alanine Aminotransferase: Plant-based (vs Control)** + +![][image162] +[image162]: /blog/plantbasedmeta/image162.png + +**Alanine Aminotransferase: Plant-based (vs Baseline)** + +![][image163] +[image163]: /blog/plantbasedmeta/image163.png + +**Alanine Aminotransferase: Plant-based by Duration (vs Control)** + +![][image164] +[image164]: /blog/plantbasedmeta/image164.png + +**Alanine Aminotransferase: Plant-based by Duration (vs Baseline)** + +![][image165] +[image165]: /blog/plantbasedmeta/image165.png + +# ASPARTATE AMINOTRANSFERASE + +**Aspartate Aminotransferase: Plant-based (vs Control)** + +![][image166] +[image166]: /blog/plantbasedmeta/image166.png + +**Aspartate Aminotransferase: Plant-based (vs Baseline)** + +![][image167] +[image167]: /blog/plantbasedmeta/image167.png + +# GAMMA-GLUTAMYL TRANSFERASE + +**Gamma-Glutamyl Transferase: Plant-based (vs Control)** + +![][image168] +[image168]: /blog/plantbasedmeta/image168.png + +**Gamma-Glutamyl Transferase: Plant-based (vs Baseline)** + +![][image169] +[image169]: /blog/plantbasedmeta/image169.png + +# BILIRUBIN + +**Bilirubin: Plant-based (vs Control)** + +![][image170] +[image170]: /blog/plantbasedmeta/image170.png + +**Bilirubin: Plant-based (vs Baseline)** + +![][image171] +[image171]: /blog/plantbasedmeta/image171.png + +# THYROID FUNCTION + +**Triiodothyronine (ng/dL) + +![][image172] +[image172]: /blog/plantbasedmeta/image172.png + +**Triiodothyronine: Plant-based (vs Control)** + +![][image173] +[image173]: /blog/plantbasedmeta/image173.png + +**Triiodothyronine: Plant-based (vs Baseline)** + +![][image174] +[image174]: /blog/plantbasedmeta/image174.png + +# THYROXINE + +**Thyroxine: Plant-based (vs Control)** + +![][image175] +[image175]: /blog/plantbasedmeta/image175.png + +**Thyroxine: Plant-based (vs Baseline)** + +![][image176] +[image176]: /blog/plantbasedmeta/image176.png + +# FREE TRIIODOTHYRONINE + +**Free Triiodothyronine: Plant-based (vs Control)** + +![][image177] +[image177]: /blog/plantbasedmeta/image177.png + +**Free Triiodothyronine: Plant-based (vs Baseline)** + +![][image178] +[image-45]: /blog/plantbasedmeta/image-4-45.png + +# THYROXINE + +**Free Thyroxine: Plant-based (vs Control)** + +![][image178] +[image178]: /blog/plantbasedmeta/image178.png + +**Free Thyroxine: Plant-based (vs Baseline)** + +![][image179] +[image179]: /blog/plantbasedmeta/image179.png + +# THYROID STIMULATING HORMONE + +**Thyroid Stimulating Hormone: Plant-based (vs Control)** + +![][image180] +[image180]: /blog/plantbasedmeta/image180.png + +**Thyroid Stimulating Hormone: Plant-based (vs Baseline)** + +![][image181] +[image181]: /blog/plantbasedmeta/image181.png + +# ENERGETICS + +# ENERGY EXPENDITURE + +**Energy Expenditure: Plant-based (vs Control)** + +![][image182] +[image182]: /blog/plantbasedmeta/image182.png + +**Energy Expenditure: Plant-based (vs Baseline)** + +![][image183] +[image183]: /blog/plantbasedmeta/image183.png + +**Energy Expenditure: Plant-based by Duration (vs Control)** + +![][image184] +[image184]: /blog/plantbasedmeta/image184.png + +**Energy Expenditure: Plant-based by Duration (vs Baseline)** + +![][image185] +[image185]: /blog/plantbasedmeta/image185.png + +**Energy Expenditure: Plant-based by Weight Loss (vs Control)** + +![][image186] +[image186]: /blog/plantbasedmeta/image186.png + +**Energy Expenditure: Plant-based by Weight Loss (vs Baseline)** + +![][image187] +[image187]: /blog/plantbasedmeta/image187.png + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Agren, J. J., et al." + , title = "Divergent Changes in Serum Sterols during a Strict Uncooked Vegan Diet in Patients with Rheumatoid Arthritis" + , journal = "The British Journal of Nutrition" + , year = "2001" + , link = "https://doi.org/10.1079/bjn2000234" + } + , { author = "Alleman, Rick J., et al." + , title = "Both a Traditional and Modified Daniel Fast Improve the Cardio-Metabolic Profile in Men and Women" + , journal = "Lipids in Health and Disease" + , year = "2013" + , link = "https://doi.org/10.1186/1476-511X-12-114" + } + , { author = "Barnard, N. D., et al." + , title = "Effectiveness of a Low-Fat Vegetarian Diet in Altering Serum Lipids in Healthy Premenopausal Women" + , journal = "The American Journal of Cardiology" + , year = "2000" + , link = "https://doi.org/10.1016/s0002-9149(99)00911-x" + } + , { author = "Barnard, Neal D., et al." + , title = "The Effects of a Low-Fat, Plant-Based Dietary Intervention on Body Weight, Metabolism, and Insulin Sensitivity" + , journal = "The American Journal of Medicine" + , year = "2005" + , link = "https://doi.org/10.1016/j.amjmed.2005.03.039" + } + , { author = "Barnard, Neal D., et al." + , title = "A Low-Fat Vegan Diet Improves Glycemic Control and Cardiovascular Risk Factors in a Randomized Clinical Trial in Individuals with Type 2 Diabetes" + , journal = "Diabetes Care" + , year = "2006" + , link = "https://doi.org/10.2337/dc06-0606" + } + , { author = "Barnard, Neal D., et al." + , title = "A Low-Fat Vegan Diet and a Conventional Diabetes Diet in the Treatment of Type 2 Diabetes: A Randomized, Controlled, 74-Wk Clinical Trial" + , journal = "The American Journal of Clinical Nutrition" + , year = "2009" + , link = "https://doi.org/10.3945/ajcn.2009.26736H" + } + , { author = "Barnard, Neal D., et al." + , title = "Turning the Waiting Room into a Classroom: Weekly Classes Using a Vegan or a Portion-Controlled Eating Plan Improve Diabetes Control in a Randomized Translational Study" + , journal = "Journal of the Academy of Nutrition and Dietetics" + , year = "2018" + , link = "https://doi.org/10.1016/j.jand.2017.11.017" + } + , { author = "Barnard, Neal D., et al." + , title = "A Mediterranean Diet and Low-Fat Vegan Diet to Improve Body Weight and Cardiometabolic Risk Factors: A Randomized, Cross-over Trial" + , journal = "Journal of the American Nutrition Association" + , year = "2022" + , link = "https://doi.org/10.1080/07315724.2020.1869625" + } + , { author = "Bloomer, Richard J., et al." + , title = "Comparison of a Restricted and Unrestricted Vegan Diet Plan with a Restricted Omnivorous Diet Plan on Health-Specific Measures" + , journal = "Healthcare (Basel, Switzerland)" + , year = "2015" + , link = "https://doi.org/10.3390/healthcare3030544" + } + , { author = "Bunner, Anne E., et al." + , title = "Nutrition Intervention for Migraine: A Randomized Crossover Trial" + , journal = "The Journal of Headache and Pain" + , year = "2014" + , link = "https://doi.org/10.1186/1129-2377-15-69" + } + , { author = "Crimarco, Anthony, et al." + , title = "A Randomized Crossover Trial on the Effect of Plant-Based Compared with Animal-Based Meat on Trimethylamine-N-Oxide and Cardiovascular Disease Risk Factors in Generally Healthy Adults: Study With Appetizing Plantfood-Meat Eating Alternative Trial (SWAP-MEAT)" + , journal = "The American Journal of Clinical Nutrition" + , year = "2020" + , link = "https://doi.org/10.1093/ajcn/nqaa203" + } + , { author = "David, Lawrence A., et al." + , title = "Diet Rapidly and Reproducibly Alters the Human Gut Microbiome" + , journal = "Nature" + , year = "2014" + , link = "https://doi.org/10.1038/nature12820" + } + , { author = "De Natale, Claudia, et al." + , title = "Effects of a Plant-Based High-Carbohydrate/High-Fiber Diet versus High-Monounsaturated Fat/Low-Carbohydrate Diet on Postprandial Lipids in Type 2 Diabetic Patients" + , journal = "Diabetes Care" + , year = "2009" + , link = "https://doi.org/10.2337/dc09-0266" + } + , { author = "Crosby, Lelia, et al." + , title = "Changes in Food and Nutrient Intake and Diet Quality on a Low-Fat Vegan Diet Are Associated with Changes in Body Weight, Body Composition, and Insulin Sensitivity in Overweight Adults: A Randomized Clinical Trial" + , journal = "Journal of the Academy of Nutrition and Dietetics" + , year = "2022" + , link = "https://doi.org/10.1016/j.jand.2022.04.008" + } + , { author = "Draper, Colleen Fogarty, et al." + , title = "Vegan and Animal Meal Composition and Timing Influence Glucose and Lipid Related Postprandial Metabolic Profiles" + , journal = "Molecular Nutrition & Food Research" + , year = "2019" + , link = "https://doi.org/10.1002/mnfr.201800568" + } + , { author = "Elkan, Ann-Charlotte, et al." + , title = "Gluten-Free Vegan Diet Induces Decreased LDL and Oxidized LDL Levels and Raised Atheroprotective Natural Antibodies against Phosphorylcholine in Patients with Rheumatoid Arthritis: A Randomized Study" + , journal = "Arthritis Research & Therapy" + , year = "2008" + , link = "https://doi.org/10.1186/ar2388" + } + , { author = "Ferdowsian, Hope R., et al." + , title = "A Multicomponent Intervention Reduces Body Weight and Cardiovascular Risk at a GEICO Corporate Site" + , journal = "American Journal of Health Promotion: AJHP" + , year = "2010" + , link = "https://doi.org/10.4278/ajhp.081027-QUAN-255" + } + , { author = "Gardner, Christopher D., et al." + , title = "The Effect of a Plant-Based Diet on Plasma Lipids in Hypercholesterolemic Adults: A Randomized Trial" + , journal = "Annals of Internal Medicine" + , year = "2005" + , link = "https://doi.org/10.7326/0003-4819-142-9-200505030-00007" + } + , { author = "Hall, Kevin D., et al." + , title = "Effect of a Plant-Based, Low-Fat Diet versus an Animal-Based, Ketogenic Diet on Ad Libitum Energy Intake" + , journal = "Nature Medicine" + , year = "2021" + , link = "https://doi.org/10.1038/s41591-020-01209-1" + } + , { author = "Jenkins, David J. A., et al." + , title = "The Effect of a Plant-Based Low-Carbohydrate (‘Eco-Atkins’) Diet on Body Weight and Blood Lipid Concentrations in Hyperlipidemic Subjects" + , journal = "Archives of Internal Medicine" + , year = "2009" + , link = "https://doi.org/10.1001/archinternmed.2009.115" + } + , { author = "Jenkins, David J. A., et al." + , title = "Effect of a Dietary Portfolio of Cholesterol-Lowering Foods given at 2 Levels of Intensity of Dietary Advice on Serum Lipids in Hyperlipidemia: A Randomized Controlled Trial." + , journal = "JAMA" + , year = "2011" + , link = "https://doi.org/10.1001/jama.2011.1202" + } + , { author = "Jenkins, David J. A., et al." + , title = "Effect of a 6-Month Vegan Low-Carbohydrate ('Eco-Atkins’) Diet on Cardiovascular Risk Factors and Body Weight in Hyperlipidaemic Adults: A Randomised Controlled Trial." + , journal = "BMJ Open" + , year = "2014" + , link = "https://doi.org/10.1136/bmjopen-2013-003505" + } + , { author = "Kaartinen, K., et al." + , title = "Vegan Diet Alleviates Fibromyalgia Symptoms." + , journal = "Scandinavian Journal of Rheumatology" + , year = "2000" + , link = "https://doi.org/10.1080/030097400447697" + } + , { author = "Kahleova, Hana, et al." + , title = "A Plant-Based High-Carbohydrate, Low-Fat Diet in Overweight Individuals in a 16-Week Randomized Clinical Trial: The Role of Carbohydrates." + , journal = "Nutrients" + , year = "2018" + , link = "https://doi.org/10.3390/nu10091302" + } + , { author = "Kahleova, Hana, et al." + , title = "A Plant-Based Meal Stimulates Incretin and Insulin Secretion More Than an Energy- and Macronutrient-Matched Standard Meal in Type 2 Diabetes: A Randomized Crossover Study." + , journal = "Nutrients" + , year = "2019" + , link = "https://doi.org/10.3390/nu11030486" + } + , { author = "Kahleova, Hana, et al." + , title = "Effect of a Low-Fat Vegan Diet on Body Weight, Insulin Sensitivity, Postprandial Metabolism, and Intramyocellular and Hepatocellular Lipid Levels in Overweight Adults: A Randomized Clinical Trial." + , journal = "JAMA Network Open" + , year = "2020" + , link = "https://doi.org/10.1001/jamanetworkopen.2020.25454" + } + , { author = "Kahleova, Hana, et al." + , title = "Fat Quantity and Quality, as Part of a Low-Fat, Vegan Diet, Are Associated with Changes in Body Composition, Insulin Resistance, and Insulin Secretion. A 16-Week Randomized Controlled Trial." + , journal = "Nutrients" + , year = "2019" + , link = "https://doi.org/10.3390/nu11030615" + } + , { author = "Kjeldsen-Kragh, J., et al." + , title = "Vegetarian Diet for Patients with Rheumatoid Arthritis: Can the Clinical Effects Be Explained by the Psychological Characteristics of the Patients?" + , journal = "British Journal of Rheumatology" + , year = "1994" + , link = "https://doi.org/10.1093/rheumatology/33.6.569" + } + , { author = "Klementova, Marta, et al." + , title = "A Plant-Based Meal Increases Gastrointestinal Hormones and Satiety More Than an Energy- and Macronutrient-Matched Processed-Meat Meal in T2D, Obese, and Healthy Men: A Three-Group Randomized Crossover Study." + , journal = "Nutrients" + , year = "2019" + , link = "https://doi.org/10.3390/nu11010157" + } + , { author = "Koebnick, C., et al." + , title = "Double-Blind, Randomized Feedback Control Fails to Improve the Hypocholesterolemic Effect of a Plant-Based Low-Fat Diet in Patients with Moderately Elevated Total Cholesterol Levels." + , journal = "European Journal of Clinical Nutrition" + , year = "2004" + , link = "https://doi.org/10.1038/sj.ejcn.1601984" + } + , { author = "Lederer, Ann-Kathrin, et al." + , title = "Vitamin B12 Status Upon Short-Term Intervention with a Vegan Diet-A Randomized Controlled Trial in Healthy Participants." + , journal = "Nutrients" + , year = "2019" + , link = "https://doi.org/10.3390/nu11112815" + } + , { author = "Lee, Yu-Mi, et al." + , title = "Effect of a Brown Rice Based Vegan Diet and Conventional Diabetic Diet on Glycemic Control of Patients with Type 2 Diabetes: A 12-Week Randomized Clinical Trial." + , journal = "PloS One" + , year = "2016" + , link = "https://doi.org/10.1371/journal.pone.0155918" + } + , { author = "Ling, W. H., and O. Hänninen." + , title = "Shifting from a Conventional Diet to an Uncooked Vegan Diet Reversibly Alters Fecal Hydrolytic Activities in Humans." + , journal = "The Journal of Nutrition" + , year = "1992" + , link = "https://doi.org/10.1093/jn/122.4.924" + } + , { author = "Macknin, Michael, et al." + , title = "Plant-Based, No-Added-Fat or American Heart Association Diets: Impact on Cardiovascular Risk in Obese Children with Hypercholesterolemia and Their Parents." + , journal = "The Journal of Pediatrics" + , year = "2015" + , link = "https://doi.org/10.1016/j.jpeds.2014.12.058" + } + , { author = "Mishra, S., et al." + , title = "A Multicenter Randomized Controlled Trial of a Plant-Based Nutrition Program to Reduce Body Weight and Cardiovascular Risk in the Corporate Setting: The GEICO Study." + , journal = "European Journal of Clinical Nutrition" + , year = "2013" + , link = "https://doi.org/10.1038/ejcn.2013.92" + } + , { author = "Neacsu, Madalina, et al." + , title = "Appetite Control and Biomarkers of Satiety with Vegetarian (Soy) and Meat-Based High-Protein Diets for Weight Loss in Obese Men: A Randomized Crossover Trial." + , journal = "The American Journal of Clinical Nutrition" + , year = "2014" + , link = "https://doi.org/10.3945/ajcn.113.077503" + } + , { author = "Nicholson, A. S., et al." + , title = "Toward Improved Management of NIDDM: A Randomized, Controlled, Pilot Intervention Using a Lowfat, Vegetarian Diet." + , journal = "Preventive Medicine" + , year = "1999" + , link = "https://doi.org/10.1006/pmed.1999.0529" + } + , { author = "Ornish, D., et al." + , title = "Can Lifestyle Changes Reverse Coronary Heart Disease? The Lifestyle Heart Trial." + , journal = "Lancet (London, England)" + , year = "1990" + , link = "https://doi.org/10.1016/0140-6736(90)91656-u" + } + , { author = "Ornish, D., et al." + , title = "Intensive Lifestyle Changes for Reversal of Coronary Heart Disease." + , journal = "JAMA" + , year = "1998" + , link = "https://doi.org/10.1001/jama.280.23.2001" + } + , { author = "Päivärinta, Essi, et al." + , title = "Replacing Animal-Based Proteins with Plant-Based Proteins Changes the Composition of a Whole Nordic Diet-A Randomised Clinical Trial in Healthy Finnish Adults." + , journal = "Nutrients" + , year = "2020" + , link = "https://doi.org/10.3390/nu12040943" + } + , { author = "Peltonen, R., et al." + , title = "Faecal Microbial Flora and Disease Activity in Rheumatoid Arthritis during a Vegan Diet." + , journal = "British Journal of Rheumatology" + , year = "1997" + , link = "https://doi.org/10.1093/rheumatology/36.1.64" + } + , { author = "Ramal, Edelweiss, et al." + , title = "Impact of a Plant-Based Diet and Support on Mitigating Type 2 Diabetes Mellitus in Latinos Living in Medically Underserved Areas." + , journal = "American Journal of Health Promotion: AJHP" + , year = "2018" + , link = "https://doi.org/10.1177/0890117117706793" + } + , { author = "Shah, Binita, et al." + , title = "Anti-Inflammatory Effects of a Vegan Diet Versus the American Heart Association-Recommended Diet in Coronary Artery Disease Trial." + , journal = "Journal of the American Heart Association" + , year = "2018" + , link = "https://doi.org/10.1161/JAHA.118.011367" + } + , { author = "Sofi, Francesco, et al." + , title = "Low-Calorie Vegetarian Versus Mediterranean Diets for Reducing Body Weight and Improving Cardiovascular Risk Profile: CARDIVEG Study (Cardiovascular Prevention With Vegetarian Diet)." + , journal = "Circulation" + , year = "2018" + , link = "https://doi.org/10.1161/CIRCULATIONAHA.117.030088" + } + , { author = "Sutliffe, Jay T., et al." + , title = "C-Reactive Protein Response to a Vegan Lifestyle Intervention." + , journal = "Complementary Therapies in Medicine" + , year = "2015" + , link = "https://doi.org/10.1016/j.ctim.2014.11.001" + } + , { author = "Turner-McGrievy, Gabrielle M., et al." + , title = "A Two-Year Randomized Weight Loss Trial Comparing a Vegan Diet to a More Moderate Low-Fat Diet." + , journal = "Obesity (Silver Spring, Md.)" + , year = "2007" + , link = "https://doi.org/10.1038/oby.2007.270" + } + , { author = "Turner-McGrievy, Gabrielle M., et al." + , title = "Low Glycemic Index Vegan or Low-Calorie Weight Loss Diets for Women with Polycystic Ovary Syndrome: A Randomized Controlled Feasibility Study." + , journal = "Nutrition Research (New York, N.Y.)" + , year = "2014" + , link = "https://doi.org/10.1016/j.nutres.2014.04.011" + } + , { author = "Turner-McGrievy, Gabrielle M., et al." + , title = "Comparative Effectiveness of Plant-Based Diets for Weight Loss: A Randomized Controlled Trial of Five Different Diets." + , journal = "Nutrition (Burbank, Los Angeles County, Calif.)" + , year = "2015" + , link = "https://doi.org/10.1016/j.nut.2014.09.002" + } + , { author = "Turner-McGrievy, Gabrielle M., et al." + , title = "Randomization to Plant-Based Dietary Approaches Leads to Larger Short-Term Improvements in Dietary Inflammatory Index Scores and Macronutrient Intake Compared with Diets That Contain Meat." + , journal = "Nutrition Research (New York, N.Y.)" + , year = "2015" + , link = "https://doi.org/10.1016/j.nutres.2014.11.007" + } + , { author = "Wright, N., et al." + , title = "The BROAD Study: A Randomised Controlled Trial Using a Whole Food Plant-Based Diet in the Community for Obesity, Ischaemic Heart Disease or Diabetes." + , journal = "Nutrition & Diabetes" + , year = "2017" + , link = "https://doi.org/10.1038/nutd.2017.3" + } + , { author = "Yadav, Vijayshree, et al." + , title = "Low-Fat, Plant-Based Diet in Multiple Sclerosis: A Randomized Controlled Trial." + , journal = "Multiple Sclerosis and Related Disorders" + , year = "2016" + , link = "https://doi.org/10.1016/j.msard.2016.07.001" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/QuackSmashing.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/QuackSmashing.elm new file mode 100755 index 0000000..b63caba --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/QuackSmashing.elm @@ -0,0 +1,333 @@ +module Config.Pages.Blogs.MainBlog.QuackSmashing exposing (articleQuackSmashing) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleQuackSmashing : BlogArticle +articleQuackSmashing = + { articleName = "The Hitchhiker's Guide to Quack-Smashing" + , articleLink = Path.toString Path.Blog_Quacksmashing + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "quacksmashing" + , articlePublished = "Dec 24, 2022" + , articleBody = """ +By no stretch of the imagination is there any shortage of quackery on social media. Chances are excellent that if you’ve spent any appreciable amount of time on social media, you have encountered some number of quacks and some sort of quackery that they espouse. You might not even be aware that you’re looking at quackery while you’re being exposed to it. So, the aim of this article will be to attempt to simplify the processes of both identifying quackery and dealing with quackery. + +Fundamentally, the issue is not merely that quacks are just interpreting studies incorrectly or affirming crazy beliefs. Those are just symptoms of the problem, rather than being the root cause of the problem. Typically, the problem is occurring within their epistemic framework, and is the very thing that is actually leading them to form their crazy beliefs to begin with. As such, a universally efficacious way to get under a quack’s position and expose them as a raving lunatic is to press them on their epistemic standards in one way or another. That is to say, subject their belief-formation process to a thorough stirring, so that their insanity is allowed to bubble to the surface for all to see. + +This means dragging them down to a level that is inferentially prior to their current understanding, and away from the level of research and studies. Just like the scientific method is inferentially prior to studies or study design, scientific epistemology is inferentially prior to the scientific method. If your starting point is on the level of studies and study design, following the inferential lineage backward will eventually bring you to a level where the premises will all be principles, virtues, or axioms. This is the level we need to bring the quack to in order to address the fundamental flaws in their reasoning. + +The ultimate aim of this process is to expose errors in the quack’s reasoning, not to necessarily convince them of anything. Of course, the hope is that they correct the complications in their belief-formation process, such that they cease to be a quack by the end of the discussion. However, this isn’t a very likely outcome, but this is nonetheless the outcome that you should be aiming for in order to have the best good faith conversation possible. To explore why this outcome isn’t particularly likely, we’ll have to explore what a quack is, and why they’re typically so immovable. So, let’s get into some definitions. + +# QUACK DEFINITION + +>_A quack is a type of scientific delinquent— one who brandishes the trappings of science, yet whose scientific standards are obstinately in violation of those considered most virtuous within the contemporary philosophy of science._ + +It was no easy task to get to the bottom of what is so objectionable about the quack’s behaviour. It took interviewing multiple domain experts and trashing dozens of revisions, but I think I finally have something that is workable and minimally assailable for the time being. Essentially, the trait that quantifies over all quacks is a fundamental lack of respect for the rules of scientific inquiry. + +If we were to think of science as a country with laws, a quack would be a contemptuous sort of outlaw within that country. But, quacks are not only rule-breakers by nature, they also actively turn their noses up at the rules— almost relishing in their own intransigence. Despite the commonalities, quacks can usually be categorized in at least one of three distinct ways: **deranged**, **dense**, or **dishonest**. + +**Deranged** + +1. **The Zealot**: one who has assimilated quackery into their identity, and will be emotionally damaged if the quackery is challenged. + +2. **The Contrarian**: one who espouses quackery due to strong anti-establishment and/or conspiratorial and/or paranoid tendencies. + +3. **The Narcissist**: one who is simply so self-assured of their own infallibility that they cannot fathom that their beliefs could be quackery. + +4. **The Aggrieved**: one who feels wronged by some conventional scientific paradigm and is seeking vindication or revenge through quackery. + +5. **The JAQ-off**: one who slyly hat-tips to quackery, often in an ostentatious or cheeky manner, but claims to be just asking questions when challenged. + +6. **The Circlejerker**: one who is deeply impressionable and merely forms the beliefs of whatever community will accept them. + + +**Dense** + +1. **The Zombie**: one who has made little to no effort to form their own beliefs, but rather just recapitulates the beliefs of influential people. + +2. **The Imbecile**: one who lacks the requisite intelligence and/or cognitive faculties to form rational beliefs of their own accord. + + +**Dishonest** + +1. T**he Grifter**: one who espouses quackery, not necessarily because they believe it to be true, but rather for some ulterior motive such as money or clout. + +2. **The Yo-Yo**: one who spouses both quackery and non-quackery, often to the point of self-contradiction, depending on the context. + + +This probably isn’t an exhaustive list of quack species and subspecies, and will likely be updated in the future. For now, these are the most common types of quacks you’re likely to encounter online or on social media. Most quacks you will encounter will be of the deranged variety, and of them, the majority will be either contrarian or narcissistic. The narcissistic quacks are hardly worth engaging with, unless it is for the benefit of an audience. But other than that, you’ll never convince them of anything because they’re cocksure of their own perfection. Contrarians may be swayed by reason, but it is not particularly likely. + +Much like the narcissistic quack, the dishonest quacks are also not likely to be worth engaging with, except for the benefit of onlookers to whom you seek to reveal the quack’s dishonesty. Dishonest quacks, especially grifters, will tend to sway their affirmations in lockstep with the trends of the time. For example, many grifters who were pushing low carbohydrate diets back in 2017 are now pushing raw, grassfed carnivore diets in 2022. It just depends on what’s trending at the moment. It’s a game to them. Engaging is typically pointless and you’re justified in disengaging, in my opinion. + +Altogether, you have the best chance of convincing dense quacks, because they’re less likely to be as intransigent as other varieties. These types of quacks don’t typically believe quackery due to some emotional commitment or ulterior motives. Usually they’re just either uneducated or dumb. However, if they’re too dumb to understand the difference between good evidence and bad evidence, convincing them may be ultimately beyond your reach. But it is nonetheless worthwhile to attempt reasoning with them. The best discussions will likely be had with the zombie variety of quack, as they’re usually the closest to just being truly naive, and they’re not necessarily dumb. + +Now that we have a bit of a handle on what constitutes a quack, let’s move on to the next definition we need to cover: + +# QUACKERY DEFINITION + +>_Any ostensible hypothesis that either fails to satisfy any critical theoretical virtue of a scientific hypothesis (i.e., testability, fruitfulness, scope, parsimony, conservativism) or satisfies fewer theoretical virtues compared to the prevailing scientific hypotheses against which it is intended to compete._ + +Given that a proposition is a statement that can be either true or false, a scientific hypothesis can be thought of as basically being an empirically testable proposition. For example, say that we wanted to develop a theory to explain the rising of the sun each morning. We could generate a few different hypotheses. Hypothesis A might suppose that the sun rises because God is pulling it across the sky. Hypothesis B might suppose that the sun rises because it is revolving around the Earth. Hypothesis C might suppose that the sun rises because the Earth is spinning. + +Let’s linger on hypothesis A for a moment to discuss some of its issues. Firstly, it’s completely unclear how hypothesis A could be tested, so whether or not it genuinely qualifies as a hypothesis is questionable. Those with a background in science have likely been exposed to the principle that unfalsifiable hypotheses are to be avoided, and hypothesis A is an example of that. Testability is arguably the most important aspect of a scientific hypothesis. Without testability, there is no empirical investigation. Without an empirical investigation, there is no science. The hypothesis ends up being completely ad hoc (which we will discuss later). + +On the other hand, hypothesis B certainly has the capacity to make predictions. One could create a model wherein the sun travels around the Earth, and observations can certainly be made that are consistent with that model. Hypothesis C could be tested similarly. One could construct a model wherein the Earth is spinning and the sun is fixed in place, and observations can be made to see if that model pans out. + +So far, hypothesis B and hypothesis C don’t seem to underdetermine phenomena differently, and the observations seem equally expected on both hypotheses. However, what if we also made the observation that there are other planets out there in space, and we also observe that those planets seem to move in relationship to the sun in a way that suggests that the sun is a fixed object. This observation is more expected on hypothesis C than hypothesis B. The observed phenomena are underdetermined on hypothesis B, and thus hypothesis C would come out on top until there is a better hypothesis to supplant it. + +Great! We have established what it takes for a proposition to be a scientific hypothesis, as well as what it takes for one scientific hypothesis to prevail over another. Now let’s move on to discuss the different criteria that such hypotheses need to satisfy in order for them to be competitive within the domain of science. These are the epistemic virtues we touched on earlier— the standards by which the viability of a tentatively competing scientific hypothesis will be measured. [¹](https://www.oxfordbibliographies.com/display/document/obo-9780195396577/obo-9780195396577-0409.xml) [²](https://books.google.ca/books/about/How_to_Think_About_Weird_Things_Critical.html?id=YR4iAAAAQBAJ&redir_esc=y) + +# THEORETICAL VIRTUES + +1. **Testability**: A hypothesis is scientific only if it is testable, that is, only if it predicts something more than what is predicted by the background theory alone. + +2. **Fruitfulness**: Other things being equal, the best hypothesis is the one that is the most fruitful, that is, makes the most successful novel predictions. + +3. **Scope**: Other things being equal, the best hypothesis is the one that has the greatest scope, that is, that explains and predicts the most diverse phenomena. + +4. **Parsimony**: Other things being equal, the best hypothesis is the simplest one, that is, the one that makes the fewest assumptions. + +5. **Conservatism**: Other things being equal, the best hypothesis is the one that is the most conservative, that is, the one that fits best with established beliefs. + + +All else equal, if an alternative hypothesis fails to outcompete a prevailing hypothesis on any of these measures, why form the belief that the alternative hypothesis is more likely to be true compared to the prevailing hypothesis? Beyond the testability of a hypothesis, the extent to which a hypothesis fails to satisfy any of these theoretical virtues will determine the “ad-hocness” of that hypothesis. An ad hoc hypothesis is also known as a “just-so story”, which is a phrase you may have heard before. + +While it goes without saying that ad-hocness is undesirable in science, it is important to emphasize that this is the crux of the quack’s rhetoric. Quackery is like an artichoke of idiocy, and just-so story-telling is at the heart of it. You have to peel it slowly to expose the fuckery. This sort of delinquent fabulism takes many forms, and it’s not always obvious when a hypothesis is ad-hoc and failing to satisfy one or more theoretical virtues compared to another hypothesis. But, hopefully your intuitions can be adequately primed with a few examples. Let’s examine this scientific hypothesis: + +>_Vegetable oils are the cause of heart disease._ + +At first glance, this hypothesis appears to be extremely attractive in its parsimony. It appears to be making very few assumptions, as it is reducing the cause of heart disease down to a single variable. However, this is an illusion. This hypothesis must actually bootstrap an enormous number of assumptions in order to compensate for its lack of scope and fruitfulness. Not only does the totality of the empirical evidence weigh heavily against this hypothesis, it’s not clear what novel predictions the hypothesis has generated, if any at all. + +The primary issue is that the hypothesis is lacking in scope because it does not account for the majority of our observations regarding vegetable oils and heart disease. Typically, the quack will attempt to compensate for this shortcoming by casting doubt on existing research— “those findings are wrong because epidemiology is pseudoscience”. What the quack doesn’t realize is that this actually decreases the parsimony of their hypothesis. This leaves them with an ad-hoc story that is not particularly unifying, fruitful, or parsimonious. Let’s examine another hypothesis: + +>_Ancestral foods protect against all illnesses.” + +On the face of it, this hypothesis might appear similar to the first in that it lacks scope and fruitfulness, and in turn compromises its own parsimony. However, it may be even worse than that. If ancestral foods are referring to foods that humans consumed during some prehistoric time period, then the hypothesis is actually untestable. Humans no longer have access to those foods, and as such the hypothesis is almost entirely ad hoc, and the theoretical virtues that it upholds are few to none. + +The more sensitive you become to when a hypothesis is failing in its virtuousness, the more straightforward it will be to identify and dispatch quackery. For instance, consider what has been described above in previous examples, and examine these other quack hypotheses carefully: + +> _Red meat protects against mental illness._ +> _Sunlight protects against skin cancer._ +> _Blueberries cure Alzheimer’s disease._ +> _Refined carbohydrates cause obesity._ +> _Milk products impair bone health._ +> _Soy products feminize men._ +> _Vegan diets cure cancer._ + +Remember that quacks fundamentally don’t care about scientific rigour, and virtually all quackery will follow a similar structure at its core— an utter lack of respect for the rules we just discussed. Thus, there is a virtually universally efficacious way of uprooting quackery. Simply interrogate the quack about how their hypothesis better conforms to the rules compared to other hypotheses, and watch them crumble. + +Once you start scrutinizing quackery like this on this basis, you will quickly realize that quacks are just master fabulists— iron chefs of word salads. Mind you, quacks will never admit to this. Even when their bullshit has been revealed to them point blank, the exact lack of rigour that got them to be in their current state will end up keeping them smiling through their humiliation. + +# THE QUACK'S TRICHOTOMY + +At this point it would be worthwhile to discuss the **Quack’s Trichotomy**. This concept has been borrowed from Lance Bush’s anti-realist metaethical thesis. While it was originally a way of categorizing different types of moral realism, it would appear to be highly applicable to categorizing different types of quackery as well. + +Basically, quackery will ultimately reduce down into one of three categories: **false**, **trivial**, or **unintelligible**. As discussed above, most quackery will end up being false (or at least more likely to be false than true). But, there are some other common cases to explore. Identifying just what kind of utterances the quack is making will be helpful in figuring out whether or not it’s even worth entertaining their madness. Consider the following three interpretations of this hypothesis: + +>_Red meat is healthy._ + +**False Interpretation** + +Perhaps the tentative quack cashes out the term “healthy” into some sort of claim about red meat not increasing the risk of heart disease. This can be tested, and it turns out that when the best available data is aggregated together, across multiple domains, red meat consumption reliably associates with an increased risk of heart disease. This means that this hypothesis would just be false, or more likely false than true. + +**Trivial Interpretation** + +Let’s just say that all the tentative quack means by “healthy” is that they themselves just feel really good on a diet that is high in red meat. In this case, the hypothesis is actually going to be “I feel really good on a diet that is high in red meat.” This is not anything that anyone would contest, as it’s clearly true. However, it’s trivially true, and a pointless proposition to utter. We need not debate this. This claim may not necessarily make them a quack, but we should probably just leave this idiot to their fuzzy feelings and move on. + +**Unintelligible Interpretation** + +In this case, we’ll imagine that the tentative quack doesn’t unpack the utterance any further, and just continues to insist that red meat is “healthy”, over and over. If no further clarification is offered, this interpretation of the hypothesis is just gibberish. What is healthy supposed to mean? To me, “healthy” is a relational concept that joins many relata— X is healthy for Y compared to W relative to standard Z (where healthy is defined as an exposure that increases the lag-time to the onset of illness compared to a different exposure). Unless their meaning is unpacked in an intelligible way, their utterance doesn’t even rise to the level of being a proposition. They’re literally just gibberating, and we need not debate their ramblings. Leave them to their delusions. + +In an exceedingly small minority of cases that fall outside of the scope of the **Quack’s Trichotomy**, the tentative quack’s proposition will be true and convincing, rather than being false, trivial, or unintelligible. In this case, the proposition likely isn’t quackery and you likely just mistook the proposition as quackery due to miscommunication. If this happens, you should just accept the proposition and feel good that you learned a new fact today. Enjoy it when it happens. But again, this almost never happens. + +There is one final trope we need to explore, though. Every so often, you will encounter someone who is committed to extraordinarily high standards of evidence. For example, quacks in the nutrition blogosphere will sometimes claim the following: + +> “Evidence cannot be obtained in nutrition science unless you have studied the effects of a food in a multi-generational, quadruple-blind randomized controlled metabolic ward crossover trial in human clones.” + +This is not really a hypothesis. It’s just a claim that directly pertains to scientific epistemology itself, which means we must deal with this in a unique way. In this case, we should simply ask them what theoretical virtue would be either violated or unable to be satisfied unless we had such evidence for our hypothesis? As such, it would be worthwhile to get into a few definitions regarding what constitutes evidence. + +# EVIDENCE DEFINITION + +>_That which is more expected on a given hypothesis compared to the negation of that hypothesis._ + +On this definitions, falling short of achieving a trial design like the one described above does not bar us from making discoveries that are more or less expected on different hypotheses. Thus, failing to achieve such a trial design is not a barrier to discovering any sort of evidence. If a short trial with a limited number of people finds an effect of some intervention, that effect is still going to be expected on a hypothesis that predicts it. So, it’s still evidence. + +Now we’re ready to start tackling quackery ourselves. Next up, we’ll go through a universally applicable procedures for smashing quackery. The beauty is that the procedures leave the burden of proof squarely on the quack, and pressure test their epistemic standards. This means that you probably don’t even need to show up with studies of your own if you don’t want to. The ball will mostly be in their court, and the burden of proof will be squarely theirs. By the end they’ll find themselves looking up from within their own grave and they will have nobody but themselves to blame for them being there. + +Before we move on to the quack-smashing debate procedure, it's recommended that you download the included [dialogue tree](https://drive.google.com/file/d/1QQaN6HRwzp3kY2DAcnHVBxeX6jBhrvkw/view?usp=share_link) and refer to it while reading. + +# PHASE ONE: CLARIFICATION + +**Step 1: Ask for a proposition** + +Essentially, a proposition is what is known as a truth-apt statement. Meaning that it is a statement that can be either true or false. You can think of a proposition like a claim. A common tactic among quacks is to dance around some implied commitment without ever actually explicitly making any claims. + +Quacks are notoriously unclear when they communicate. Sometimes quacks will simply gesture in your direction with a series of vague utterances that merely have the appearance of communicating disagreement. For example, a quack might say to you: + +> _Read the studies you idiot!_ +> _Follow the money to know the truth!_ +> _We’ve been lied to for over fifty years!_ + +Notice how vague these statements are. Quackery thrives on vagueness. You must straightforwardly ask the quack for their position— “I’m sorry, I just want to understand what you mean. What do you think is true that people who believe this study think is false?” Be firm, and stand your ground. Press them until they give you an utterance that at least has the appearance of something propositional. + +**Step 2: Evaluate their ostensible proposition** + +Once you have a proposition, we begin the clarification phase. During this step you are aiming to demystify anything that you find unclear. If there are terms over which there may be disagreement, such as relational terms with missing relata, you must ask for clarification. + +If clarification is required, proceed to **step 2.1**. If clarification is not required, proceed to **step 2.2**. + +**Step 2.1: Ask for clarification** + +Essentially what we need from the quack is a clear, contestable proposition. Scrutinize every word in their proposition if necessary. This is not to bog down the debate, but to make sure that there is as close to a complete, unambiguous shared understanding of the terms being used by the quack as possible. In the vast majority of cases, asking the quack simple clarifying questions about their proposition will make it fall apart on the spot. + +If the tentative quack’s explanation devolves into bullshit like rambling or gibberish, just walk away from the idiot. If it appears intelligible and it’s just some trivial utterance that isn’t worth discussing, we can start assessing its truth value. + +# PHASE TWO: ARGUMENTATION + +**Step 2.2: Check for modal claims** + +If we manage to obtain an intelligible proposition from the quack, we can begin checking for modal language. Modal language typically refers to concepts like impossibility, necessity, possibility, or contingency. Be sensitive to when your interlocutor is using words that function as synonyms for any of these terms. For example, words like “can”, “able”, “may”, “could”, or “capable” should all be taken as synonyms for the modal term “possible”, whereas words like “unable”, “cannot”, “couldn’t”, “unable”, “incapable”, should all be taken as synonyms for the modal term “impossible”. + +Additionally, if your interlocutor suggests that something is necessarily the case, that should be taken as just another way of saying that the contrary is impossible. As such, impossibility and necessity are modal terms that can essentially be captured by the same modal operator. Similarly, if your interlocutor suggests that something is possible, all they’re saying is that it's necessarily not impossible, which is to say that it's contingent upon something else. So, much like impossibility and necessity, possibility and contingency can also be interpreted interchangeably, under the same modal operator. At the end of the day the terms can ultimately be cashed out into what is impossible or possible. + +To be clear, these terms are just operators, and don’t mean much unless they’re in reference to a given modality. Modalities are just means by which these modal operators can be understood. There are two primary modalities that are commonly discussed in the philosophy literature— physical and logical. For example, something is logically impossible if it entails a contradiction, and something is physically impossible if it violates a law of physics. + +Of course there are other modalities. In fact, there are probably infinite numbers of modalities on which an operator like impossible can be understood. For instance, while it’s certainly logically and physically possible to murder someone in any country, it is legally impossible to murder someone in most countries. Though we don’t really use modal language in this way. + +Overall, impossibility can be interpreted as something that is incompatible with a given rule/standard or set of rules/standards, and possibility can just be interpreted as something that is compatible with a given rule/standard or rule/standard set. + +In most cases, if the modal operator they’re invoking relates to possibility, then it’s probably not even worth continuing the discussion. In the vast majority of cases it’s just trivial to claim something is possible. If the proposition contains a modal operator related to impossibility, proceed to **step 2.3**. If their proposition does not contain a modal operator, proceed to **step 2.4**. + +**Step 2.3: Ask which law is broken on their stated modality** + +This step is pretty straightforward. If your interlocutor is claiming something is impossible, ask them on what modality is it impossible. If necessary, explain to them what modalities and modal operators are, just so they’re both clear on what you’re asking of them and what kind of claim they’ve actually made. + +If they cannot unpack the modality and the law that’s violated on that modality first give them the opportunity to amend their claim. If they refuse to amend the claim or are unable to unpack the claim, then proceed to **step 6**. If they actually manage to unpack the modality and the law that’s violated on that modality, and it’s convincing to you, you should probably just concede. + +**Step 2.4: Ask for a goalpost** + +Assuming there were no modal claims in our tentative quack’s proposition, we can proceed to the first step in the actual debate— requesting a goalpost. Basically, you will merely ask them what evidence would be required for them to affirm that their proposition is false. This is different than asking them what evidence it would take for them to reject their proposition. We want to know what it would take for them to affirm their proposition’s negation. + +This step isn’t vital, so it’s not a huge concern if our tentative quack doesn’t render a goalpost to you. However, keep in mind that if they can’t tell you their goalpost for affirming their proposition’s negation, they are essentially telling you that they don’t even know why they believe that their proposition is true. So, it’s up to you if you want to proceed further. If you want to stop here, just shame them for being a sophist and disengage. + +If you decide to continue, proceed to **step 3**. + +**Step 3: Ask for an inference for their proposition** + +This step is pretty straightforward. You’re just straight up asking for the argument for the proposition. After you’ve obtained a clear, contestable proposition from the quack, you must then ask them what the evidence is for their proposition. Asking the quack for evidence is perfectly fair. Don’t let them try to convince you otherwise. They bear the burden of proof, and the onus is solely on them to demonstrate the merits of their proposition. + +If they actually manage to render an argument, you can proceed to **step 3.1**. If they refuse to render an argument, proceed to **step 6**. + +**Step 3.1: Identify the type of inference** + +Basically there are two broad categories of inference someone can make. Either their inference is going to be a posteriori or it is going to be a priori. Both a posteriori and a priori inferences are forms of deductive arguments. However, in contrast to an a priori inference, an a posteriori inference requires synthesizing prior experience of the world. The truth or falsity of an a posteriori inference will rest on empirical evidence. + +**A Posteriori** + +> **P1)** An unmarried person is more likely to be depressed. +> **P2)** Jim is unmarried. +> **C)** Therefore, Jim is more likely to be depressed. + +An a priori inference doesn’t require prior experience of the world, and the truth of falsity of the inference will hinge on the definitions or meaning of the terms used. + +**A Priori** + +> **P1)** An unmarried man is a bachelor. +> **P2)** Jim is an unmarried man. +> **C)** Therefore, Jim is a bachelor. + +For the purposes of this article, we’ll just be focusing on a posteriori inferences. If you are interested in how to address a priori inference, please refer to the included dialogue tree at the top of this section. Otherwise, proceed to **step 3.2**. + +**Step 3.2: Check for modal claims** + +Generally speaking, if their inference is a posteriori and it contains a modal operator, they’re likely to be referring to a physical modality (but they could be referring to another modality). + +If they are invoking an operator that is related to impossibility, proceed to **step 3.3**. Once again, if the invoke a modal operator related to possibility, then it’s probably worthwhile to just agree and disengage, as it’s typically just trivial to claim that things are possible. If there are no modal operators in their claim, proceed to **step 3.4**. + +**Step 3.3: Ask which law is broken on their stated modality** + +The overall procedure is identical to **step 2.3**. If the quack can’t unpack the claim or they refuse to amend the claim, then proceed to **step 6**. If they actually manage to unpack their the modality and the law that’s violated on that modality, and it’s convincing to you, you should probably just concede. + +**Step 3.4: Evaluate their empirical evidence** + +During this step, it pays to have some critical appraisal skills to fall back on, but it’s not necessary. The most important thing to remember is that you have to be honest about what you find convincing and you have to be honest enough to amend your views according to new evidence. + +Keep the definitions of evidence that we discussed earlier in mind going forward. After the quack has rendered their evidence, examine it carefully. In the vast majority of cases it will be unclear how this evidence should be more expected on their hypothesis as opposed to some other hypothesis, even another hypothesis that you literally dream up on the spot as a counter explanation (which we will be covered in later steps). Consider the following proposition: + +>_Carnivorous diets made humans more intelligent._ + +A bold proposition like this certainly requires substantial evidence, which is perfectly reasonable to request of the quack. Let’s say you ask for the evidence, and the quack renders something along the lines of this in response: + +>_Because plant agriculture decreased human brain size by 11%._ + +Bearing all of the above in mind, critically evaluate their evidence and think hard about the assumptions it makes. If you don’t find anything objectionable, it is perfectly OK to admit that sufficient evidence for the proposition has been rendered, and that you concede the proposition on that basis. + +If the quack managed to render a goalpost to you in **step 2.4**, then proceed to **step 3.5**. If they did not render a goalpost to you, and their evidence is not convincing to you, then proceed to **step 5**. + +**Step 3.5: Compare their evidence to their goalpost** + +Check to see if their empirical evidence is actually consistent with the goalpost they described. If their empirical evidence is either consistent or stronger than the sort of evidence described in their goalpost, then simply proceed to **step 5**. However, if their empirical evidence is _weaker_ than the sort of evidence they described in their goalpost, then the quack has just straightforwardly contradicted themselves and you can proceed straight to **step 6**. + +**Step 5: Propose an alternative hypothesis** + +As with **step 3.4**, it pays to have some critical appraisal skills, but it is again not actually necessary. The only thing that you really require to proceed with this step is the creativity to dream up alternative hypotheses. But not just any alternative hypothesis. Your alternative hypothesis has to make the same prediction as their hypothesis, but also be mutually incompatible with their hypothesis. + +In reference to the evidence presented in **step 3.4**, while this evidence may sound hilarious to us, it may actually be convincing to some people, so contesting it is probably still a good idea. Don’t dismiss it outright. At this point, it may be true that the quack has already put their foot in their mouth. But continue to be a fair interlocutor, and give the quack an opportunity to either swallow it or pull it out. Hit them back with an alternative hypothesis that makes the same prediction: + +>_Perhaps agriculture actually increased the efficiency of the human brain, and there was actually no change in intelligence._ + +Remember that it’s not at all clear why plant agriculture decreasing human brain size by 11% would necessarily, or even probably, be evidence for carnivorous diets making humans more intelligent. Perhaps plant agriculture increased the efficiency of our brains, such that our brains could achieve the same level of intelligence using less tissue. So, why would plant agriculture decreasing human brain size by 11% be more expected on the quack’s hypothesis as opposed to your alternative hypothesis? + +Now the quack is in a tough position, because he has to actually explain why the evidence in question is more expected on their hypothesis than the one you just cooked up on the spot. In the vast majority of cases, the quack will not be able to produce any compelling reason for why one hypothesis has more explanatory power over the other. + +Notice as well that we’re not asking them to substantiate their evidence, and we’re not scrambling to find studies of our own to refute their evidence. We’re just asking the quack why their hypothesis is more virtuous than ours. This is not a strategy that virtually any quacks are going to be prepared to deal with (because if they were, they probably wouldn’t propose stuff as stupid as they typically do). + +In the vast majority of cases, merely asking the quack why the evidence in question is more expected on their hypothesis, rather than your own hypothesis, will lead them to fold like a chair, right on the spot. + +If your interlocutor actually can demonstrate that the evidence they brought to the table is indeed more expected on their hypothesis than some alternative hypothesis, you have a few options. You retry **step 5**, and attempt to create another alternative hypothesis that will challenge the strength of their evidence even harder. Alternatively, you can concede the proposition for the time being and come back to it later, even if you don’t find it convincing. Just be honest. Conceding the debate doesn’t mean that your interlocutor was correct. + +Remember, you can always be agnostic (even about your own alternative hypotheses), and try to remember that you don’t need to affirm the negation of their proposition. The onus is not on you to prove anything in this exchange. Not a goddamn thing. Remember that. + +Assuming they’re unable to answer your question, it must be reiterated that it is very important to never allow the quack to flip the burden of proof on you. It’s their proposition, and the burden of proof is theirs and only theirs. A tip for identifying when the quack is trying to flip the burden of proof is when they attempt to ask questions that are not clarifying questions. Any question other than a clarifying question is always a dodge when you hold the line of questioning, and your line of questioning is only over when you’ve obtained all of the answers you require. + +If the quack rejects your alternative hypothesis, proceed to **step 5.1**. If the quack accepts your alternative hypothesis and admits that he has no justification for why their evidence is more expected on their hypothesis than your hypothesis, then proceed to **step 6**. + +**Step 5.1: Ask what’s wrong with your alternative hypothesis** + +Rejecting your alternative hypothesis could mean a couple different things. Either they’re calling the alternative hypothesis itself into question, or they are going to explain why their evidence is more expected on their hypothesis than your hypothesis. If they’re rejecting your alternative hypothesis, just ask them for the explanation. If their explanation is convincing to you, there are a couple of different options. You can either concede or return to **step 5** and press them with an even stronger hypothesis. It just depends on how comfortable you are giving it another shot. + +Alternatively (and altogether more likely), if they can’t give you a clear explanation as to why their evidence is more expected on your hypothesis, then proceed to **step 6**. + +# PHASE THREE: STEAMROLLING + +**Step 6: Demand that they concede their proposition** + +Once you find yourself in a position where you have not conceded the proposition and the quack is unable to render an argument in favour of the proposition, you’ve obtained all you need from the quack to begin steamrolling. Just refuse to proceed until you obtain either an argument for the proposition or a concession on the proposition itself. Anything other than these outcomes is not satisfactory. Don’t accept any “agree to disagree” cop-outs. Hold their feet to the fire and press the issue. + +The quack may try to spiral down on some tangent that isn’t germane to any of the previous questions you have asked them. In this event, redirect them immediately after their ramble. If their ramble is excessively long, feel free to cut them off. Tangents waste time, and it’s inappropriate to let tangents go to completion. Most quacks are bad faith actors, so concessions are too optically intolerable for them and rendering an argument for their claim is usually beyond their capabilities. Most will simply just disengage once you’ve gotten this far. + +Lastly, we have to talk about an exceptionally rare outcome you will almost never encounter on your quack smashing journey— the quack concedes the proposition. Congratulate and praise the quack for their honesty. In fact, they may not even be a quack anymore. You may have rescued them from utter insanity, and that’s certainly worth a pat on the back for both of you. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "" + , title = "Theoretical Virtues in Science" + , journal = "Obo" + , year = "N/A" + , link = "https://www.oxfordbibliographies.com/display/document/obo-9780195396577/obo-9780195396577-0409.xml" + } + , { author = "Theodore Schick, Lewis Vaughn" + , title = "How to Think About Weird Things: Critical Thinking for a New Age: Seventh Edition" + , journal = "N/A" + , year = "2013" + , link = "https://books.google.ca/books/about/How_to_Think_About_Weird_Things_Critical.html?id=YR4iAAAAQBAJ&redir_esc=y" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SapienDiet.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SapienDiet.elm new file mode 100755 index 0000000..67a138d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SapienDiet.elm @@ -0,0 +1,598 @@ +module Config.Pages.Blogs.MainBlog.SapienDiet exposing (articleSapienDiet) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleSapienDiet : BlogArticle +articleSapienDiet = + { articleName = "The Sapien Diet: Peak Human or Food Lies?" + , articleLink = Path.toString Path.Blog_Sapiendiet + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "sapiendiet" + , articlePublished = "Aug 24, 2022" + , articleBody = """ +[Brian Sanders](https://www.sapien.org/brian) is an entrepreneur and filmmaker who advocates for an "ancestral" diet he has coined the Sapien Diet™. This diet is characterized by high intakes of animal products and considerably strict abstinence from processed food consumption. His diet is supposedly based on the teaching of [Weston Price](https://en.wikipedia.org/wiki/Weston_A._Price), a dentist and nutritional anthropologist of the early 1900s who also advocated for the consumption of animal products. Right off the bat, we can tell that Brian's diet is marinated in quackery, as Price's methods and inferences were [questionable at best](https://quackwatch.org/related/holisticdent/). + +Whatever the case, Brian publicly advocated for his diet back in 2020 during a talk at [Low Carb Down Under](https://lowcarbdownunder.com.au) entitled ["Despite what you've been told COWS CAN SAVE THE WORLD"](https://www.youtube.com/watch?v=VYTjwPcNEcw). In this talk, he describes the benefits and virtues of animal food production and consumption, and also touches on the supposed pitfalls and fallacies of veganism and plant-based diets. He structures his talk into three sections, which serve as direct rebuttals to three propositions that he characterizes as mainstream: + +- Red meat is harmful to human health. + +- Cows are harmful to the environment. + +- It's unethical to kill animals for food. + + +Brian's talk is riddled with half-truths, misunderstandings, bald-faced lies, and other idiocy. To go through everything individually would take far too long, so in this article I will only be addressing the primary points that Brian makes throughout his presentation. Some of the quotes that I will be referencing will be paraphrased to account for Brian's unclear manner of speaking, but I nonetheless believe that I have represented his beliefs fairly. So, let's dive in! + +# HEALTH CLAIMS + +**Claim #1 (**[**4:52**](https://youtu.be/VYTjwPcNEcw?t=292)**):** + +>_Hong Kong eats the most amount of meat and animal foods in the world and has the longest life expectancy._ + +**Post-hoc Fallacy** + +This is just a post-hoc fallacy and a misunderstanding of the evidence being presented. Firstly, Brian's argument doesn't even get off the ground unless there is an assessment of what is causing the differences in longevity, and how the mortality stats are calculated. In this case, Brian is suggesting temporal connections that can't be verified to exist based on the data provided. More to the point, differential ecological associations between populations can't really tell us anything about differences in outcomes between individuals consuming the least meat versus individuals consuming the most meat. + +For example, there is a positive ecological association between smoking and life expectancy [[1](http://www.thefunctionalart.com/2018/07/visualizing-amalgamation-paradoxes-and.html)]. But, we wouldn't infer from this association that cigarette consumption increases longevity. Those sorts of inferences are what prospective cohort studies and randomized controlled trials are for, as they are actually equipped to assess individual-level exposure and outcomes. + +![][image1] +[image1]: /blog/sapiendiet/image1.png + +**Base Rate Fallacy** + +According to Brian's source, Hong Kong's meat intake has been steadily increasing and didn't reach UK-levels of intake in 1972 and US-levels of intake in 1967 [[2](https://www.nationalgeographic.com/what-the-world-eats/)]. If the hypothesis is that meat causes higher mortality via chronic disease, then people who started eating that much meat during those time periods would barely even be old enough to contribute substantially higher mortality statistics at the time of this report anyway. So, while it's true that Hong Kong now eats a lot of meat and enjoys longer lifespans, Brian is not appreciating the base rate of historical meat consumption for this population. + +As an aside, it is also interesting to note that those in Hong Kong who followed a non-ancestral "Portfolio diet" (which is characterized by low saturated fats, sodium, and dietary cholesterol, as well as higher plant proteins, vegetable oils, high fruits, vegetables, and whole grains) were at a lower risk of dying from all causes, as well as dying of CVD or cancer [[3](https://pubmed.ncbi.nlm.nih.gov/34959911/)]. In fact, multiple sensitivity analyses were done to remove the possibility for reverse causality, and the reductions in risk are still apparent. + +**Claim #2 (**[**5:13**](https://youtu.be/VYTjwPcNEcw?t=313)**):** + +>_There is an inverse association between red meat and total mortality in Asian populations._ + +**Red Herring** + +The aggregated difference in the lowest to highest red meat intake in this pooled analysis was ~60g/day, which is approximately two bites [[4](https://pubmed.ncbi.nlm.nih.gov/23902788/)]. It's unclear how this is capable of informing our judgements about the health value of red meat in the context of something like a Sapien Diet™. Not only that, but the contrast is occurring primarily at lower levels of intake. + +![][image2] +[image2]: /blog/sapiendiet/image2.png + +Generally speaking, contrasts in red meat intake exceeding 80-100g/day are typically required on a per-cohort basis to reveal the increased risk of cardiovascular disease mortality or even all-cause mortality. Contrasts that fall below this threshold often do not provide for the statistical power that is necessary to obtain a statistically significant estimate. + +Brian's own reference also confirms that meat intake in Asian populations is generally quite a bit lower than the United States. + +![][image3] +[image3]: /blog/sapiendiet/image3.png + +>_Per capita beef consumption has decreased to some degree in the past decade in the United States but still remains substantially higher than that in Asian countries. Beef consumption increased in China, Japan, and Korea from 1970 to 2007._ + +In actuality, when we select Asian populations with the widest contrasts in red meat intake, with sound multivariable adjustment models, appropriate population ages, and adequate follow-up time, we see the increase in total mortality with red meat very clearly [[5](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. Even when diet and lifestyle covariates are balanced between ranges of intake. These results are also consistent with results we see in American cohorts that also balance diet and lifestyle covariates reasonably well, such as the Nurse's Health Study [[6](https://pubmed.ncbi.nlm.nih.gov/22412075/)]. + +**Potential Contradiction** + +Additionally, Brian has [stated publicly](https://twitter.com/FoodLiesOrg/status/1419347985935257601?s=20&t=_2uz8-vTlkgxnFPP4DCqtg) that steak is a good source of iron and can protect against iron deficiency. This claim is in accord with the available evidence on red meat consumption and iron deficiency anemia, with unprocessed red meat associating with a 20% decreased risk of anemia in the UK Biobank cohort [[7](https://pubmed.ncbi.nlm.nih.gov/33648505/)]. Interestingly, unprocessed red meat was also associated with a statistically significant increase in the risk of many other diseases as well. + +![][image4] +[image4]: /blog/sapiendiet/image4.png + +If the methods were sensitive enough to detect the inverse association with iron deficiency anemia, why not also conclude that the methods were also sensitive enough to detect the effect on heart disease as well? Why form differential beliefs about the causal nature of these associations? + +Furthermore, the association between red meat intake and heart disease is observable when meta-analyzed as well [[8](https://pubmed.ncbi.nlm.nih.gov/34284672/)]. For every 50g/day increase in red meat intake, there was a statistically significant dose-dependent relationship between red meat intake and heart disease. + +Almost all of the most highly powered studies found positive associations between heart disease risk and red meat. Altogether, those studies also had the highest contrast in red meat, with Asian countries having the lowest contrast, as mentioned earlier. The majority of the included studies included adjustments for diet quality, used validated food frequency questionnaires, and had adequate follow-up time. The greatest increase in risk was found among studies with follow-up times exceeding 10 years. Removing all of the more poorly powered cohorts leaves us with a remarkably consistent relationship overall. + +![][image5] +[image5]: /blog/sapiendiet/image5.png + +This one change results in a 38.3% attenuation in the I², going from 41.3% to 13%. Which suggests that of the variance that was attributable to heterogeneity, poor statistical power could explain about 68% of it. + +Lastly, when cohort studies from around the world are meta-analyzed, we see the same thing for all cause mortality [[9](https://pubmed.ncbi.nlm.nih.gov/24148709/)]. Overall, there is a non-significant increase in all-cause mortality risk when comparing the lowest red meat intakes to the highest red meat intakes. Whiteman, et al. (1999) was the only study that found a statistically significant decrease in risk, and is the sole reason for the non-significant finding. + +However, Whiteman, et al. also had one of the shortest follow-up times, one of the youngest populations (and thus one of the lowest death rates), and used a very poor adjustment model (only adjusting for three confounders). If a leave-one-out analysis is performed that excludes Whiteman, et al., a different picture is painted. + +![][image6] +[image6]: /blog/sapiendiet/image6.png + +Anybody who wishes to complain about this reanalysis is free to try to explain to me why increasing the potential for bias with poor multivariable adjustment is a desirable thing. But, it probably doesn't matter anyway. This meta-analysis was published in 2014, and more cohort studies have been published since then. If we add those results to the original forest plot conducted by Larsson et al., we would still get significant results. + +![][image7] +[image7]: /blog/sapiendiet/image7.png + +**Claim #3 (**[**5:22**](https://youtu.be/VYTjwPcNEcw?t=322)**):** + +>_We cannot use correlational studies to try to say that meat is bad._ + +**Category Error** + +It's unclear what this means. As per the Duhem-Quine thesis, all scientific findings are correlational in one way or another [[10](https://en.wikipedia.org/wiki/Duhem%E2%80%93Quine_thesis)]. As such, the state of being "correlational" is not a differential property between any two modes of scientific investigation. For example, intervention studies are a form of observational study, because you're observing what happens when you intervene. So this objection just seems like confusion, because if there ever was a study that showed meat to be "bad", it would be straightforwardly correlational in nature. Assuming that what Brian means by "correlational studies" is actually just nutritional epidemiology, even that would still be wrong. + +In 2021, Shwingshakl et al. published an enormous meta-analysis that compared the results of 950 nutritional randomized controlled trials to results from 750 prospective cohort studies [[11](https://pubmed.ncbi.nlm.nih.gov/34526355/)]. In the aggregate, results from nutritional epidemiology are consistent with results from nutritional randomized controlled trials approximately 92% of the time when comparing intakes to intakes (omitting supplements). + +![][image8] +[image8]: /blog/sapiendiet/image8.png + +Across 23 comparisons of meta-analytically summated findings from both bodies of evidence, only 2 comparisons showed discordance. This means that nutritional epidemiology tends to replicate in randomized controlled trials in the supermajority of cases. + +If not randomized controlled trials, I have no idea where Brian plants his goalpost for high evidential quality. Nevertheless, current evidence suggests that nutritional epidemiology is highly validated methodology if randomized controlled trials are used as the standard. If one places high credence in randomized controlled trials, it's unclear why they wouldn't also place high credence in nutritional epidemiology. + +**Claim #4 (**[**5:36**](https://youtu.be/VYTjwPcNEcw?t=336)**):** + +>_73% of hunter gatherers get over 50% of their diet from animal foods._ + +**Non Sequitur** + +I'm not sure why we should care. If this isn't cashing out into some sort of health claim, then it seems very much like a non sequitur. Assuming this is implying something about the health value of hunter-gatherer diets, it is also misleading. I've discussed [here](https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers) why positions like this ultimately fail. + +**Claim #5 (**[**5:51**](https://youtu.be/VYTjwPcNEcw?t=351)**):** + +>_We have beef as this highly bioavailable, easily digestible protein, and beans is one example of something that is touted as a pretty high protein food. But this is not the case._ + +**False Claim** + +This is just whacky, and it seems to be based on data from a 1950s textbook to which I cannot get access. However, we don't really need to in order to address this claim. Let's take a look at this table that Brian has generated. + +![][image9] +[image9]: /blog/sapiendiet/image9.png + +First of all, if these two foods are weight-standardized, then the protein content of navy beans only makes sense if the navy beans were considered raw. Navy beans can't even be consumed raw because they're hard as fucking rocks. So, immediately this table is potentially misleading, having possibly presented an unrealistic comparison between these two foods. But, that's not the most egregious part of Brian's table. It's actually completely unnecessary to consider digestibility and biological value separately as Brian has [[12](https://pubmed.ncbi.nlm.nih.gov/26369006/)]. + +> _"The PDCAAS value should predict the overall efficiency of protein utilization based on its two components, digestibility and biological value (BV; nitrogen retained divided by digestible nitrogen). The principle behind this approach is that the utilization of any protein will be first limited by digestibility, which determines the overall amount of dietary amino acid nitrogen absorbed, and BV describes the ability of the absorbed amino acids to meet the metabolic demand."_ + +Biological value is inherently captured by both of the standard protein quality scores, the protein digestibility-corrected amino acid score (PDCAAS) and the digestible indispensable amino acid score (DIAAS). This means that if you want to represent all the things that matter for a given protein in isolation (such as digestibility, biological value, and limiting amino acids), all you need is either a PDCAAS or DIAAS value for the proteins in question. But, the DIAAS is probably better. + +![][image10] +[image10]: /blog/sapiendiet/image10.png + +Aggregating DIAAS data across multiple protein foods paints a completely different picture than the one that Brian cobbled together [[13](https://pubmed.ncbi.nlm.nih.gov/28748078/)][[14](https://pubmed.ncbi.nlm.nih.gov/33333894/)][[15](https://pubmed.ncbi.nlm.nih.gov/34476569/)][[16](https://onlinelibrary.wiley.com/doi/full/10.1002/fsn3.1809)]. Some plant proteins actually do quite well. But what are these numbers really representing? Ultimately the scores are going to be truncated by limiting amino acids more than any other parameter, and pairing complementary proteins will increase the DIAAS value [[17](https://pubmed.ncbi.nlm.nih.gov/34685808/)]. In fact, this is also true of the PDCAAS, as combining different lower-scoring plant proteins will often result in perfect scores [[18](https://www.2000kcal.cz/lang/en/static/protein_quality_and_combining_pdcaas.php)]. + +![][image11] +[image11]: /blog/sapiendiet/image11.png + +If beef is awesome in virtue of it getting a perfect score for protein digestibility, biological value, and limiting amino acids, then navy beans and wild rice must also be awesome too. If not, then I don't know what the hell Brian is talking about, or why he even brings the point up. It's also worth pointing out that certain animal foods, like collagen, actually score a zero on the PDCAAS as well. + +As an aside, even if plant protein was generally inferior to animal protein by some evaluative standard (such as the PDCAAS or DIAAS), it would not necessarily mean that it would be more desirable to consume animal protein over plant protein. That would depend on one's goals. In fact, animal protein is associated with a number of chronic diseases in a dose-dependent manner, whereas plant protein is inversely associated, also in a dose-dependent manner [[19](https://pubmed.ncbi.nlm.nih.gov/32699048/)]. This also holds true for Japanese populations, by the way [[20](https://pubmed.ncbi.nlm.nih.gov/31682257/)]. + +**Claim #6 (**[**6:35**](https://youtu.be/VYTjwPcNEcw?t=395)**):** + +>_744 studies were excluded from consideration in the WHO's evaluation of meat as a carcinogen._ + +**Red Herring** + +Here, Brian is referring to an analysis on red meat and colorectal cancer risk that was conducted by the International Agency for Research on Cancer (IARC) [[21](https://pubmed.ncbi.nlm.nih.gov/26514947/)]. If you dig into the IARC's methods, you can see that they had very specific, sound inclusion-exclusion criteria, which involved selecting cohort studies with the widest contrasts in red meat intake, clear definitions, sufficient event rates and participant numbers, and adequate adjustment models. + +>_A meta-analysis including data from 10 cohort studies reported a statistically significant dose-response association between consumption of red meat and/or processed meat and cancer of the colorectum. The relative risks of cancer of the colorectum were 1.17 (95% CI, 1.05-1.31) for an increase in consumption of red meat of 100 g/day and 1.18 (95% CI, 1.10-1.28) for an increase in consumption of processed meat of 50 g/day. Based on the balance of evidence, and taking into account study design, size, quality, control of potential confounding, exposure assessment, and magnitude of risk, an increased risk of cancer of the colorectum was seen in relation to consumption of red meat and of processed meat." + +This is very sensible methodology for anyone familiar with epidemiology. Additionally, this is not the only reason Brian's claim is misleading, because there are not 744 cohort studies or RCTs combined on this question. Full stop. I can only imagine that he is referring to mechanistic studies or other weaker forms of evidence. He's never fully unpacked this claim, to my knowledge. + +**Claim #6 (**[**7:05**](https://youtu.be/VYTjwPcNEcw?t=425)**):** + +> _There were 15 studies showing that red meat was good and 14 studies showing that red meat was bad. I mean, it's basically a toss-up._ + +**Red Herring** + +Again, the IARC had very strict inclusion-exclusion criteria, and of the studies that met those criteria, the majority of them found statistically significant associations between red meat and colorectal cancer. This is after multivariable adjustment for known confounders and covariates, in populations that we'd expect to have an increased risk. It's straight up expected that not all of the available studies on a given research question will be included in a meta-analysis. + +**Red Herring** + +Brian then goes on to claim that the results are a toss-up simply because there were 15 studies ostensibly showing that red meat was "good" and 14 studies ostensibly showing that red meat was "bad". To imply that this is necessarily a "toss up" is just pure confusion. Even if you have double the studies showing that red meat is "good", that doesn't necessarily mean there is a lower probability that red meat is "bad". It depends on the strength of the studies included. Consider this forest plot. + +![][image12] +[image12]: /blog/sapiendiet/image12.png + +Here we see that despite the fact that there is a 2:1 ratio of studies that show a decreased risk with red meat to studies that show an increased risk with red meat, the summary effect measure still points toward a statistically significant increase in risk. This is because not every study has equal power or precision. Some findings are just less certain than others. + +**Claim #7 (**[**7:22**](https://youtu.be/VYTjwPcNEcw?t=442)**):** + +>_The risk factor of cancer from meat is 0.18%, whereas the risk factor of cancer from smoking is 10-30%._ + +**Unintelligible** + +This is truly bizarre. It's incredibly unclear what Brian is trying to say here, and he was unable to unpack it to me in [our verbal debate](https://www.youtube.com/watch?v=S8p39Gwct1Y), so I'm not even sure he knowns what the fuck he means. His use of the term "risk factor" here makes the utterance appear like a category error. However, if I really stretch my imagination, I may be able to cobble together an interpretation that isn't gibberish. + +**Equivocation** + +Firstly, this appears to be just a straight up equivocation of cancer types. Colorectal cancer and lung cancer are two different diseases, and the prevalence of these diseases are different in the general population. If Brian's criticism is that the relative risk of lung cancer from smoking is higher than the relative risk of colorectal cancer from red meat, then he's just confused. Massive differences in the magnitude of those effect estimates are expected, as the prevalence of a given disease will determine the maximum possible relative risk [[22](https://pubmed.ncbi.nlm.nih.gov/21402371/)]. + +![][image13] +[image13]: /blog/sapiendiet/image13.png + +Let's take a look at the prevalence of these diseases in Canada [[23](https://cancer.ca/en/cancer-information/cancer-types)]. The prevalence of lung cancer among Canadian non-smokers is 1 in 84 (1.19% prevalence). Prevalence of colorectal cancer, assuming red meat has nothing to do with colorectal cancer, is 1 in 16 (6.25% prevalence). The baseline prevalence of lung cancer is much smaller than the baseline prevalence of colorectal cancer, so comparing the two is dubious. + +In the case of lung cancer and colorectal cancer, the maximum possible relative risks would be ~53 and ~16, respectively. So it's not even mathematically possible for the relative risk of colorectal cancer from red meat to even approach the upper bounds for the relative risk of lung cancer from smoking that Brian submitted (assuming he meant 30x and not 30%). + +For this reason, it's best that we do an apples to apples comparison. In a massive 2009 analysis by Huxley, et al., which helped inform the IARC's analysis on meat and cancer, 26 cohort studies were included in their meta-analytic summation [[24](https://pubmed.ncbi.nlm.nih.gov/19350627/)]. Overall they showed a statistically significant 21% increase in risk of colorectal cancer with unprocessed red meat. + +However, they also included an analysis on smoking, which found a statistically significant 16% increase in the risk of colorectal cancer with smoking as well. Yes, that is right— there was a slightly stronger association between red meat and colorectal cancer than there was between smoking and colorectal cancer. But the two were likely non-inferior. Huxley et al. also found around the same magnitude of effect for many other exposures. + +![][image14] +[image14]: /blog/sapiendiet/image14.png + +What's the symmetry breaker? Why form a causal belief with regards to smoking or physical inactivity or obesity and not red meat? If Brian argues that he doesn't infer causality for any of the exposures with non-inferior effect sizes to red meat, then the appropriate thing to do is honestly just to laugh at his absurdity and move on. + +If Brian argues that red meat has never been studied in the context of a junk-free diet, then we could just argue it in the opposite direction. For example, the smoking literature is also notoriously unadjusted for dietary covariates (which is something not many people appreciate about that body of evidence). As such, smoking arguably has never been studied in the context of a meat-free diet either, so perhaps the data on smoking is simply biased by red meat. Again, we need symmetry breakers. + +**Claim #8 (**[**7:37**](https://youtu.be/VYTjwPcNEcw?t=457)**):** + +> _Ancestral foods are better than processed foods._ + +**Appeal to Nature** + +Why should we be using anthropological data about ancestral diets to inform best practice in terms of modern diets for modern humans? And why is the property of being ancestral a reasonable sufficiency criteria for a food to be "better" than processed foods? This seems like a non sequitur. + +Favouring whole foods is heuristic, and not a rule. There are plenty of examples of processed foods being superior to whole foods, even foods that we could identify as ancestral. In fact, there are been specific analyses investigating the differential contributions of animal-based foods (red meat, poultry, fish, dairy, and eggs) and ultra-processed foods to disease risk within the context of a health-conscious population [[25](https://pubmed.ncbi.nlm.nih.gov/35199827/)]. + +![][image15] +[image15]: /blog/sapiendiet/image15.png + +Overall, ultra-processed foods and animal foods are non-inferior to one another for CVD mortality and cancer mortality risk. Animal based foods also seem to associate with the risk of endocrine disorders like T2DM, whereas ultra-processed foods did not. Once again, we require symmetry-breakers. Why form the belief that ultra-processed foods increase the risk of these diseases and not animal foods? + +# ENVIRONMENTAL CLAIMS + +**Claim #9 (**[**10:13**](https://youtu.be/VYTjwPcNEcw?t=613)**):** + +>_Grazing agricultural systems are better for the environment and sequester more carbon._ + +**False Claim** + +This claim is as hilarious as it is vague. Firstly, better compared to what? According to Brian's reference (which was an analyses of the association between White Oak Pastures' regenerative grazing methodology and carbon balance) it was assumed that carbon sequestration estimates were exclusively from beef, yet poultry accounted for almost half of the carcass weight (46.5%) of the entire system [[26](https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984/full)]. They also can’t even attribute the sequestration to cows because the study was cross-sectional in design. + +This study isn't actually investigating temporal changes in soil carbon at all. To make matters worse, the author's darling figure, −4.4kg CO₂-e kg carcass weight−1 per year, was actually just produced from thin air, and the cross-sectional association between years of grazing and soil carbon stocks between pasturelands was just assumed to be reflecting grazing-mediated soil carbon sequestration. Utterly misleading sophistry. + +> _Importantly, if we were to attribute the soil C sequestration across the chronosequence to only cattle, MSPR beef produced in this system would be a net sink of −4.4 kg CO2-e kg CW−1 annually._ + +Even just ignoring the fact that this methodology creates mathematically atrocious pigs and chickens in terms of carbon balance in their model, the data provided suggests that 20 years worth of carbon sequestration are roughly equal to three years of plant composting. In second figure of the publication, they show a cross-sectional analysis of seven different degraded lands (previously used for crops) that are in the process of being restored over a varied number of years. + +![][image16] +[image16]: /blog/sapiendiet/image16.png + +>_In years 1–3, these fields are minimally grazed and receive 1 cm of compost ha−1 yr−1. After year 3, exogenous inputs (hay and compost) were ceased, and the regeneration strategy shifted toward an animal-only approach, whereby animals were the primary mechanism of improving the land._ + +The third dot is roughly equal to that of the seventh dot on the chart, which represents three years of plant composting and 20 years of grazing, respectively. If we're assuming a causal relationship between grazing and soil carbon stock, why not also assume a causal relationship between composting and soil carbon stock? + +If composting can increase soil carbon sequestration that much, why are they even trying to argue for grazing agriculture as a solution? It would appear that plant agriculture waste could be a viable solution for restoring these degraded lands as well. This is also just granting that these associations are reflective of soil carbon sequestration over time at all, which they may not be. Again, this analysis is cross-sectional. + +It's convenient that the time scale of the investigation by Rowntree, et al. caps out at 20 years, because current literature suggests that there is a soil carbon saturation point at around 20 years, after which pasture grazing systems will yield diminishing returns. + +![][image17] +[image17]: /blog/sapiendiet/image17.png + +Here we see three different scenarios for soil carbon sequestration rates from grazing agriculture. Even under the most generous estimates (the larger black hashed line), soil carbon sequestration plateaus at around 20 years. + +However, current estimates suggest that if we switch to more plant-predominant diets by the year 2050, we could reforest a large proportion of current pastureland, which acts as a substantial carbon sink (~547GtCO2) [[27](https://www.nature.com/articles/s41893-020-00603-4)]. The effect of that over 30 years is to neutralize about 15 years of fossil fuel emissions and 12 years of total world GHG emissions. + +If we switch to plant-predominant diets by 2050 we could sequester -14.7 GtCO2 per year by reforesting pasture land, compared to other agricultural methods that make use of grazing land for pasture. Merely the introduction of pasture grazing increases land use by almost double compared to a vegan agricultural system [[28](https://experts.syr.edu/en/publications/carrying-capacity-of-us-agricultural-land-ten-diet-scenarios)]. + +![][image18] +[image18]: /blog/sapiendiet/image18.png + +In fact, there are stepwise decreases in the per-person carrying capacity of different agricultural scenarios as more pastureland is included in the model. However, vegan agricultural scenarios were largely comparable to both dairy-inclusive and egg-inclusive vegetarian models. + +![][image19] +[image19]: /blog/sapiendiet/image19.png + + +As mentioned earlier in this article, there are plant agriculture methods that are also touted as "regenerative", that also may have greater soil carbon sequestration potential per hectare than current "regenerative" grazing livestock methods [[29](https://www.nature.com/articles/ncomms6012)]. It would be interesting to see a head-to-head comparison of wheat versus meat, using "regenerative" methodology, on soil carbon sequestration overall. + +**Claim #10 (**[**13:15**](https://youtu.be/VYTjwPcNEcw?t=795)**):** + +>_We have enough land for grazing agricultural systems._ + +**False Claim** + +It has been calculated that even if all grasslands were repurposed for grazing, this could provide everyone on earth with 7-18g/day of animal protein per person on Earth [[30](https://www.oxfordmartin.ox.ac.uk/publications/grazed-and-confused/)]. The authors also provided a hyper-idealized, candy-land scenario they also calculated that 80g/day of animal protein per person on Earth. However, this would require all pasturable land on Earth being used. As an aside, the authors also calculated an additional scenario that included waste from plant agriculture, but it probably won't be very relevant to Brian's idealized world, because plant agriculture would be extremely minimal on the Sapien Diet™. + +The remaining two scenarios encounter some issues when we think of what would be required to sustain people on meat-heavy diets, because 80g of protein from the fattiest beef still would not provide enough calories per person. We would appear to need multiple planets. But we should use a grass-fed example to do the calculations, so I've chosen White Oak Pastures' ground beef as the example meat. We'll also be multiplying the results by 2.5 to account for the extra land used by rotational grazing and/or holistic management [[26](https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984/full)]. + +![][image20] +[image20]: /blog/sapiendiet/image20.png + + +Under no plausible scenario (calculable from the 'Grazed and Confused?' report) would either continuous grazing or rotational grazing be tenable on a global scale. Even if the calorie allotment for animal foods in the EAT Lancet diet was occupied only by grass-fed beef, we'd still be exceeding the carrying capacity of the Earth by 70% for continuous grazing and 325% for rotational grazing. As for Brian's pet diet, the Sapien Diet™, we'd need over 10 Earths in the optimistic plausible scenario. + +Essentially, we would need to figure out a way to extend the pasturable land beyond the available land on Earth. Perhaps we could do this by terraforming Mars or ascending to a type 2 civilization on the Kardashev scale by building a megastructure in space, such as a Dyson sphere or an O'Neill cylinder. But, those options don't sound very ancestral at all. + +![][image21] +[image21]: /blog/sapiendiet/image21.png + +We're not even scratching the surface, though. The authors of 'Grazed and Confused?' likely did not consider the suitability of each grassland in their calculation, because current suitability thresholds are set for crop production, rather than livestock. The issue is that grass itself could be considered a crop, so it's unclear why suitability considerations that have been established for crop production wouldn't also apply to pasture-raised animal production. + +The IIASA/FAO define the suitability of a given grassland as a threshold of a 25% ratio of actual yield per acre and potential yield per acre [[31](https://pure.iiasa.ac.at/id/eprint/13290/)]. Had these suitability criteria been considered by the authors of 'Grazed and Confused?', their models likely would have produced much smaller estimates. This is because much of the available grassland is either unsuitable or poorly suitable to begin with. + +![][image22] +[image22]: /blog/sapiendiet/image22.png + +These suitability criteria have been used by livestock agriculture advocates to argue against the scalability of crop agriculture and for the scalability of grazing-based livestock agriculture [[32](https://www.sciencedirect.com/science/article/abs/pii/S2211912416300013)]. However, [Avi Bitterman](https://twitter.com/AviBittMD) demonstrated on his [Discord server](https://discord.gg/YtfQNPnk) that these individuals are not symmetrically applying this standard and it would actually turn out that current "regenerative" grazing systems wouldn't be likely to even meet the suitability standards themselves. + +According to figures produced by White Oak Pastures, their "regenerative" grazing system is far less efficient than conventional feedlot approaches [[33](https://blog.whiteoakpastures.com/hubfs/WOP-LCA-Quantis-2019.pdf)]. Overall, White Oak Pastures uses 150% more land than conventional approaches to yield only about 20% of what a conventional farm can produce, and only 90% of the average slaughter weight. + +![][image23] +[image23]: /blog/sapiendiet/image23.png + +This would give us a "suitability" estimate of around 7%, which would likely drastically reduce the amount of grassland that would be considered suitable for "regenerative" grazing agriculture as well. It would be doubly important to adhere to this standard when critiquing "regenerative" plant agricultural methods, in order to ensure an apples-to-apples comparison [[29](https://www.nature.com/articles/ncomms6012)]. + +**Claim #11 (**[**13:54**](https://youtu.be/VYTjwPcNEcw?t=834)**):** + +> _If we don't use all this cropland for corn, wheat, and soy...we can use some of this land for cows._ + +**False Claim** + +Here, Brian presents us a with figure from the USDA showing the available cropland in the United States as of 2007, and suggests that we simply have enough land for "regenerative" grazing. No analysis or even conceptual model of how this could be done was actually provided. He just expects us to take it for granted that the claim is true. But is it actually true? + +As with the issues for this narrative that were entailed from the land requirement estimates detailed in the 'Grazed and Confused?' report, this narrative again encounters similar issues here. Firstly, a complete grazing agriculture scenario has been modeled, and the results suggest that the United States wouldn't get anywhere close to plausibly being able to meet their current demand for beef with grazing agriculture [[34](https://iopscience.iop.org/article/10.1088/1748-9326/aad401)]. We'd simply need more land. About 30% more land. + +> _"Increases in cattle population, placements, and slaughter rates are demonstrated in figure 2. The increased slaughtering and placement numbers would also require a 24% increase in the size of the national beef cow-calf herd, proportional to the increased annual grass-finishing placement rate, in order to provide additional cattle to stock the grass-finishing stage. Increases in both the cow-calf herd and the grass-finishing population together would result in a total increase to the US cattle population of an additional 23 million cattle, or 30% more than the current US beef cattle population as a whole"_ + +![][image24] +[image24]: /blog/sapiendiet/image24.png + +If Brian wants to criticize vegans for indulging idealized pie-in-the-sky fantasies, what in the sweet holy blue fuck is this shit? The United States can't maintain their current demands for beef with the system that Brian is proposing. This is doubly problematic if you consider that the White Oak Pastures model for which Brian advocates probably requires even more land than the conventional grazing methods included in the above model. This means that 30% could very well be an underestimate. + +# ETHICAL CLAIMS + +**Claim #12 (**[**19:11**](https://youtu.be/VYTjwPcNEcw?t=1151)**):** + +> _Vegans kill animals too. It's death on a plate, there's just no blood._ + +**Appeal to Hypocrisy** + +It's not clear what point this is trying to make. It seems like a failed appeal to hypocrisy to me. But, let's try to tackle the proposition in the most charitable way possible. Let's assume that Brian means to say that the Sapien Diet™ leads to fewer animal deaths than vegan diets that rely on plant agriculture (which is a claim that he has made before). In this case, this is just an empirical claim and needs to be supported by some sort of evidence. + +In Brian's presentation, he supports this claim with a study of wood mouse predation after harvest, which showed that up to 80% of mice were preyed upon by predators upon the harvesting of cereal crops [[35](https://www.sciencedirect.com/science/article/abs/pii/000632079390060E?via%3Dihub)]. What Brian isn't taking into account is that this can actually be used to are for less mouse predation on cropland as opposed to pastureland. Let me explain. + +If you cut down your crop, you will expose the mice to predation. This is true. However, this also applies to pastureland. On pastureland, there is no substantial amount of tall forage that mice can use for shelter. The mice are exposed all year round. Which actually allows for the possibility that cropland could temporarily shelter mice from predators in a way that pastureland can't. + +Furthermore, during [my debate](https://www.youtube.com/watch?v=S8p39Gwct1Y) with Brian, his cited evidence was the single cow that was killed when he paid a visit to his friend's cattle farm. Needless to say, this is not very good evidence, and this is not the evidence we will be using to steelman Brian's position. Instead, let's actually look at literature that compares the wildlife carrying capacity of plant verses grazing agricultural scenarios. + +In 2020, Tucker et al. published a comprehensive comparative analysis of mammalian populations across a number of human-modified areas, such as cropland and pastureland [[36](https://onlinelibrary.wiley.com/doi/full/10.1111/ecog.05126)]. Overall, their findings suggest that there is higher taxonomic diversity with increasing pastureland as opposed to increasing cropland. + +![][image25] +[image25]: /blog/sapiendiet/image25.png + +In the absence of countervailing data, this actually counts against the hypothesis that pastureland entails less animal death than cropland. This is because increasing taxonomic diversity implies a higher number of trophic strata. A higher number of trophic strata implies higher levels of predation. Higher levels of predation thus imply higher levels of animal death. The land with the lesser carrying capacity should probably be assumed to entail less death. + +**Red Herring** + +Even if we granted Brian that pastureland entailed fewer animal deaths than cropland, it's not clear why vegans should necessarily care. If veganism is understood to be a social and politic movement that aims to extend human rights to animals when appropriate, it's not clear how the deaths entailed from cropland would be incompatible to those goals. In fact, we'd likely tolerate the killing of people who threatened our food supply in comparable ways as well. + +For example, if our food security was threatened by endless armies of humans with the intelligence of fieldmice or insects and we had no practical means of separating them from our food without killing them, I don't think we'd consider killing them to be a rights violation. In fact, we'd likely assume a similar defensive posture and similarly tolerate the loss of human life if a foreign country was also threatening to destroy our food. I doubt we'd even consider the enemy deaths entailed from such a defensive posture to constitute a rights violation. We have the right to defend our property against assailants, and I doubt Brian would even deny this himself. + +**Claim #13 (**[**19:19**](https://youtu.be/VYTjwPcNEcw?t=1159)**):** + +> _There is no life without death. This is how nature works...animals in nature either starve to death or are eaten alive...the animals are going to die either way, and it's not a good death...billions of people rely on animals for their livelihood._ + +**Potential Contradiction** + +This proposition is simple to address. If Brian believes that we are ethically justified in breeding sentient animals into existence for the explicit purpose of slaughtering them for food, but we would not be justified in condemning humans to likewise treatment, he must explain why. This same question can be asked of him regardless of the justification he uses for animal agriculture. + +During my debate with Brian, I submitted to him an argument for the non-exploitation of animals, which is essentially just a rephrasing of [Isaac Brown](https://twitter.com/askyourself92)'s [Name the Trait](https://drive.google.com/drive/folders/1tAjU2Bv1tsGbNLA2TfJesgbIh8JKh9zc) argument. + +![][argument1] +[argument1]: /blog/sapiendiet/argument1.png + +This argument for non-exploitation simply requires one to identify the property that is true of humans that also is untrue of animals, that if true of humans, would cause humans to lose sufficient moral value, such that we’d be justified in slaughtering them for food as well. Brian rejected P3, stating that "consciousness" was the property true of humans, but untrue of animals, such that animals were ethical to exploit for food but humans were not. This fails and entails a contradiction on Brian's part, because consciousness is not a differential property between humans and the animals he advocates farming for food. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Cairo, Alberto" + , title = "Visualizing Amalgamation Paradoxes and Ecological Fallacies" + , journal = "" + , year = "2018" + , link = "http://www.thefunctionalart.com/2018/07/visualizing-amalgamation-paradoxes-and.html" + } + , { author = "" + , title = "What the World Eats" + , journal = "National Geographic" + , year = "" + , link = "http://www.nationalgeographic.com/what-the-world-eats/" + } + , { author = "Lo, Kenneth, et al." + , title = "Prospective Association of the Portfolio Diet with All-Cause and Cause-Specific Mortality Risk in the Mr. OS and Ms. OS Study" + , journal = "Nutrients" + , year = "2021" + , link = "https://doi.org/10.3390/nu13124360" + } + , { author = "Lee, Jung Eun, et al." + , title = "Meat Intake and Cause-Specific Mortality: A Pooled Analysis of Asian Prospective Cohort Studies" + , journal = "The American Journal of Clinical Nutrition" + , year = "2013" + , link = "https://doi.org/10.3945/ajcn.113.062638" + } + , { author = "Saito, Eiko, et al." + , title = "Association between Meat Intake and Mortality Due to All-Cause and Major Causes of Death in a Japanese Population" + , journal = "PloS One" + , year = "2020" + , link = "https://doi.org/10.1371/journal.pone.0244007" + } + , { author = "Pan, An, et al." + , title = "Red Meat Consumption and Mortality: Results from 2 Prospective Cohort Studies" + , journal = "Archives of Internal Medicine" + , year = "2012" + , link = "https://doi.org/10.1001/archinternmed.2011.2287" + } + , { author = "Papier, Keren, et al." + , title = "Meat Consumption and Risk of 25 Common Conditions: Outcome-Wide Analyses in 475,000 Men and Women in the UK Biobank Study" + , journal = "BMC Medicine" + , year = "2021" + , link = "https://doi.org/10.1186/s12916-021-01922-9" + } + , { author = "Papier, Keren, et al." + , title = "Meat Consumption and Risk of Ischemic Heart Disease: A Systematic Review and Meta-Analysis" + , journal = "Critical Reviews in Food Science and Nutrition" + , year = "2021" + , link = "https://doi.org/10.1080/10408398.2021.1949575" + } + , { author = "Larsson, Susanna C., and Nicola Orsini" + , title = "Red Meat and Processed Meat Consumption and All-Cause Mortality: A Meta-Analysis" + , journal = "American Journal of Epidemiology" + , year = "2014" + , link = "https://doi.org/10.1093/aje/kwt261" + } + , { author = "" + , title = "Duhem–Quine Thesis" + , journal = "Wikipedia" + , year = "2022" + , link = "https://en.wikipedia.org/w/index.php?title=Duhem%E2%80%93Quine_thesis&oldid=1105377595" + } + , { author = "Schwingshackl, Lukas, et al." + , title = "Evaluating Agreement between Bodies of Evidence from Randomised Controlled Trials and Cohort Studies in Nutrition Research: Meta-Epidemiological Study" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2021" + , link = "https://doi.org/10.1136/bmj.n1864" + } + , { author = "" + , title = "Dietary Protein Quality Evaluation in Human Nutrition. Report of an FAQ Expert Consultation" + , journal = "FAO Food and Nutrition Paper" + , year = "2013" + , link = "https://www.fao.org/ag/humannutrition/35978-02317b979a686a57aa4593304ffc17f06.pdf" + } + , { author = "Nosworthy, Matthew G., et al." + , title = "Determination of the Protein Quality of Cooked Canadian Pulses" + , journal = "Food Science & Nutrition" + , year = "2017" + , link = "https://doi.org/10.1002/fsn3.473" + } + , { author = "Han, Fei, et al." + , title = "Digestible Indispensable Amino Acid Scores (DIAAS) of Six Cooked Chinese Pulses" + , journal = "Nutrients" + , year = "2020" + , link = "https://doi.org/10.3390/nu12123831" + } + , { author = "Fanelli, Natalia S., et al." + , title = "Digestible Indispensable Amino Acid Score (DIAAS) Is Greater in Animal-Based Burgers than in Plant-Based Burgers If Determined in Pigs" + , journal = "European Journal of Nutrition" + , year = "2022" + , link = "https://doi.org/10.1007/s00394-021-02658-1" + } + , { author = "Herreman, Laure, et al." + , title = "Comprehensive Overview of the Quality of Plant‐ And Animal‐sourced Proteins Based on the Digestible Indispensable Amino Acid Score" + , journal = "Food Science & Nutrition" + , year = "2020" + , link = "https://doi.org/10.1002/fsn3.1809" + } + , { author = "Han, Fei, et al." + , title = "The Complementarity of Amino Acids in Cooked Pulse/Cereal Blends and Effects on DIAAS" + , journal = "Plants (Basel, Switzerland)" + , year = "2021" + , link = "https://doi.org/10.3390/plants10101999" + } + , { author = "" + , title = "PDCAAS Calculator - 2000KCAL" + , journal = "" + , year = "" + , link = "https://www.2000kcal.cz/lang/en/static/protein_quality_and_combining_pdcaas.php" + } + , { author = "Naghshi, Sina, et al." + , title = "Dietary Intake of Total, Animal, and Plant Proteins and Risk of All Cause, Cardiovascular, and Cancer Mortality: Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2020" + , link = "https://doi.org/10.1136/bmj.m2412" + } + , { author = "Budhathoki, Sanjeev, et al." + , title = "Association of Animal and Plant Protein Intake With All-Cause and Cause-Specific Mortality in a Japanese Cohort" + , journal = "JAMA Internal Medicine" + , year = "2019" + , link = "https://doi.org/10.1001/jamainternmed.2019.2806" + } + , { author = "Bouvard, Véronique, et al." + , title = "Carcinogenicity of Consumption of Red and Processed Meat" + , journal = "The Lancet. Oncology" + , year = "2015" + , link = "https://doi.org/10.1016/S1470-2045(15)00444-1" + } + , { author = "Sainani, Kristin L." + , title = "Understanding Odds Ratios" + , journal = "PM & R: The Journal of Injury, Function, and Rehabilitation" + , year = "2011" + , link = "https://doi.org/10.1016/j.pmrj.2011.01.009" + } + , { author = "" + , title = "Cancer Types" + , journal = "Canadian Cancer Society" + , year = "" + , link = "https://cancer.ca/en/cancer-information/cancer-types" + } + , { author = "Huxley, Rachel R., et al." + , title = "The Impact of Dietary and Lifestyle Risk Factors on Risk of Colorectal Cancer: A Quantitative Overview of the Epidemiological Evidence" + , journal = "International Journal of Cancer" + , year = "2009" + , link = "https://doi.org/10.1002/ijc.24343" + } + , { author = "Orlich, Michael J., et al." + , title = "Ultra-Processed Food Intake and Animal-Based Food Intake and Mortality in the Adventist Health Study-2" + , journal = "The American Journal of Clinical Nutrition" + , year = "2022" + , link = "https://doi.org/10.1093/ajcn/nqac043" + } + , { author = "Rowntree, Jason E., et al." + , title = "Ecosystem Impacts and Productive Capacity of a Multi-Species Pastured Livestock System" + , journal = "Frontiers in Sustainable Food Systems" + , year = "2020" + , link = "https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984" + } + , { author = "Hayek, Matthew N., et al." + , title = "The Carbon Opportunity Cost of Animal-Sourced Food Production on Land" + , journal = "Nature Sustainability" + , year = "2021" + , link = "https://doi.org/10.1038/s41893-020-00603-4" + } + , { author = "Peters, Christian J., et al." + , title = "Carrying Capacity of U.S. Agricultural Land: Ten Diet Scenarios" + , journal = "Elementa" + , year = "2016" + , link = "https://doi.org/10.12952/journal.elementa.000116" + } + , { author = "Gan, Yantai, et al." + , title = "Improving Farming Practices Reduces the Carbon Footprint of Spring Wheat Production" + , journal = "Nature Communications" + , year = "2014" + , link = "https://doi.org/10.1038/ncomms6012" + } + , { author = "" + , title = "Grazed and Confused?" + , journal = "Oxford Martin School" + , year = "" + , link = "https://www.oxfordmartin.ox.ac.uk/publications/grazed-and-confused/" + } + , { author = "Fischer, G., et al." + , title = "Global Agro-Ecological Zones (GAEZ v3.0)- Model Documentation" + , journal = "" + , year = "2012" + , link = "http://www.fao.org/soils-portal/soil-survey/soil-maps-and-databases/harmonized-world-soil-database-v12/en/" + } + , { author = "Mottet, Anne, et al." + , title = "Livestock: On Our Plates or Eating at Our Table? A New Analysis of the Feed/Food Debate" + , journal = "Global Food Security" + , year = "2017" + , link = "https://doi.org/10.1016/j.gfs.2017.01.001" + } + , { author = "" + , title = "Carbon Footprint Evaluation of Regenerative Grazing At White Oak Pastures: Results Presentation" + , journal = "Quantis - Environmental Sustainability Consultancy" + , year = "" + , link = "https://blog.whiteoakpastures.com/hubfs/WOP-LCA-Quantis-2019.pdf" + } + , { author = "Hayek, Matthew N., and Rachael D. Garrett" + , title = "Nationwide Shift to Grass-Fed Beef Requires Larger Cattle Population" + , journal = "Environmental Research Letters" + , year = "2018" + , link = "https://doi.org/10.1088/1748-9326/aad401" + } + , { author = "Tew, T. E., and D. W. Macdonald" + , title = "The Effects of Harvest on Arable Wood Mice Apodemus Sylvaticus" + , journal = "Biological Conservation" + , year = "1993" + , link = "https://doi.org/10.1016/0006-3207(93)90060-E" + } + , { author = "Tucker, Marlee A., et al." + , title = "Mammal Population Densities at a Global Scale Are Higher in Human‐modified Areas" + , journal = "Ecography" + , year = "2021" + , link = "https://doi.org/10.1111/ecog.05126" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SeedOils.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SeedOils.elm new file mode 100755 index 0000000..297ac04 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SeedOils.elm @@ -0,0 +1,2279 @@ +module Config.Pages.Blogs.MainBlog.SeedOils exposing (articleSeedOils) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleSeedOils : BlogArticle +articleSeedOils = + { articleName = "A Comprehensive Rebuttal to Seed Oil Sophistry" + , articleLink = Path.toString Path.Blog_Seedoils + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "seedoils" + , articlePublished = "Oct 31, 2021" + , articleBody = """ +The popular consciousness has accepted many dietary villains over the course of the last half century, ranging from fat, to protein, to salt, to carbohydrates. More often than not, dietary constituents that have fallen under such scrutiny have been exonerated in time, as more and more scientific data is brought to light. I suspect that there is a growing number of people who are now wrongfully demonizing vegetable oils as well. Both skepticism and generally negative attitudes toward these oils appear to have skyrocketed in recent years, and it can be seen seemingly everywhere. + +From what I can tell, almost all of the claims regarding the negative health effects of vegetable oils are essentially rooted in either mechanistic or ecological research. Mechanistic research includes studies such as cell culture studies, animal studies, in-vitro studies, or even some short term human experiments. Ecological research is merely investigating largely unadjusted associations between population-level exposures and outcomes, such as the association between vegetable oil availability in the food supply and type 2 diabetes incidence, for example. + +Despite the fact that it is absolutely true that these types of research can be incredibly valuable, it is also almost always extremely inappropriate to extrapolate from from these types of research to population-level health effects. In other words, in the absence of corroborating human outcome data, it is almost always dubious to make claims about what outcomes _will_ happen, based on speculation about intuitive mechanisms. Especially if there is no high internal validity population-level outcome data that actually agrees with the mechanistic speculation to begin with. + + +Ultimately, mechanistic studies carry virtually no information about actual human disease risk itself. Keep this in mind as we parse through the lower- and higher-quality evidence as we go along. This will be important as we explore the various claims made about vegetable oils and their interactions with human health. Let’s start with something familiar and dive into cardiovascular disease. + +# **ABBREVIATIONS** + +2-AG, 2-arachidonoylglycerol; 8-oxodG, 8-oxo-7,8-dihydro-20-deoxyguanosine; ACR, acrylamide; AMD, age-related macular degeneration; AMI, acute myocardial infarction; ANA, anti-nuclear antibody; ApoB, apolipoprotein B; BCC, basal cell carcinoma; BCSO, blackcurrant seed oil; CAO, canola oil; CAT, catalase; CB1, cannabinoid receptor 1; CD, conjugated dienes; CRP, C-reactive protein; EE, energy expenditure; EPO, evening primrose; FADS, fatty acid desaturase; FO, fish oil; GLA, gamma-linolenic acid; GPx, glutathione peroxidase; GR, glutathione reductase; HDL-C, high density lipoprotein cholesterol; HUB, healthy-user bias; IVLE, intravenous lipid emulsion; LA, linoleic acid; LAVAT, La Veterans Administration Hospital Study; LBM, lean body mass; LDL, low density lipoprotein; MCE, Minnesota Coronary Experiment; MDA, malondialdehyde; MS, multiple sclerosis; NSAID, nonsteroidal anti-inflammatory drugs; O2H2, hydroperoxides; O6:O3, omega-6/omega-3 ratio; PUFA, polyunsaturated fat; RA, rheumatoid arthritis; RCT, randomized controlled trials; RMR, resting metabolic rate; SCC; squamous cell carcinoma; SDHS, Sydney Diet Heart Study; SLE, systemic lupus erythematosus; SO, soybean oil; SOD, superoxide dismutase; SU, sunflower oil; T2DM, type 2 diabetes mellitus; TC, total cholesterol; TEF, thermic effect of feeding; TFA, trans-fat; TNF, tumor necrosis factor; TPN, total parenteral nutrition; VAT, visceral adipose tissue. + +# **CARDIOVASCULAR DISEASE** + +###### **LIPOPROTEIN OXIDATION** + +The primary mechanism by which vegetable oils are suggested to increase the risk of cardiovascular disease (CVD) is through the oxidation of polyunsaturated fats (PUFA), particularly linoleic acid (LA), in low density lipoprotein (LDL) phospholipid membranes. In the literature, this hypothesis seems to be largely spearheaded by DiNicolantonio and O'Keefe (2018) [[1](https://pubmed.ncbi.nlm.nih.gov/30364556/)]. The authors' case against vegetable oils begins with the claim that vegetable oils contain fatty acids, particularly LA, which increase the susceptibility of LDL to oxidize, and that CVD risk is mediated through the oxidation of LDL. + +It is also suggested that saturated fatty acids (SFA) are resistant to this sort of oxidative destruction, which subsequently implies that the substitution of SFA for LA in the diet might lower CVD risk. This hypothesis would seem to have many entailments that run contrary to the common understanding of how these different fats influence CVD risk. So, let's see if these claims and implication actually hold up to scrutiny. + +As it turns out, we've thoroughly investigated the effects of altering the fatty acid composition of the diet on LDL oxidation rates in humans. For example, Mata et al. (1996) explored this question with one of the most rigorous studies of its kind. No statistically significant differences between the effects of high-SFA diets and high-PUFA diets on the lag time to LDL oxidation were observed [[2](https://pubmed.ncbi.nlm.nih.gov/8911273/)]. + +![][image1] +[image1]: /blog/seedoils/image1.png + +However, diets high in monounsaturated fat (MUFA) diets might actually increase the lag time to LDL oxidation more than either SFA-rich or PUFA-rich diets. It would appear as though this effect could be explained due to the fact that MUFA might be better than SFA at replacing LA in LDL particles. So, it seems as though the implication that SFA could offer unique protection against LDL oxidation is less straightforward than originally suggested. + +![][image2] +[image2]: /blog/seedoils/image2.png + +When comparing LDL that were enriched with PUFA to LDL that were enriched with MUFA, Kratz et al. (2002) observed a stepwise decrease in LDL lag time to oxidation with increasing PUFA, specifically linoleic acid (LA) [[3](https://pubmed.ncbi.nlm.nih.gov/11840183/)]. These results cohere with the results of Mata el al., suggesting that MUFA increases the lag time to LDL oxidation more than SFA or PUFA. + +![][image3] +[image3]: /blog/seedoils/image3.png + +In short, it would at least seem to be true that vegetable oil consumption, when investigated in isolation, increases the susceptibility of LDL to oxidize. But, don't get too excited. As we will discuss, these are paltry changes compared to what can be accomplished with antioxidants. + +Despite Kratz et al. claiming that vitamin E doesn't mask the effects of dietary fatty acids on LDL susceptibility to oxidation, their reference for this claim does not clearly support this conclusion. The work of Reaven et al. (1994) was their supporting reference for this claim and it actually paints a slightly different picture [[4](https://pubmed.ncbi.nlm.nih.gov/8148354/)]. The Lag time to LDL oxidation with vitamin E supplementation was more than double that which was observed in the previous study (or nearly any other random population sample from any other study that I've seen for that matter). + +![][image4] +[image4]: /blog/seedoils/image4.png + +Reaven et al. discovered that the lag time to LDL oxidation was enormously high in all groups after a run-in diet that included 1200mg/day of vitamin E for three months before randomization. Compared to the previous study by Kratz et al. (2002), the LDL lag time to oxidation was 150% higher (~60 minutes to ~150 minutes). This is consistent with other research showing that the vitamin E content of LDL particles linearly increases the lag-time to LDL oxidation [[5](https://pubmed.ncbi.nlm.nih.gov/1985404/)]. + +The effect of dosing vitamin E on increasing the lag time to LDL oxidation observed by Reaven et al. is approximately 7.5x stronger than the effects observed by either Kratz et al. or Mata et al., which involved altering the fatty acid composition of the diet. This strongly suggests that antioxidants are a much stronger lever to pull if one wants to decrease the susceptibility of LDL to oxidize. + +All three studies used the same copper sulfate solution methodology to measure the lag-time to oxidation, as they both reference the same source for the methods developed by Esterbauer et al. (1989) [[6](https://pubmed.ncbi.nlm.nih.gov/2722022/)]. As such, it wouldn't seem that the increase in LDL lag-time to oxidation seen with vitamin E supplementation would be due to a difference in measurement methods. So we have a decent proof of concept that antioxidants like vitamin E can probably modulate the lag-time to LDL oxidation to an enormous degree. + +Which brings me back to the trial by Kratz et al. (2002), which compared olive oil (OO) versus sunflower oil (SU). Despite the fact that all diet groups were receiving roughly the same amount of vitamin E, the OO group ended up with significantly higher vitamin E status compared to the SU group. This is consistent with the observations that MUFA increases the lag time to LDL oxidation to a greater degree than SFA or PUFA. Which leads to higher vitamin E representation in the end. + +![][image5] +[image5]: /blog/seedoils/image5.png + +It is well understood that higher PUFA intakes increase vitamin E requirements in humans [[7](https://pubmed.ncbi.nlm.nih.gov/26291567/)]. However, the OO group also started with much higher status to begin with, which likely contributed to the effect. Lastly, the run-in diet was high in SFA. Such a diet is almost assuredly to be lower in vitamin E, which could exaggerate the effects of high-PUFA diets. + +As discussed earlier, SFA is not vulnerable to lipid peroxidation in any way similar to that of PUFA. However, SFA being less vulnerable to lipid peroxidation typically means that sources of SFA contain very low amounts of antioxidants [[8](https://pubmed.ncbi.nlm.nih.gov/14100992/)]. For example, both coconut oil and butter contain negligible vitamin E and have minimal polyphenols. The potential importance of polyphenol antioxidants in protecting LDL from oxidation has been demonstrated in research investigating OO [[9](https://pubmed.ncbi.nlm.nih.gov/15168036/)]. + +![][image6] +[image6]: /blog/seedoils/image6.png + +Figure 2 from Marrugat et al. (2004) shows that virgin OO increases the lag time to oxidation to a greater degree than that of refined OO, with the primary differences between these different OOs being their polyphenol content. Many polyphenols act as antioxidants once they're inside our bodies, so these results are not particularly surprising. + +It is likely that the overall dietary pattern matters more than PUFA, or even LA, in altering the susceptibility of LDL to oxidation. This principle has been demonstrated multiple times [[10](https://pubmed.ncbi.nlm.nih.gov/28371298/)][[11](https://pubmed.ncbi.nlm.nih.gov/17563030/)][[12](https://pubmed.ncbi.nlm.nih.gov/17887946/)][[13](https://pubmed.ncbi.nlm.nih.gov/30282925/)]. + +For example, in a trial by Aronis et al. (2007), diabetic subjects were placed on either a fast food diet that was formulated to be "Mediterranean diet-like" or assigned to follow their usual diet. There was also a third arm of non-diabetics placed on the Mediterranean-style fast food diet. Lag time to LDL oxidation was measured according to the same methodology as described above, with a copper sulfate solution. + +![][image7] +[image7]: /blog/seedoils/image7.png + +It should be noted that the foods were specifically formulated to increase the lag time to LDL oxidation. However, what makes these results more impressive is that the fast food groups (groups A and B) were consuming twice as much PUFA than they were at baseline. Despite this we see some of the longest lag times to LDL oxidation observed in the literature in a population that has not been primed with megadoses of vitamin E for three months. + +Altogether this would seem to divulge that diet quality matters more than PUFA, or even LA, for LDL oxidation in the aggregate. We've seen multiple times that low-PUFA or low-LA diets can be outperformed by high-PUFA or high-LA diets of better overall quality. Little things add up, and the effect of diet is greater than that of MUFA alone, SFA alone, or even polyphenols alone. Perhaps not vitamin E alone, though. + +But let's be clear. Measuring the lag time to LDL oxidation in this way is highly contrived, and probably not reflective of normal physiological conditions. When you plop the LDL particles in a copper sulfate solution, eventually all of the LDL will oxidize. There's no escaping it. Naturally, the high-PUFA LDL will oxidize marginally sooner. But ultimately, this does not tell us anything about what would happen to these LDL particles under physiological conditions. For that, it might be more useful to look at markers like oxLDL. + +A marker like oxLDL can give us a better sense of just how many oxidized LDL are likely to form in the blood after a particular intervention or in a particular context. This is important because merely looking at the lag time to oxidation could give us an exaggerated sense of what is likely to happen in vivo. + +For example, it may be the case that when you expose LDL particles to copper sulfate, they oxidize in under an hour. But under physiological conditions, that same oxidation could potentially take days. If the LDL are cleared from the blood before oxidation can occur, then the results of the copper sulfate test are probably not very informative. + +One particularly long crossover-style RCT by Palomäki et al. (2010) compared the effects of butter to that of canola oil (CAO) on oxLDL [[14](https://pubmed.ncbi.nlm.nih.gov/21122147/)]. Overall the butter diet resulted in higher LDL and higher oxLDL. I wasn't able to find many PUFA-SFA substitution trials that measured oxLDL beyond this one study, unfortunately. + +![][image8] +[image8]: /blog/seedoils/image8.png + +Again, I speculate that this is likely the result of SFA being a poor source of antioxidants. Or perhaps it's because baseline diets could have been higher in PUFA, and reducing vegetable oil intakes might just be cutting off robust sources of antioxidants and increasing LDL oxidation. There are not many studies investigating this, so it's not clear at the moment. + +But, just for the sake of argument let's assume that high-PUFA diets do increase LDL oxidation relative to high-SFA diets. Would that actually be a bad thing? Perhaps not. One study by Oörni et al. (1997) has identified that oxidized LDL are less likely to be retained within the arterial intima when compared to native LDL [[15](https://pubmed.ncbi.nlm.nih.gov/9261142/)]. If the LDL are oxidizing in the serum, perhaps this just opens up more disposal pathways for LDL and lowers its chances of getting retained in the subendothelial space to begin with. + +Lastly, while we have established that vegetable oil consumption does appear to have an independent impact on LDL oxidation (though the effect is dwarfed by the effect of antioxidants), it is also true that oxLDL isn't actually a robust risk factor for CHD. Wu et al. (2006) discovered that the association between oxLDL and CHD does not survive adjustment for traditional risk factors like apolipoprotein (ApoB) or TC/high density lipoprotein cholesterol (HDL-C) [[16](https://pubmed.ncbi.nlm.nih.gov/16949489/)]. + +![][image9] +[image9]: /blog/seedoils/image9.png + +Essentially this means that after accounting for ApoB or TC/HDL, risk is more closely tracking ApoB or TC/HDL-C, and is not particularly likely to be tracking oxLDL at all. So even if it were the case that diets high in vegetable oils simply increased oxLDL, it wouldn't appear that it moves the needle for risk in the real world. It would also suggest that the hypothetical detriments of increasing LDL oxidation aren't significant enough to offset the LDL-lowering benefits of a high-PUFA diet. As we will discuss later in this section. + +In the above study by Wu et al. (2006), the Mercodia 4E6 antibody assay was used to measure oxLDL. Some have argued that this assay is invalid due to supposedly making poor distinctions between native LDL and oxLDL [[17](https://www.ahajournals.org/doi/full/10.1161/01.CIR.0000164264.00913.6D?related-urls=yes&legid=circulationaha%3B111%2F18%2Fe284)]. However, if the 4E6 assay was truly making poor distinctions between oxLDL and native LDL, the two biomarkers would essentially be proxying for one another to the point of being either interchangeable or even being the same thing. In this scenario, the results of the model would suggest extreme multicollinearity as indicated by similarly (extremely) wide confidence intervals for both results. + +If oxLDL and native LDL were truly proxying for one another in the model in this fashion, we'd expect the confidence intervals for each relative risk to be inflated and more likely non-significant. But, there is no evidence of extreme multicollinearity in the results. Therefore, it is unlikely that the 4E6 antibody assay is actually making poor distinctions between oxLDL and native LDL. This is important to consider, because the argument for extreme multicollinearity is the primary criticism used against the 4E6 antibody assay's usefulness. But the argument doesn't actually pan out. + +It is instead suggested by skeptics of the 4E6 antibody assay that measures of oxidized phospholipids, such as the E06 antibody assay, are more robust measures of oxLDL than the 4E6 antibody assay. However, the E06 antibody assay is actually more vulnerable to the exact type of confounding that has been suggested for the 4E6 antibody assay. This is explained on Mercodia's website [[18](https://www.mercodia.com/product/oxidized-ldl-elisa/#:~:text=Mercodia%20Oxidized%20LDL%20ELISA%20is,epitope%20in%20oxidized%20ApoB%2D100.&text=Substituting%20aldehydes%20can%20be%20produced,the%20generation%20of%20oxidized%20LDL)]. + +>_The proprietary mouse monoclonal antibody 4E6 is developed by professors Holvoet and Collen at the University of Leuven in Belgium. It is directed against a conformational epitope in the ApoB100 moiety of LDL that is generated as a consequence of substitution of at least 60 lysine residues of Apo B100 with aldehydes (Holvoet 2006). This number of substituted lysines corresponds to the minimal number required for scavenger-mediated uptake of oxidized LDL._ + +Essentially, the 4E6 antibody assay makes a clear distinction between native LDL and oxLDL by only binding to ApoB that has been modified sufficiently, as to not be recognizable by LDL receptors. As described on the Mercodia website, the 4E6 antibody only binds to ApoB particles that have >60 of their lysine residues modified by aldehydes, which is the threshold for initiating binding affinity with scavenger receptors, and foreclosing binding affinity with LDL receptors. This makes the 4E6 antibody assay an excellent assay for clearly distinguishing between native LDL and oxLDL. + +Mercodia goes on to discuss the reasons for why the E06 antibody assay could be problematic for assessing oxLDL. + +>_Substituting aldehydes can be produced by peroxidation of lipids of LDL, resulting in the generation of oxidized LDL. However, lipid peroxidation is not required. Indeed, aldehydes that are released by endothelial cells under oxidative stress or by activated platelets may also induce the oxidative modification of Apo B100 in the absence of lipid peroxidation of LDL._ + +Because lipid peroxidation of the LDL particle's phospholipid membrane is not required for an LDL particle to oxidize, a measurement of oxPL could easily mistake a minimally oxidized LDL particle as an oxLDL. For this reason, it is likely that the 4E6 antibody assay is likely to better reflect the actual number of oxLDL [[19](https://cms.mercodia.com/wp-content/uploads/2019/06/poster-oxldl-know-what-you-measure.pdf)]. + +This is relevant because the immune cells that mediate the formation of atherosclerotic plaques only tend to take up maximally oxidized LDL particles, not minimally oxidized LDL particles [[20](https://pubmed.ncbi.nlm.nih.gov/6838433/)][[21](https://pubmed.ncbi.nlm.nih.gov/24891335/)]. Maximally oxidized LDL have to be disposed of through scavenger receptor-mediated pathways, rather than LDL receptor-mediated pathways. + +![][image10] +[image10]: /blog/seedoils/image10.png + +If minimally oxidized LDL likely contribute as little to foam cell formation as native LDL, why favour measures of minimally oxidized LDL such as the E06 antibody assay over measures of maximally oxidized LDL such as the 4E6 antibody assay? + +Unfortunately, so far no studies have attempted to explore the relationship between oxLDL, as measured by the E06 antibody assay, and CHD outcomes after adjustment for total ApoB. The closest we have is a single study by Tsimikas et al. (2006) that found no correlation between oxPL/ApoB and ApoB [[22](https://pubmed.ncbi.nlm.nih.gov/16750687/)]. + +However, if ApoB and oxPL tend to vary in tandem, the oxPL/ApoB ratio might not be expected to change very much from subject to subject. If that is the case, then we would not expect oxPL/ApoB to correlate very well at all. It would be nice to see univariable and multivariable models presented that test for independent effects of these biomarkers. + +Nevertheless, if merely having more LA in your body meant that you would increase lipoprotein oxidation and thus get more CHD, we would not expect results like those of the meta-analysis conducted by Marklund et al. (2019) [[23](https://pubmed.ncbi.nlm.nih.gov/30971107/)]. When investigated closely, the higher your tissue representation, the lower your risk of both CHD and ischemic stroke. + +It’s important to note that there was not a single statistically significant increase in risk observed in any of the included cohorts when comparing the lowest tissue LA to the highest tissue LA. One of the more interesting findings was from a regression analysis of the Scottish Heart Health Extended Cohort by Wood et al. (1984), which found a strong inverse correlation between adipose LA and CHD incidence [[24](https://pubmed.ncbi.nlm.nih.gov/6146032/)]. + +![][image11] +[image11]: /blog/seedoils/image11.png + +This certainly isn't what we would expect if the chain of causality is LA -> OxLDL -> CHD. However, as we'll discuss in the next section, this is what we'd expect if the chain of causality is SFA -> LDL -> CHD. So, let's go ahead and dive into that data next. + +###### **HEART DISEASE** + +Now that we've established that there is scant evidence validating oxLDL as a robust, independent marker of CVD risk, let's move on to actual human outcomes. It is a common belief among certain diet camps that PUFA actually increases CVD risk, and that SFA may even lower the risk of CVD. But is there evidence for this claim? + +Let's start with the epidemiological evidence, being sure to keep the original question in mind— does substituting PUFA for SFA lower CVD rates? There have been multiple meta-analyses that have aimed to answer this question, however the application of meta-analysis methods in this context can produce some significant interpretative challenges. Let me explain why. + +The relationship between SFA and CVD is nonlinear, and significantly influenced by the degree of replacement with PUFA. As such, the linear summation of prospective cohort studies can hide the nonlinear effect. For example, let's have a look at one of the most heavily-cited meta-analyses by Siri-Tarino et al. (2010), which investigated the relationship between SFA and CVD in prospective cohort studies [[25](https://pubmed.ncbi.nlm.nih.gov/20071648/)]. + +![][image12] +[image12]: /blog/seedoils/image12.png + +As we can see, the aggregated results are null (P = 0.22). However, the I² (a measure of heterogeneity) is 41%, and no attempt was made to investigate the source of that heterogeneity. If we take the time to calculate the intake ranges of each cohort study (when possible), we can test for nonlinearity. + +![][image13] +[image13]: /blog/seedoils/image13.png + +After stratifying the included studies by intake range, we see a statistically significant 30% increase in risk in subgroup one (~25±15g/day) and null results for subgroups two and three (35±15g/day and 45±15g/day, respectively). This is precisely what we'd expect to see if the risk threshold presupposed by the Dietary Guidelines was correct. McGee et al. (1984) needed to be removed for this analysis because SFA intake ranges could not be determined from the provided data. + +But perhaps this is an isolated finding. There are many other meta-analyses on this subject [[26](https://pubmed.ncbi.nlm.nih.gov/27697938/)][[27](https://pubmed.ncbi.nlm.nih.gov/30954077/)][[28](https://pubmed.ncbi.nlm.nih.gov/32307197/)][29](https://pubmed.ncbi.nlm.nih.gov/19752542/)]. Maybe the other meta-analyses on this subject would find something different? Let's find out. + +![][image14] +[image14]: /blog/seedoils/image14.png + +Applying the same methodology to all of the available meta-analyses yields the same result. This time subgroup two is representing the intake threshold presupposed by the Dietary Guidelines (~25±15g/day). We see similar increases in risk in the same subgroup across all published meta-analyses investigating the relationship between SFA and CVD (RR 1.14 [1.07-1.22], P<0.0001). + +You may be asking why subgroups one, three, and four are null, whereas subgroup two is not. The answer is quite simple. It's because those ranges are not crossing the threshold of effect. The range of intake represented in subgroup one exists below the threshold of effect, whereas subgroups three and four exist above the threshold of effect. As such, comparing lower intakes to higher intakes within those ranges does not show an additional increase in risk. The relationship between SFA and CVD is sigmoidal. + +![][image15] +[image15]: /blog/seedoils/image15.png + +Comparing intakes that exist on either the floor or ceiling of the risk curve will typically produce null results. Only when the middle intake range is investigated is the increase in risk observable. + +But how does PUFA play into this? To answer this question, let's make our own meta-analyses. Let's take all of the cohort studies that fall within that middle range and plot them out for both SFA and PUFA. + +**Inclusion Criteria:** + +- Prospective cohort studies investigating the relationship between SFA and/or PUFA and CVD. + +- Endpoints directly related to CVD, coronary heart disease, ischemic heart disease, or myocardial infarction (events, mortality, incidences, etc) are acceptable. + +- Risk estimates stratified from lowest to highest SFA and/or PUFA intakes. + +- Cohorts must fit into one of four intake categories: + + +1. 0-10g/day (lower range) to 20-30g/day (upper range) + +2. 10-20g/day (lower range) to 30-40g/day (upper range) + +3. 20-30g/day (lower range) to 40-50g/day (upper range) + +4. 30g/day+ (lower range). Min. 20g/day difference from lower to upper range + + +**Exclusion Criteria:** + +- Studies pooling results across multiple cohorts from different countries. + +- Risk adjustments controlling for serum cholesterol and hyperlipidemic medications. + +- Cohorts consisting of people with pre-existing CVD and/or currently taking hyperlipidemic medications. + +- Studies investigating the same cohorts as other included studies. Tie-breakers are decided based on differences in study quality (e.g., chosen subgroups, endpoints, multivariate adjustment models, etc). + + +Drag-netting the literature yielded a total of 74 studies. 20 studies were excluded due to reporting irrelevant endpoints (e.g., stroke, cerebral hemorrhage, atrial fibrillation, etc). Of the 41 remaining studies, 32 studies were excluded due to including duplicate cohorts, adjusting for blood lipids, being multinational, failing to specify intake ranges, or having an intake range that did not fall into one of the prespecified subgroups. + +**Results for Saturated Fat:** + +Altogether there were 21 studies that met all of the inclusion criteria [[30](https://doi.org/10.1161/01.atv.3.2.149)][[31](https://doi.org/10.1194/jlr.M044644)][[32](https://doi.org/10.1016/j.jacc.2006.03.001)][[33](https://doi.org/10.1161/CIRCULATIONAHA.118.038908)][[34](https://doi.org/10.3945/ajcn.115.116046)][[35](https://doi.org/10.3945/ajcn.2009.27725)][[36](https://doi.org/10.1136/bjsports-2016-096550)][[37](https://doi.org/10.1186/s12944-019-1035-2)][[38](https://doi.org/10.1016/j.clnu.2020.03.028)][[39](https://doi.org/10.1159/000229002)][[40](https://doi.org/10.1371/journal.pone.0000377)][[41](https://doi.org/10.3945/jn.112.161661)][[42](https://doi.org/10.1161/CIRCRESAHA.118.314038)][[43](https://doi.org/10.1159/000175862)][[44](https://doi.org/10.3945/ajcn.115.116046)][[45](https://doi.org/10.1093/aje/kwh193)][[46](https://doi.org/10.1136/bmj.i5796)][[47](https://doi.org/10.1136/hrt.78.5.450)][[48](https://doi.org/10.1017/S0007114517003889)][[49](https://doi.org/10.1097/HJR.0b013e3282a56c45)][[50](https://doi.org/10.1093/oxfordjournals.aje.a009047)]. Cohorts were stratified across four subgroups, based on absolute grams-per-day intakes of SFA. Total pooled results across all subgroups showed a non-significant increase in risk (RR 1.07 [0.97-1.18], P=0.16). Subgroup two was the only subgroup to reach statistical significance (RR 1.24 [1.10-1.40], P=0.0005). + +![][image16] +[image16]: /blog/seedoils/image16.png + +Again, we see the exact same thing. The increase in risk occurs in the same subgroup, in the same intake range— the same intake range presupposed by the Dietary Guidelines to increase risk. + +**Results for Polyunsaturated Fat:** + +Altogether there were 10 studies that met all of the inclusion criteria. In order to preserve the PUFA to SFA ratio, cohorts were stratified across four subgroups, based on absolute grams-per-day intakes of SFA. Total pooled results across all subgroups showed a statistically significant reduction in CVD risk (RR 0.91 [0.83-1.00], P=0.04). Subgroup two was the only subgroup to reach statistical significance (RR 0.87 [0.80-0.93], P=0.0002). + +![][image17] +[image17]: /blog/seedoils/image17.png + +This second forest plot was not stratified by PUFA intake. As mentioned above, it was instead stratified by SFA intake. This way the ratio of SFA to PUFA would be better preserved. This is important for understanding the relationship between these two dietary fats. + +![][image18] +[image18]: /blog/seedoils/image18.png + +Both SFA and PUFA have inverse sigmoidal relationships with CVD. The more PUFA you replace with SFA, the higher your risk. The more SFA you replace with PUFA, the lower your risk. + +This is exactly the same relationship we see in the RCTs as well [[51](https://pubmed.ncbi.nlm.nih.gov/32827219/)]. Recently, Hooper et al. (2020) published an enormous meta-analysis and meta-regression analysis for the Cochrane Collaboration, which investigated CVD-related outcomes of many PUFA-SFA substitution RCTs. + +![][image19] +[image19]: /blog/seedoils/image19.png + +Their analysis shows that substituting SFA for PUFA, and crossing the 10% of energy threshold as SFA, increases CVD risk in the aggregate. Especially for CVD events, CVD mortality, CHD mortality, and non-fatal acute myocardial infarction (AMI). + +Cochrane also performed multiple meta-regression analyses on the included data. Meta-regression is a tool used to investigate the relationship between two variables when they are controlled by a moderator variable. In this case, the two variables in question are SFA intakes (or PUFA-SFA substitution) and CVD. Multiple moderator variables were modeled. + +![][image20] +[image20]: /blog/seedoils/image20.png + +The only statistically significant moderator variable was total cholesterol (TC) (P=0.04). This suggests that the chain of causality is SFA -> TC -> CVD. This therefore suggests that to the extent that a dietary modification reduces TC, reductions in CVD should follow. This is confirmed in their exploratory analysis later on in the paper. + +Additional exploratory meta-analyses by Hooper et al. (2020) also further divulge that SFA reduction lowers total CVD events (analysis 1.35), the best replacement for SFA is PUFA from vegetable oils (analysis 1.44), and the effect is likely via lowering TC (analysis 1.51). This evidence dovetails perfectly with the epidemiological evidence discussed above. + +Not included in many of Cochrane's analyses were two studies that are often offered up as damning counterevidence, and often cited in support the notion that vegetable oils increase CVD risk. These two trials are the Sydney Diet Heart Study (SDHS) by Woodhill et al. (1978) and the Minnesota Coronary Experiment (MCE) by Frantz et al. (1989) [[52](https://pubmed.ncbi.nlm.nih.gov/727035/)][[53](https://pubmed.ncbi.nlm.nih.gov/2643423/)]. These trials were both designed such that SFA was to be replaced with PUFA in the intervention groups in the form of vegetable oil-based margarines, and PUFA was to be replaced with SFA in the control groups. + +Both trials achieved significant differences in TC during the course of both of the trials. However, the SDHS did not achieve a significant difference in the magnitude of the reduction, and the final difference in TC was only around 12mg/dL. While statistically significant, it is questionable whether or not either of these changes in TC were clinically significant. On the other hand, the MCE saw significant reductions in TC. + +Neither trial saw a statistically significant difference in either CVD mortality or total mortality. + +![][image21] +[image21]: /blog/seedoils/image21.png + +However, in the aggregate, there is a significant increase in CVD mortality between the two trials. This is concerning, seeing as though these two trials are often touted as the best designed trials that have been conducted in the investigation of this research question, aside from the LA Veterans Administration Hospital Study (LAVAT) by Dayton et al. (1969) [[54](https://www.ahajournals.org/doi/10.1161/01.CIR.40.1S2.II-1)]. However, the MCE's design ended up allowing participants to enter in and exit out of the trial at their leisure, and this ended up resulting in a mean follow-up time of around 1.5 years. Which is abysmal. + +It should be noted that the SDHS was a secondary prevention trial, which means that the subjects had already had a single CVD event at the time of enrollment. Given the questionable clinical relevance of the final differences in TC, it is even more ambiguous how meaningful the findings were. It has been observed that differences in SFA intake don't always change CVD outcomes in high-risk populations [[55](https://www.nature.com/articles/s41598-021-86324-w)]. + +Nevertheless, we're left wondering precisely why we didn't see the predicted effect in either of these trials. Aside from the revolving door protocol that was used in the MCE, the designs were not particularly terrible as far as large-scale RCTs go. So, why didn't we see the effect that we see in nearly every other trial of similar design and quality, as mentioned above? + +The answer likely lies in the types of fat-based products that were provided to the vegetable oil groups in these two trials. The vegetable oil groups were the groups that were meant to increase PUFA intake. PUFA was provided to subjects primarily in the form of corn oil (CO) based margarines. This is a problem. Margarines are typically made primarily from unsaturated fats, which are liquid at room temperature. In order to make the product solid and spreadable, the oils need to be hardened. There are essentially two standard ways to achieve this effect. + +First, we can harden oils through hydrogenation or through emulsification. However, non-hydrogenated margarines were not commonplace on the market prior to the 1970s [[56](https://www.soyinfocenter.com/HSS/margarine2.php)]. Both the SDHS and the MCE were conducted during the 1960s. At the time, hydrogenation was the preferred method to harden margarines. However, this has the secondary effect of generating trans fatty acids (TFA). + +TFAs are associated with an increased risk of many diseases, including CVD. However, TFAs are the only known fatty acid subtypes that have been associated with increased CVD mortality when replacing SFA on a population-level [[57](https://pubmed.ncbi.nlm.nih.gov/30636521/)]. + +![][image22] +[image22]: /blog/seedoils/image22.png + +Basically, TFAs are fucking dangerous— more dangerous than SFA. The CO-based margarine used in the SDHS was "Miracle" brand margarine [[58](https://pubmed.ncbi.nlm.nih.gov/23386268/)]. According to Dr. Robert Grenfell of the National Cardiovascular Health Director at the Australian Heart Foundation and the Deputy Chairman of the Sydney University Nutrition Research Foundation, Bill Shrapnel, Miracle brand margarine was up to 15% TFA at the time the study was conducted [[59](https://www.ausfoodnews.com.au/2013/02/11/heart-foundation-takes-swipe-at-butter-and-new-study-on-margarine.html)]. + +>_When this study began, Miracle margarine contained approximately 15 per cent trans fatty acids, which have the worst effect on heart disease risk of any fat. The adverse effect of the intervention in this study was almost certainly due to the increase in trans fatty acids in the diet_ + +If Woodhill et al. (1978) truly fed the subjects in the vegetable oil group (group F) as much of that margarine as they seem to be claiming to in their publication, that could be around 5.7g/day of TFA. + +![][image23] +[image23]: /blog/seedoils/image23.png + +The margarine used in the MCE was likely to be Fleischmann's Original, due to the availability and popularity at the time of the intervention. As well as the fact that the product was developed in direct response to pro-PUFA research that was being conducted at the time. + +![][image24] +[image24]: /blog/seedoils/image24.png + +The only other two margarines that were potentially available in the region at the time the MCE was conducted were Imperial margarine and Mazola margarine. Some Imperial products remained high in TFA until very recently [[60](https://abcnews.go.com/Business/story?id=8182555&page=1)]. Mazola was pretty much the only non-hydrogenated margarine on the market at the time. + +![][image25] +[image25]: /blog/seedoils/image25.png + +The answer to the question of which margarine was used in the MCE is anybody's guess at this point. But if I were generous, I'd say that based on the margarines that were available (and most likely to be used) at the time the MCE was conducted, there is roughly a 67% chance that the trial was potentially confounded by TFA in the vegetable oil diet. Though Ramsden et al. (2016) remain skeptical that confounding such as this was likely [[61](https://pubmed.ncbi.nlm.nih.gov/27071971/)]. + +However, even if the MCE was not confounded by TFA, we would still have a good reason to exclude it from consideration. Like I mentioned earlier, the trial was designed in such a way that the participants had the liberty to enter and exit the trial at their leisure. In the aggregate, there was only a 12-18 month follow-up time. As such, the trial has significantly less power than all other trials that investigated this particular sort of dietary substitution. + +Ramsden et al. have argued at length that the control group was likely confounded by TFA to a greater degree than the vegetable oil group. In their view, this could indicate that LA is actually worse for you than TFA. Essentially they claim that vegetable shortening was added to the control group in order to boost the SFA content of the diet, and because vegetable shortening is hydrogenated, it must have contained a large amount of TFA. This is dubious. + +Fully hydrogenated oils contain very little TFA [[62](https://pubmed.ncbi.nlm.nih.gov/26048727/)]. However, partially hydrogenated oils such as most soft margarines of the period contain high levels of TFA. Here is a selection of SOs taken from the USDA's SR28 Nutrient Database [[63](https://www.ars.usda.gov/northeast-area/beltsville-md-bhnrc/beltsville-human-nutrition-research-center/methods-and-application-of-food-composition-laboratory/mafcl-site-pages/sr11-sr28/)]. + +![][image26] +[image26]: /blog/seedoils/image26.png + +As you can see, a tablespoon of partially hydrogenated SO margarine contains 2200% more TFA than a tablespoon of fully hydrogenated SO shortening. + +Ramsden et al. (2016) also acknowledge that the vegetable oil group's diet used soft margarines that were likely to contain some TFA. However, they also under-appreciate the fact that fully hydrogenated vegetable shortening contains pretty much the same amount of TFA as its unadulterated, non-hydrogenated counterpart. In fact, this is precisely why fully hydrogenated shortenings are still on the market despite the TFA ban in most developed countries. It's because those fats never had much TFA to begin with. + +>_Because the trans fatty acid contents of MCE study diets are not available, one could speculate that the lack of benefit in the intervention group was because of increased consumption of trans fat. Indeed, in addition to liquid corn oil the intervention diet also contained a serum cholesterol lowering soft corn oil polyunsaturated margarine, which likely contained some trans fat. The MCE principal investigator (Ivan Frantz) and co-principal investigator (Ancel Keys), however, were well aware of the cholesterol raising effects of trans fat prior to initiating the MCE.77 Moreover, Frantz and Keys previously devised the diets used in the institutional arm of the National Diet Heart Feasibility Study (NDHS), which achieved the greatest reductions in serum cholesterol of all NDHS study sites.2 Hence, it is highly likely that this experienced MCE team selected products containing as little trans fat as possible to maximize the achieved degree of cholesterol lowering. Perhaps more importantly, it is clear from the MCE grant proposal that common margarines and shortenings (major sources of trans fat) were important components of the baseline hospital diets and the control diet (but not the intervention diet). Thus, confounding by dietary trans fat is an exceedingly unlikely explanation for the lack of benefit of the intervention diet._ + +Given that we can soundly infer that the SDHS study was confounded by TFA, and the MCE was likely to be confounded by TFA, the results of these trials start to make a lot more sense. The effect sizes, and the direction of effect, mirror what we see in epidemiological research, as well. When TFA replaces SFA, risk goes up. When PUFA replaces SFA, risk goes down. If it is still to be maintained by skeptics that vegetable oils increase the risk of CVD, rather than lowering it, they must satisfy the burden of proof with extraordinary evidence. + +I would surely be remiss if I did not briefly acknowledge one trial that was left out of the analysis by Hooper et al. (2020), which was the Lyon Diet Heart Study [[64](https://pubmed.ncbi.nlm.nih.gov/7911176/)]. The reason this trial is noteworthy is due to it being the only experimental investigation of the diet-heart hypothesis that actually made an effort to reduce LA alongside SFA. The trial also saw one of the largest reductions in CVD risk ever recorded in this body of literature, with a massive 73% reduction in CVD risk over four years. Skeptics of vegetable oils would like to attribute this effect to the lowering of LA in the diet, but is there any merit to this? + +The trial did achieve statistically significant differences in LA intake between groups, with 5.3% of energy as LA in the control group and only 3.6% of energy as LA in the intervention group [[65](https://pubmed.ncbi.nlm.nih.gov/9989963/)]. However, if we calculate the absolute intakes of LA for both groups using each group’s total daily calories, we discover that the absolute differences in LA intake between groups amounted to about 4.5g/day— equal to approximately 1.5 teaspoons of SO. In the most clinical, scientific vernacular, this would be referred to as sweet fuck all. + +So, why did the trial see such a massive reduction in risk? Likely because, as far as multifactorial interventions go, this trial did its best to knock the ball out of the park. Just take a look at the diets. + +![][image27] +[image27]: /blog/seedoils/image27.png + +Firstly, the groups achieved a difference of 10g/day in SFA and the between-group differences in SFA cross the 25g/day threshold that we discussed earlier. Secondly, the intervention group was consuming significantly fewer foods that are positively associated with CVD, such as whole meat, processed meat, and butter. Lastly, the intervention group was consuming significantly higher amounts of fruit and vegetables (considered together), as well as unsaturated fats, which are strongly inversely associated with CVD. + +Bottom line is that there is a lot going on in these diets that could be strongly modifying CVD risk. To attribute the massive 73% reduction in CVD risk to 4.5g/day of LA is frankly dubious, and not replicated anywhere else in the literature, despite it being directly tested. Virtually all other trials that were well controlled found the opposite effect of increasing LA. Honestly, based on what is currently known about LA, I would sooner suspect that the lower LA in the intervention group was likely working against them, not for them. + +Lastly, the relationship between LA and CVD has been investigated using Mendelian randomization (MR). You can think of MR as being a method of investigation that is halfway between an RCT and an epidemiological study. Essentially, you find people with gene variants that influence a particular exposure (such as higher tissue LA) and compare their outcomes to other people who do not have those gene variants. + +The study methods of MR also assume that genes are randomly distributed in the population, and this should significantly mitigate the potential for certain types of confounding like the healthy-user bias (HUB). It is generally accepted that this methodology offers superior internal validity for these sorts of research questions than typical methods used in the field of epidemiology. It's essentially giving you the best idea of the magnitude of the effect, independent of confounding, that is achievable without lifelong RCTs. + +Even though MR data doesn't really need to be mentioned, because we have actual RCT data on this subject. However, it's worthwhile to add it in here just to hammer home how utterly consistent this evidence actually is. This time the data is being sourced from the UK Biobank, which is a massive prospective cohort study that also leverages a repository of biological samples from over 500,000 subjects [[66](https://pubmed.ncbi.nlm.nih.gov/33924952/)]. + +![][image28] +[image28]: /blog/seedoils/image28.png + +Here we see that Park et al. (2021) observed the same relationship yet again. Genetically elevated serum LA was inversely associated with AMI, whereas genetically elevated serum AA was positively associated with AMI. The gene variants that were investigated were related to the function of fatty acid desaturase (FADS) enzymes. + +It would seem that those who are less able to convert LA to AA have a decreased risk of AMD, whereas those who are more able to convert LA to AA have an increased risk. Considering the fact that AA conversion is highly regulated, as well as the fact that dietary LA is virtually unavoidable, it seems unlikely that modulating dietary LA would be a reliable way to modulate the conversion of LA into AA [[67](https://pubmed.ncbi.nlm.nih.gov/21663641/)]. On balance, these findings support increasing dietary LA for CVD prevention. + +Overall, the available evidence overwhelmingly favours the inclusion of vegetable oils in the diet, especially if consumed to the exclusion of SFA, for reducing CVD risk. The evidence that would need to be bought forward to topple this paradigm would need to be truly extraordinary. + +# **CANCER** + +###### **TOTAL CANCER** + +The data most often cited in support of the notion that vegetable oils increase the risk of cancer comes from a post-hoc analysis of the aforementioned study, the LAVAT, by Pearce et al. (1971) [[68](https://pubmed.ncbi.nlm.nih.gov/4100347/)]. This is likely because this is some of the only randomized controlled trial (RCT) data that actually shows this increase in risk [[69](https://pubmed.ncbi.nlm.nih.gov/21090384/)]. As we will discuss, this is quite easy to cherry-pick. + +The LAVAT was a double-blind RCT was first reported on by Dayton et al. (1969), and aimed to investigate the effects of substituting vegetable oils for animal fat on the risk of CVD. However, cancer was among their secondary endpoints. The researchers actually took enormous care to ensure that the substitution of vegetable oil for animal fat was the only substitution the subjects were making. Even going so far as providing ice cream made out of vegetable oils rather than dairy fat. + +It's important to preface this discussion with an acknowledgment that the trial observed statistically significant increases in dietary LA and LA tissue representation in the vegetable oil group. LA was higher across all measured tissue compartments when comparing subjects with an adherence of at least 88% to control. + +Essentially, the concern that increasing vegetable oils in the diet increases cancer risk originates from the following figure. Figure 1 from the original analysis by Pearce at al (1971) clearly shows that the cumulative deaths due to carcinoma rise faster in the vegetable oil group than in the control group after around two years into the study. + +![][image29] +[image29]: /blog/seedoils/image29.png + +I must admit that the graph looks pretty scary, and narratives surrounding the findings of this study had me convinced for a while too. However, this graph is incredibly misleading when taken out of context. + +Firstly, cancer deaths were not a pre-specified primary endpoint of the trial itself, which means it is questionable whether or not the study was even appropriately powered or equipped to investigate this endpoint in any rigorous way. Secondly, the results are not statistically significant, despite the above figure showing what appears to be a massive divergence in cancer outcomes. + +>_During the diet phase (see figure) there were 31 carcinoma deaths in the experimental group and 17 in the control group (χ² = 3.668, p = 0.06)._ + +Pearce et al. also performed an analysis wherein they adjusted for the differences in relative adherence between groups. After the adjustment, the findings were consistent with what would be expected from random distribution. + +>_Many of the cancer deaths in the experimental group were among those who did not adhere closely to the diet. This reduces the possibility that the feeding of polyunsaturated oils was responsible for the excess carcinoma mortality observed in the experimental group. However, there were significantly more low adherers in the entire experimental group than in the controls (table VI). In both groups, the numbers of cancer deaths among the various adherence strata are compatible with random distribution (table V). A high incidence among high adherers would be expected if some constituent of the experimental diet were contributing to cancer fatality._ + +This basically means that the excess cancer deaths seen in the vegetable oil group were very likely due to chance, and wrongly attributed to poor adherence. For this reason the authors conclude that the high vegetable oil diet was not likely to be the cause of the increase in cancer mortality. In fact, they specifically mention that their findings were an outlier in the context of the wider literature of the time. + +Pearce et al. also included a table that stratifies cancer outcomes by the degree of adherence per group. + +![][image30] +[image30]: /blog/seedoils/image30.png + +As mentioned above, the vegetable oil group had significantly more low adherers. As we can see, about 33% of the excess cancer was occurring among low adherers in the vegetable oil group. Let's see what happens when we not only remove the low adherer subgroup, but also compare the between-group difference in carcinoma risk among the highest adherers. + +![][image31] +[image31]: /blog/seedoils/image31.png + +Removing the low adherers nullifies the effect of the vegetable oil diet on cancer outcomes. There are also other plausible explanations for the effect as well. For example, the vegetable oil group contained many more moderate smokers than the animal fat group. + +Moderate smokers were defined as those smoking 0.5-1 packs of cigarettes per day. As you can see, observed cancer among moderate smokers was 3x higher in the vegetable oil group, and this is where all the excess cancer risk is accumulating. + +![][image32] +[image32]: /blog/seedoils/image32.png + +This means that low adherers in the vegetable oil group were likely to be smokers, and the smokers were likely to get more cancer. As we would expect [[70](https://pubmed.ncbi.nlm.nih.gov/22943444/)]. + +To suggest that the results of the LAVAT demonstrate a higher cancer risk for those consuming vegetable oils is just to misunderstand or misrepresent the data that Pearce et al. reported. The study did not actually divulge an independent effect of vegetable oil intake on cancer mortality. In fact, if we only look at high adherers, there are no statistically significant differences in cancer. + +![][image33] +[image33]: /blog/seedoils/image33.png + +As the authors reported, if the increase in cancer risk was actually a consequence of the vegetable oil diet, we would see more cancer risk among higher adherers. But we don't. We see no statistically significant differences. + +Overall, there is insufficient evidence to declare higher vegetable oil intakes to be an independent risk factor for cancer. The available data suggests that, at worst, higher vegetable oil intakes likely have a neutral effect compared to high animal fat intakes. But, the LAVAT was not the only trial to report cancer as a secondary endpoint. Three other trials that substituted vegetable oils for SFA also reported cancer outcomes. + +![][image34] +[image34]: /blog/seedoils/image34.png + +When considering all of the studies in the aggregate (subgroup 2.1.1), we see that the effect of substituting vegetable oils for SFA on cancer is null. But, the LAVAT is still boasting its (dubiously) large effect size. When we remove the moderate smokers, the increased risk is nullified (subgroup 2.1.2). However, further excluding all regular smokers pushes the aggregated results to a non-significant decrease in cancer risk with substituting vegetable oils for SFA (subgroup 2.1.3). + +The direction of effect that we see is actually consistent with the wider epidemiology investigating the relationship between LA biomarkers and cancer mortality. Here we see a strong inverse association between tissue LA representation and cancer risk overall [[71](https://pubmed.ncbi.nlm.nih.gov/32020162/)]. + +![][image35] +[image35]: /blog/seedoils/image35.png + +However, this is total cancer. There is still some controversy surrounding whether or not vegetable oils may increase the risk of other cancers. So, let's dive into that literature next. + +###### **SKIN CANCER** + +There is a meta-analysis by Ruan et al. (2020) investigating the limited epidemiological research on the subject. The results suggest that higher intakes of PUFA could also increase the risk of skin cancer in prospective cohort studies [[72](https://pubmed.ncbi.nlm.nih.gov/31298947/)]. However, if we take a look at the author's data, we have some troubling findings. + +![][image36] +[image36]: /blog/seedoils/image36.png + +Increasing PUFA intake seems to increase the risk of squamous cell carcinoma (SCC). However, a single study by Park et al. (2018) is contributing 92.6% of the weight [[73](https://pubmed.ncbi.nlm.nih.gov/29636341/)]. + +![][image37] +[image37]: /blog/seedoils/image37.png + +This could be due to the fact that the study's adjustment model lacked several important covariates that may have plausibly changed the association. For example, the multivariate adjustment model adjusted for hair colour rather than skin tone. This is problematic because hair colour does not sufficiently capture the differential effects of skin tone on skin cancer [[74](https://pubmed.ncbi.nlm.nih.gov/23107311/)]. + +![][image38] +[image38]: /blog/seedoils/image38.png + +In at least one of the included prospective cohort studies by Ibiebele et al. (2009) that investigated the relationship between LA and skin cancer included adjustments for skin colour, and their results were null [[75](https://pubmed.ncbi.nlm.nih.gov/19462452/)]. This further casts doubt on the veracity of the findings reported by Park et al. (2018). + +In fact, when tissue representation of LA was investigated by Wallingford et al. (2013) in a separate cohort study, non-significant reduction in the risk of basal cell carcinoma (BCC) can be observed [[76](https://pubmed.ncbi.nlm.nih.gov/23885039/)]. Additionally, among those with previous skin cancers, higher tissue representation of LA was associated with a statistically significant decrease in risk of re-occurrence (RR 0.54 [0.35-0.82]) A very odd finding if having more LA inside your body is supposed to predispose you to developing skin cancer. + +There is also one study by Harris et al. (2005) that investigates the relationship between red blood cell cis-LA content and squamous cell carcinoma [[77](https://pubmed.ncbi.nlm.nih.gov/15824162/)]. While it is a case-control study and lacks the temporal component that is necessary to establish causality, it is some of the only human outcome data we have on the subject, and the results are null. + +![][image39] +[image39]: /blog/seedoils/image39.png + +If one still believes that higher intakes of LA increases the risk of skin cancer, I have a treat for them. Do you remember the LAVAT we mentioned in the cancer section? It turns out that skin cancer was actually one of their secondary endpoints. + +![][image40] +[image40]: /blog/seedoils/image40.png + +In table II from the post-hoc analysis by Pearce et al. (1971), we see that in the vegetable oil group, there were ten cases of skin cancer, whereas in the animal fat group there were 21. This produces a statistically significant increase in skin cancer risk for the animal fat group, whether or not we exclude or include the post-diet period (RR: 2.11 [1.01-4.43] and 2.09 [1.07-4.11], respectively). + +![][image41] +[image41]: /blog/seedoils/image41.png + +As we discussed earlier, there were no statistically significant differences in cancer risk among heavy smokers, of which there were only two cases in the animal fat group. However, there was a non-significant increase in cancer risk among moderate smokers, of which there were 19 cases in the vegetable oil group. + +This suggests that the increase in skin cancer seen in the animal fat group is not due to heavy smoking, as there were only two cases of cancer among heavy smokers in the animal fat group, and we have 21 cases of skin cancer. The vegetable oil group had lower rates of skin cancer despite the fact that there were more moderate smokers, and more cancer risk among moderate smokers, in the vegetable oil group. This increase in risk seen in the animal fat group can't be explained by differences in smoking habits. + +Additionally, the methods of MR have also been used by Seviiri et al. (2021) to investigate the relationship between elevated plasma LA and skin cancer [[78](https://pubmed.ncbi.nlm.nih.gov/34088753/)]. Data was collected for two different keratinocyte cancers, which were BCC and SCC, and the results are consistent with those found in the LAVAT. + +![][image42] +[image42]: /blog/seedoils/image42.png + +There was a statistically significant 6% reduction in BCC risk with genetically elevated plasma LA, whereas AA showed a statistically significant 4% increase in risk. Oddly, the effect size of eicosapentaenoic acid (EPA) was actually larger than that of AA, which would seem to be at odds with the RCT data on the subject [[79](https://pubmed.ncbi.nlm.nih.gov/24265065/)]. + +![][image43] +[image43]: /blog/seedoils/image43.png + +For SCC, the only statistically significant relationship between genetically elevated plasma PUFA was a 4% increased risk with plasma AA. The results for all other PUFA were null. + +In conclusion, it is true that there are some cohort studies suggesting that higher intakes of PUFA may increase the risk of skin cancer. However, the results from the LAVAT and MR are actually stronger evidence and concordant in the opposite direction. As such, it would not appear likely that increasing vegetable oil consumption is an independent risk factor for developing skin cancer. In fact, increasing vegetable oil intake could actually reduce the risk of skin cancer. + +# **ADIPOSITY** + +###### **2-ARACHIDONOYLGLYCEROL** + +The notion that vegetable oils are responsible for the obesity epidemic is extremely pervasive across a wide variety of niche diet communities. The hypothesis that dietary LA increases hunger through the passive production of an endocannabinoid known as 2-arachidonoylglycerol (2-AG) has been articulated by Watkins et al. (2015) [[80](https://pubmed.ncbi.nlm.nih.gov/25610411/)]. They suggest that this endocannabinoid interacts with cannabinoid receptor type 1 (CB1) and facilitates obesity by stimulating appetite. Essentially, vegetable oils supposedly give us "the munchies" similarly to marijuana, as the story goes. But, does this mechanism actually work? + +Indeed, this mechanism does appear to work— in mice [[81](https://pubmed.ncbi.nlm.nih.gov/22334255/)]. In this study by Alvheim et al. (2012), mice were fed two different diets with varying fatty acid compositions. Essentially, mice were randomized to two diets that contained either moderate fat (35% of energy) or high fat (60% of energy). Within each diet group there were three distinct diet conditions. One of the diet conditions was low in LA (1% of energy), and the two remaining diet conditions were "high" in LA (8% of energy), with one of which also being supplemented with long-chain omega-3s. + +![][image44] +[image44]: /blog/seedoils/image44.png + +By the end of the study, the mice receiving 8% of their energy from LA had consistently higher body weight, with a slightly mitigating effect of supplemented omega-3s in the mice fed a high-fat diet (chart e). The increases in body weight in the mice that were fed high-LA diets was commensurate with increases in 2-AG. Ergo, consuming a high-LA diet will increase 2-AG and facilitate obesity— in mice. But what about humans? + +A study by Blüher et al. (2006) involving 60 subjects explored the correlation between body fatness and a number of markers related to the endocannabinoid system. There ended up being significant correlations between circulating 2-AG and obesity [[82](https://pubmed.ncbi.nlm.nih.gov/17065342/)]. + +![][image45] +[image45]: /blog/seedoils/image45.png + +However, there is an issue. Unlike mice, circulating levels of the 2-AG precursor, ARA, did not differ between lean and obese subjects. For this reason, the authors go on to express skepticism toward the hypothesis that 2-AG synthesis is driven passively by the supply of precursors in humans. Instead, they point out that there is more evidence that obesity itself acts to inhibit the degradation of 2-AG. + +>_Which mechanisms lead to increased endocannabinoid levels in abdominal obesity? One possibility is the increased supply of precursors for endocannabinoid biosynthesis and/or increased activity of enzymes involved in endocannabinoid synthesis. When studying circulating levels of the precursor arachidonic acid and of oleoylethanolamide, a molecule with endocannabinoid structure and synthesized by the same enzymes that do not activate [cannabinoid] receptors, we did not find any significant correlation with measures of adiposity._ +> +>_Thus, decreased endocannabinoid degradation must be considered as a second possibility. Given the overwhelming mass of adipose tissue compared with other organs, a contribution of adipocytes to endocannabinoid inactivation, which may be disturbed in visceral obese subjects, is an attractive hypothesis._ + +This would not be surprising, considering that the impaired clearance and/or degradation of metabolic substrates is a well-characterized phenomenon in human obesity. Not only that, but there is also a large body of research divulging that the production of 2-AG from its precursors is regulated, not passive [[83](https://pubmed.ncbi.nlm.nih.gov/14595399/)]. + +While somewhat tangential to the point, it is interesting to note that we have tested the effects of selective CB1-antagonism in humans with a pharmaceutical called Rimonabant [[84](https://pubmed.ncbi.nlm.nih.gov/17054276/)]. Overall, this drug does appear to reduce energy intake and result in weight loss that is equal to just over a quarter-pound per week. + +![][image46] +[image46]: /blog/seedoils/image46.png + +The reason this is tangential is because CB-antagonists such as Rimonabant are not specifically targeting LA metabolism. All this research tells us is that the endocannabinoid system is involved with the regulation of body weight in humans, but it does not tell us what independent contributions are being made by 2-AG, or even dietary LA for that matter. + +###### **ENERGY INTAKE** + +If we wish to explore the effects of dietary LA on appetite, there have been a number of short-term fatty acid substitution trials investigating this question. One trial by Naughton et al. (2018) showed an effect of LA on hunger hormones, and a non-significant reduction in prospective energy intake compared to control and high-oleate diets [[85](https://www.ncbi.nlm.nih.gov/pubmed/30261617)]. However, the authors spuriously claim that there was no effect of the high-LA diet in reducing prospective energy intake. This is an example of the interaction fallacy, because there was actually non-inferiority between the high-LA diet and the other diet conditions. + +Of the trials that actually reported ad libitum energy intake in response to diets of varying fatty acid composition, no consistent effects are observed [[86](https://www.ncbi.nlm.nih.gov/pubmed/14694208)][[87](https://pubmed.ncbi.nlm.nih.gov/26331956/)][[88](https://pubmed.ncbi.nlm.nih.gov/10953671/)][[89](https://pubmed.ncbi.nlm.nih.gov/11040181/)][[90](https://pubmed.ncbi.nlm.nih.gov/23328113/)][[91](https://pubmed.ncbi.nlm.nih.gov/28760423/)]. All together, the short-term evidence is largely a wash. In fact, this was remarked upon by Strik et al. (2010) in table 4 of one such publication, and they included the aggregated findings across a number of different trials investigating the relationship between fatty acid saturation, satiety, and energy intake [[92](https://pubmed.ncbi.nlm.nih.gov/20492735/)]. Overall, when there was an effect of LA, it tended to decrease energy intake. + +![][image47] +[image47]: /blog/seedoils/image47.png + +In one particularly well-done trial by Strik et al., participants in the three groups were given unlimited access to muffins made using either SFA, MUFA, or PUFA. They would consume these muffins ad libitum one variety at a time, with a washout period between different muffin types. + +By the end, all three groups experienced all three muffin types. Each time researchers collected subjective data on satiety and the general satisfaction of the food experience. No differences in any parameters reached statistical significance. + +![][image48] +[image48]: /blog/seedoils/image48.png + +There were no statistically significant differences in hunger, fullness, satisfaction, or prospective consumption (how much more subjects suspected they could eat at that moment). It appeared as though SFA trended toward a decrease in fullness, perhaps. There were also no observed differences in ad libitum energy intake. + +>_Mean total [energy intake] and energy contributed by CHO, fat and protein respectively at the ad lib lunch is presented for each treatment in Figure \u{200B}3. There was no significant difference in total [energy intake] between lipid treatments (treatment, P > 0.05). Mean (SEM) [energy intake] at lunch was 5275.9 (286.5) kJ, 5227.7 (403.9) kJ, and 5215.6 (329.5) kJ following the SFA-, PUFA-, and MUFA-rich breakfasts respectively._ + +One interesting criticism is that the subjects' diets may have already been so high in LA that the hunger effects were blunted. This supposedly creates the illusion of equal satiety effects between fatty acids, because the hunger-generating effects are masked by a sort of LA tolerance, so to say. While this is possible, it doesn't seem like a particularly strong criticism. The researchers used a crossover-style design specifically to minimize this type of confounding. + +I have also heard it proposed that in order to study this effect, researchers may need to run-in the subjects on an LA-depleting diet for months (or even years) leading up to the satiety tests. Luckily, that's not necessary, as this was also investigated in the previously referenced trial by Dayton et al. (1969), the LAVAT. In this ad libitum double-blind RCT, normal weight subjects were randomized to one of two groups. The first group was placed on a vegetable oil containing diet that yielded approximately 42.3g/day of LA, whereas the second group was placed on an animal fat containing diet that yielded only approximately 10.8g/day. + +This difference in LA intake produced an enormous increase in adipose LA in the vegetable oil group. It's probably safe to say that these people reached a maximal saturation point, as evidenced by the hyperbolic curve in adipose LA representation over time. + +![][image49] +[image49]: /blog/seedoils/image49.png + +The median LA representation in adipose tissue increased from around 8-11% of total fatty acids to over 30% of total fatty acids across the eight year study. The baseline levels are consistent with levels found in traditional populations like the Tsimane, Inuit, and the Navajo aboriginals [[93](https://pubmed.ncbi.nlm.nih.gov/22624983/)][[95](https://onlinelibrary.wiley.com/doi/10.1002/cphy.cp050117)]. While the data published by Martin et al. (2012) is representing the fatty acid composition of breast milk in the Tsimane, it is also true that the LA contents of both breast milk and adipose tissue correlate extremely tightly [[96](https://pubmed.ncbi.nlm.nih.gov/16829413/)][[97](https://pubmed.ncbi.nlm.nih.gov/8237871/)][[98](https://pubmed.ncbi.nlm.nih.gov/9684741/)]. + +![][image50] +[image50]: /blog/seedoils/image50.png + +There were no statistically significant differences between the baseline tissue LA presentation in the LAVAT and measurements taken from either the Navajo or Tsimane (SD estimated for Navajo). However, tissue LA was statistically significantly higher among Inuit when compared to the baseline measurements observed in the LAVAT. + +From this, we can likely infer that the subjects in the LAVAT were largely starting from ancestral levels of tissue LA, and increasing tissue LA to approximately threefold higher levels over the eight year trial period. So how did this threefold increase in tissue LA affect their body weight over time? Long story short, it didn't. + +![][image51] +[image51]: /blog/seedoils/image51.png + +Some may speculate that perhaps the 10.8g of LA being consumed in the control group was simply too high, and that the hyperphagic effects of the LA could have been masked by both groups exceeding a particular threshold. This is difficult to reconcile with the fact that the LA intake of the animal fat group was perfectly within bounds when compared to all known estimates of preagricultural LA intakes, as mentioned above [[99](https://pubmed.ncbi.nlm.nih.gov/20860883/)]. Also, this was an ad libitum trial in normal weight subjects and body weight remained within 2% of baseline. + +The LA intakes in the vegetable oil group universally overshoot the upper bounds of all of those same estimates of preagricultural LA intakes. This means that the animal fat group was consuming levels of LA that were consistent with those consumed before the obesity epidemic occurred. However, the vegetable oil group was consuming a level of LA that far surpassed all known preagricultural estimates of LA consumption. + +This wasn't the only RCT that substituted vegetable oils for animal fat to measure body weight over time. According to the secondary endpoint analysis done by Hooper et al. 2020 with the Cochrane Collaboration, Olso Diet-Heart saw a 2.5kg reduction in body weight during their study period, whereas the Medical Research Council saw no change in body weight as well [[100](https://pubmed.ncbi.nlm.nih.gov/2607071/)][[101](https://pubmed.ncbi.nlm.nih.gov/4175085/)]. + +![][image52] +[image52]: /blog/seedoils/image52.png + +Altogether, it does not appear as though vegetable oils uniquely increase body weight in humans. So, while vegetable oils may increase 2-AG and induce obesity in mice, this does not appear to pan out in humans. Large scale RCTs in humans do not support the hypothesis that vegetable oils lead to weight gain over time in humans. + +###### **THERMOGENESIS** + +The effect of varying PUFA and SFA in the diet on measures of energy expenditure (EE) have been tested numerous times and show unambiguously consistent results [[102](https://pubmed.ncbi.nlm.nih.gov/24363161/)]. Overall, diets higher in PUFA and lower in SFA tend to increase EE in humans [[103](https://pubmed.ncbi.nlm.nih.gov/1556946/)][[104](https://pubmed.ncbi.nlm.nih.gov/9467221/)]. + +![][image53] +[image53]: /blog/seedoils/image53.png + +Here is an example from that body of literature. In this study by Lichtenbelt et al. (1997), we can clearly see a consistent effect across all six subjects with higher PUFA intakes increasing postprandial EE. The same trend was also observed for resting metabolic rate (RMR). Ultimately, high-SFA, low-PUFA diets tend to lower EE and RMR compared to high-PUFA, low-SFA diets. This finding is incredibly consistent, though PUFA and MUFA seem to trade blows in some studies, the overall trend of SFA being least thermogenic is clear. + +The effects of high-PUFA feeding on fat oxidation have also been studied by Casas-Agustench et al. (2009) as well [[105](https://pubmed.ncbi.nlm.nih.gov/19010571/)]. When using the respiratory quotient to compare the effects of diets that are high in PUFA, MUFA, and SFA on EE and fat oxidation, we see a similar trend emerge once again. + +![][image54] +[image54]: /blog/seedoils/image54.png + +High-PUFA feeding resulted in higher postprandial EE as well as a higher thermic effect of feeding (TEF). Though the differences in the rate of fat oxidation did not reach significance between groups, there was an obvious trend that reflected the degree of fatty acid saturation. PUFA was the most thermogenic, SFA was the least thermogenic, and MUFA was somewhere in between. + +The same results were observed by DeLany et al. (2000), only this time different dietary fats containing labeled carbon isotopes are used [[106](https://pubmed.ncbi.nlm.nih.gov/11010930/)]. You can measure these isotopes in the breath in order to measure how much of the dietary fat a subject has consumed was burned in the time after a meal. + +![][image55] +[image55]: /blog/seedoils/image55.png + +Using this methodology, we see that there is one type of SFA that is preferentially oxidized over all other FAs that were tested, and that is lauric acid. However, lauric acid might have ketogenic properties, so interpret with caution. Looking over the rest of the tested FAs, we see that PUFA once again has the highest oxidation rate, followed by MUFA, and SFA once again comes in last place. + +Vegetable oils don't appear to make you fat. But even if they did, it does not appear that their effects on thermogenesis and EE are likely to be mediating factors. In fact, vegetable oils appear as though they could potentially have the opposite effect. + +###### **TYPE 2 DIABETES MELLITUS** + +The idea that vegetable oils are the primary driver of obesity and/or type 2 diabetes mellitus (T2DM) has deep roots in many diet communities. However, the evidence cited to support this assertion is typically animal research investigating the effects of LA on hypothalamic function and energy intake. Not to mention that, as we discussed earlier, altering the fatty acid saturation of the diet has no discernable effect on ad libitum energy intake. So, let's investigate the effects on insulin sensitivity. + +![][image56] +[image56]: /blog/seedoils/image56.png + +When the relationship between tissue LA and insulin sensitivity was investigated by Iggman et al. (2010), the results are null for leaner individuals. However for overweight individuals, adipose LA is associated with a statistically significant increase in insulin sensitivity [[107](https://pubmed.ncbi.nlm.nih.gov/20127308/)]. + +This study into T2DM incidence is the closest thing I've been able to find investigating the association between adipose tissue fatty acids and insulin sensitivity that also adjusts for the fewest mediators of T2DM, such as energy intake. + +Again, we can turn our attention to well-conducted crossover RCTs for clearer answers to these sorts of questions. Fortunately, we have one such trial by Heine et al. (1989), investigating the effects of altering fatty acid saturation on measures of insulin sensitivity and glucose homeostasis [[108](https://pubmed.ncbi.nlm.nih.gov/2923077/)]. Subjects were placed on either a high-LA diet (10.9% of energy) or a low-LA diet (4.2% of energy) for 30 weeks, after which measures of plasma insulin and glucose clearance were taken. + +![][image57] +[image57]: /blog/seedoils/image57.png + +While there were no statistically significant differences between groups in most ways, the high-LA group has a significantly higher glucose clearance rate during the first infusion test. Overall, there was an obvious trend toward a benefit with the high-LA diet. + +Another trial by Zibaeenezhad et al. (2016) compared 15g of walnut oil (containing approximately 8g of LA) to no intervention, and measured a number of endpoints relevant to T2DM [[109](https://pubmed.ncbi.nlm.nih.gov/28115966/)]. Presumably, randomization balanced baseline LA between groups, so we can assume that the trial is effectively testing the effects of adding a tablespoon of walnut oil to the diet. + +![][image58] +[image58]: /blog/seedoils/image58.png + +By the end of the trial, the walnut oil diet improved both HbA1C and fasting blood glucose. There were also no statistically significant changes in body weight or BMI. Which suggests that these effects were independent of weight loss. This is not what we'd expect if the vegetable oils were increasing the risk of developing T2DM. + +We also have at least one study by Pertiwi et al. (2020) investigating the relationship between LA and both glycemic control and liver function [[110](https://pubmed.ncbi.nlm.nih.gov/32546275/)]. LA seems to have no association with glycemic control, and is associated with better liver function in the minimally adjusted model. The association is then null in model 2, which adjusts for a few T2D mediators. Lastly, after a better adjustment for diet quality, many of the associations gain significance again. + +There are a few more studies that do not adjust for many T2D mediators. In this study by Kröger et al. (2011), the relationship between red blood cell LA and T2D incidence in the EPIC-Potsdam cohort was investigated [[111](https://pubmed.ncbi.nlm.nih.gov/20980488/)]. We see that the minimally adjusted model (which did not adjust for any T2D mediators) shows a statistically significant reduction in the risk of T2D. Whereas in the fully adjusted model the association is null, as we would expect. However, the trend toward a benefit of LA reached statistical significance. + +Ultimately, it appears that neither LA biomarkers nor intake associate with negative outcomes with regards to insulin sensitivity, obesity, T2D, or liver function. These results are pretty consistent with existing meta-analyses on this question (which I combed through to find minimally adjusted data) [[112](https://pubmed.ncbi.nlm.nih.gov/29032079/)]. + +![][image59] +[image59]: /blog/seedoils/image59.png + +These are not at all the results that we would expect to see if merely having more LA in either your body or your diet increased the risk of T2DM. Although, there are some who would claim that associations between LA biomarkers and diseases are unreliable. + +Essentially, the idea is that LA can oxidize for various reasons and potentially skew the biomarker in different directions. For example, if higher tissue representation of LA is inversely associated with a disease, but the disease itself predisposes LA to oxidation (and thus creates the potential for the LA biomarker to appear artificially lower), the data could be confounded. However, there is fascinating data that would seem to contradict this [[113](https://pubmed.ncbi.nlm.nih.gov/30987358/)]. + +![][image60] +[image60]: /blog/seedoils/image60.png + +In analysis of a prospective cohort study by Yepes-Calderón et al. (2019), levels of the LA peroxidation products, malondialdehyde (MDA), was strongly and inversely associated with new onset T2DM after kidney transplant. Even after applying seven different multivariate adjustment models, no adjustment succeeded in nullifying the effect. + +Perhaps the reason LA is inversely associated with T2DM is _because_ it undergoes peroxidation. Perhaps MDA is a signaling molecule that has some protective benefit for T2DM in the long run, despite lipid peroxidation sounding very bad and spooky. Who knows. I don't feel particularly bad for speculating. Many of my opponents in this debate often base entire positions almost entirely on speculation, and refer to much weaker evidence to boot. + +Lastly, in a multinational MR study of almost a million participants by Chen et al. (2017), there was an inverse association between elevated plasma LA levels and incidence of T2DM [[114](https://pubmed.ncbi.nlm.nih.gov/28032469/)]. + +![][image61] +[image61]: /blog/seedoils/image61.png + +Once again, we see the same thing that we saw in the MR studies investigating CVD. Genetically higher plasma LA is inversely associated with lower fasting blood glucose and T2DM incidence, whereas genetically higher plasma AA is positively associated with both higher fasting blood glucose and T2DM incidence. We also see in their subgroup analysis that the conversion of LA to AA through FADS is once again mediating. + +![][image62] +[image62]: /blog/seedoils/image62.png + +When excluding gene variants affecting the function of FADS, the association between genetically elevated plasma LA and T2DM is null. However, when FADS gene variants are considered, the association is statistically significant. This once again suggests a causal relationship between the conversion of LA to AA and disease incidence. Strangely, long chain omega-3s are positively associated as well, which is in contrast to the RCT data on the subject [[115](https://pubmed.ncbi.nlm.nih.gov/31434641/)]. + +Overall it would appear that higher intakes of LA are inversely associated with T2DM. In conclusion, LA does not appear to negatively affect body weight, ad libitum intake, EE, insulin sensitivity, or T2DM rates in humans. The current evidence does not support lowering vegetable oil intake for the purposes of preventing T2DM, and the evidence may even suggest that vegetable oils may play a role in T2DM prevention. + +# **FATTY LIVER DISEASES** + +###### **FAT OVERLOAD SYNDROME** + +Increased intakes of LA have been proposed by Santoro et al. (2013) as a mechanism by which non-alcoholic fatty liver disease (NALFD) may occur [[116](https://pubmed.ncbi.nlm.nih.gov/26405460/)]. The most direct evidence cited in support of this hypothesis comes from parenteral feeding studies. Typically these studies divulge that soybean oil (SO) based intravenous lipid emulsions (IVLE) have a tendency to produce a particular liver pathology called cholestasis in children on total parenteral nutrition (TPN) under certain conditions [[117](https://pubmed.ncbi.nlm.nih.gov/23520135/)]. On the other hand, Gura and Puder (2010) discovered that fish oil (FO) based IVLEs tend to prevent and/or abolish cholestasis during parenteral feeding [[118](https://pubmed.ncbi.nlm.nih.gov/20702846/)]. + +However, within this body of literature, the primary hypothesis that has been put forth to explain the cholestasis observed with SO-IVLEs implicates phytosterols as the primary driver [[119](https://pubmed.ncbi.nlm.nih.gov/26374182/)][[120](https://pubmed.ncbi.nlm.nih.gov/9437703/)]. Overall the evidence does not seem to strongly support LA as uniquely pathological in this regard, and most authors seem to reject this hypothesis. + +Because it would be unethical to truly test the effects of IVLE overfeeding in humans, we have to rely on animal models to provide us with insights. In one well-designed mouse study by Ksami et al. (2013), both SO- and FO-IVLEs were fed to mice with intestinal injuries [[121](https://pubmed.ncbi.nlm.nih.gov/24107776/)]. Except there were additional groups that were fed FO-IVLEs that also contained SO-derived phytosterols. Markers of liver pathology were comparable between phytosterol-containing FO-IVLEs and controls fed SO-IVLEs. + +![][image63] +[image63]: /blog/seedoils/image63.png + +When tested in humans at matched, eucaloric dosages, there are no clinically meaningful differences between SO-IVLEs and FO-IVLEs [[122](https://pubmed.ncbi.nlm.nih.gov/23770843/)][[123](https://pubmed.ncbi.nlm.nih.gov/22796064/)]. Across all of the markers investigated by Nehra et al. (2014), the only significant changes were increases in alkaline phosphatase, but they occurred in both groups. + +Since FO-IVLEs are extremely low in LA, it is unlikely that LA is the mediator of this change. Despite the fact that dosages were titrated down to tolerable levels, such to be compliant with current standards of care for IVLEs, tissue LA increased significantly in subjects receiving SO-IVLEs. + +To recap, the fatty liver observed in children receiving IVLEs while on TNP is likely a function of the direct intravenous administration of phytosterols, and it is unlikely that LA has any unique role to play here. + +###### **NON-ALCOHOLIC FATTY LIVER DISEASE** + +Outside of parenteral feeding, Van Name et al. (2020) has conducted a single-arm, non-randomized, unblinded trial involving 20 youths testing the effects of a low omega-6/omega-3 ratio (O6:O3) diet over 12 weeks [[124](https://pubmed.ncbi.nlm.nih.gov/32652034/)]. Aside from the obvious limitations of such a study, we'll give credit where it is due. The study overcame a significant hurdle that plagues literature of this sort. The subjects were kept largely weight stable during the 12 weeks, which is a success. However, despite this, they saw improvements in lipid peroxidation markers and insulin sensitivity with the low O6:O3 diet. + +There is just a tiny little problem, though. They actually weren't testing the effects of a low-LA diet, specifically. They were testing the effects of modifying the ratio of total omega-6 to total omega-3. They specifically achieved the lower O6:O3 by adding sources of omega-3, rather than omitting sources of omega-6. Information about the specific dietary changes can be found in their supplement [[125](https://www.ncbi.nlm.nih.gov/labs/pmc/articles/PMC7467848/bin/nxaa183_supplemental_files.zip)]. + +Ultimately, they likely did not significantly alter the LA content of the diet itself, as evidenced by the fact that tissue LA went largely unchanged throughout the duration of the trial. + +![][image64] +[image64]: /blog/seedoils/image64.png + +Fortunately, we do have better, more direct experiments investigating the effects of dietary fatty acid composition and fatty acid saturation on measures of liver fat in humans [[126](https://pubmed.ncbi.nlm.nih.gov/22492369/)]. First is an isocaloric feeding study by Bjermo et al. (2012) that largely found non-inferiority between LA and SFA on measures of visceral adipose tissue (VAT). However, the high-LA diet resulted in a greater overall improvement in the subjects' metabolic profile. + +The high-LA diet did result in lower waist circumference, PCSK9, cholesterol, serum insulin, and ALT, though it did not necessarily result in a difference in VAT compared to the high-SFA diet. The results are slightly different when looking at human overfeeding [[127](https://pubmed.ncbi.nlm.nih.gov/24550191/)]. In this trial by Rosqvist et al. (2014), which compared hypercaloric diets that were either high-LA or high-SFA, the high-LA diet did appear to be protective against VAT accumulation. + +![][image65] +[image65]: /blog/seedoils/image65.png + +The high-LA diet seemed to be uniquely protective against liver fat accumulation in particular. Additionally, the high-LA diet seemed to be associated with a greater increase in lean body mass (LBM) when compared to the high-SFA diet. But not only that, the high-LA diet seemed more resistant to fat gain overall compared to the high-SFA diet. These are not the results we'd expect if LA was uniquely causal in NAFLD. + +These human experimental finding are perfectly consistent with the observational evidence on the subject as well, which typically shows that either high-PUFA or high-LA diets protect against NAFLD at the population level as well [[128](https://pubmed.ncbi.nlm.nih.gov/22209679/)][[129](https://pubmed.ncbi.nlm.nih.gov/27618908/)]. + +![][image66] +[image66]: /blog/seedoils/image66.png + +Overall there is an inverse association between high-PUFA intake and measures of hepatic lipid concentrations. There is, however, an association between high-SFA diets, just like the experimental literature. There is also evidence from Wehmeyer et al. (2016) that suggests that the effect of total energy intake on NAFLD is greater than either high-PUFA or high-SFA diets [[130](https://pubmed.ncbi.nlm.nih.gov/27281105/)]. Regardless, there does not appear to be any clear or persuasive evidence that LA is uniquely causal of NAFLD. + +# **AUTOIMMUNE DISEASE** + +###### **RHEUMATOID ARTHRITIS** + +If you've spent any amount of time in any low carb or vegan diet community or blogosphere, you've undoubtedly heard someone claim that cutting out vegetable oils "cured" their rheumatoid arthritis (RA). It's a pervasive belief that these oils cause inflammatory pain, and may even be one of the primary causes of age-related inflammatory conditions, such as RA. Luckily, there is a boatload of literature on this. Even experimental literature. So, let's see what it says. + +There is an analysis of the Epidemiological Investigation of Rheumatoid Arthritis cohort by Lourdudoss et al. (2018) that investigated the relationship between dietary fatty acids and RA pain [[131](https://pubmed.ncbi.nlm.nih.gov/28371257/)]. As per the recurring theme throughout much of the dietary fat literature, a high O6:O3 ratio is associated with an increased risk of both unacceptable pain and refractory pain (RR 1.70 [1.03-2.82] and 2.33 [1.28-4.24], respectively. + +![][image67] +[image67]: /blog/seedoils/image67.png + +However, if we look at omega-3 we see that there is a statistically significant decrease in both unacceptable pain and refractory pain (RR 0.57 [0.35-0.95] and 0.47 [0.26-0.84], respectively). Whereas for omega-6, results for all three endpoints are null. If we do a little math (1/0.54 and 1/0.47), we see that the risk increase when going from the highest to lowest intakes of omega-3 for both unacceptable pain and refractory pain are pretty much the same as the risk ratios for the lowest to highest O6:O3 ratio. Which are 1.75 and 2.12, respectively. + +When considered together, this likely means that the effect of a high O6:O3 ratio has more to do with insufficient omega-3 than it has to do with excessive omega-6, which is consistent with the experimental literature on the subject [[132](https://pubmed.ncbi.nlm.nih.gov/29017507/)][[133](https://pubmed.ncbi.nlm.nih.gov/28067815/)]. However, these results are not consistent across all measures of RA, such as bone marrow lesions in those without RA at baseline [[134](https://pubmed.ncbi.nlm.nih.gov/19426478/)]. + +![][image68] +[image68]: /blog/seedoils/image68.png + +In an analysis of this Australian cohort by Wang et al. (2009), neither omega-3, omega-6, nor the O6:O3 ratio had a statistically significant effect on the incidence of bone marrow lesions. However, intakes of saturated fat were associated with a statistically significant increase in risk in both multivariate models (RR 2.62 [1.11-6.17] and 2.56 [1.03-6.37], respectively). + +As far as experimental evidence goes, the effects of all sorts of high-LA oils on RA-related endpoints have been investigated over the years. First we have 3-10.5g/day of blackcurrant seed oil (BCSO) [[135](https://pubmed.ncbi.nlm.nih.gov/8081671/)][[136](https://pubmed.ncbi.nlm.nih.gov/1397534/)]. BCSO has an LA content in excess of 40% by weight [[137](https://pubmed.ncbi.nlm.nih.gov/23341215/)]. Though most of these findings were null, there is one trial by Watson et al. (1993) that did have interesting results [[138](https://pubmed.ncbi.nlm.nih.gov/8252313/)]. + +Patients with RA were divided into two groups that received either 3g of BCSO or 3g of SO, and were compared to two healthy control groups consuming the same oils at the same dosages. The BCSO group, including both healthy subjects as well as those with RA saw a statistically significant decrease in tumor necrosis factor (TNF), whereas the SU group didn't. + +What's interesting about this study isn't really the BCSO group's results, if you're someone who thinks that vegetable oils increase the risk of RA. The group receiving SU saw no significant changes in their inflammatory markers in neither the RA patients nor the healthy controls, which is not what we'd expect if LA exposure is driving RA. + +Next up is evening primrose oil (EPO), which contains approximately 72% LA by weight [[139](https://pubmed.ncbi.nlm.nih.gov/30110920/)]. This oil has been tested at least twice in RA patients and consistently shows promising results for multiple endpoints. In a trial by Brzeski et al. (1991) using 6/day of EPO versus 6g/day of OO, there was a statistically significant reduction in morning stiffness and a non-significant reduction in articular index (a measure of flexibility) in the EPO group [[140](https://pubmed.ncbi.nlm.nih.gov/1913008/)]. However, the OO group saw statistically significant reductions in pain and articular index, but not morning stiffness. Suggesting potential complementary effects of both of these oils. + +However, EPO trials using this design have been criticized by Horrobin (1989) for having a number of potential methodological errors [[141](https://pubmed.ncbi.nlm.nih.gov/2688567/)]. In another trial by Belch et al. (1988) using more robust methodology and more complex comparisons, EPO seems to do quite well in moderate doses [[142](https://pubmed.ncbi.nlm.nih.gov/2833184/)]. In this trial, 49 subjects with RA, managed with nonsteroidal anti-inflammatory drugs (NSAID), were randomized to three groups. One group had 12g/day of EPO, another group received 12g/day of EPO+FO, and the final group was placed on a placebo. + +![][image69] +[image69]: /blog/seedoils/image69.png + +While EPO alone resulted in significant reduction in the use of NSAIDs, the largest reductions in NSAID usage was seen when EPO was paired with FO. Not only does this detract from the notion that LA increases RA, this also lends further credibility to the beneficial effects of increasing dietary omega-3. + +However, the double blind RCT conducted by Volker et al. (2000) would seem to contradict this finding [[143](https://pubmed.ncbi.nlm.nih.gov/11036827/)]. In this trial, it is claimed that FO may improve symptoms as long as the background diet is low in omega-6. However, it is unclear if these results are actually compared to a high omega-6 diet, or if all of the study subjects were on low omega-6 diets. These results seem odd, as there are plenty of studies using high omega-6 oils that show positive results [[144](https://pubmed.ncbi.nlm.nih.gov/28699499/)][[145](https://pubmed.ncbi.nlm.nih.gov/12548113/)][[146](https://pubmed.ncbi.nlm.nih.gov/29705470/)]. + +Bear in mind that most of these trials discussed in this section were small in size and relatively short in duration, and are plagued by a number of challenges that are common in nutrient supplement studies. However, one thing that seems clear is that omega-6 is not associated with the development of RA, nor is it associated with worsening RA symptoms. In clinical trials, high omega-6 oils do not uniquely increase the prevalence of RA symptoms, and may even be useful for RA management. + +Some would like to attribute the benefits of these oils to their gamma-linolenic acid (GLA) content. Which may be true, seeing as though pure SO didn't seem to do anything to inflammatory markers and serves as a decent control in this case. However, the primary sources of GLA in the diet are CAO, SO, and margarine. As such, attributing the anti-inflammatory effect of EPO to GLA seems tantamount to suggesting that the aforementioned commodity oils are also anti-inflammatory. In fact, some of them have less LA than EPO. Personally, I think it is likely that the effect is conferred via GLA, but I also don't think this evidence suggests that LA is uniquely inflammatory, either. + +Seeing as though high-LA SO was not uniquely pro-inflammatory in healthy subjects, it seems more and more unlikely that LA itself confers an independent inflammatory effect. Rather, it seems likely that sources of GLA could be anti-inflammatory, and some of those sources are common commodity vegetable oils that are supposedly making everyone sick and inflamed. See the issue? + +###### **SYSTEMIC LUPUS ERYTHEMATOSUS** + +Very little is understood about how dietary inputs affect systemic lupus erythematosus (SLE). Especially regarding exposures as esoteric as LA, PUFA, or vegetable oils. However, there is some data on the subject, and it's a mess. The studies are mostly cross-sectional or case-control in design and largely show contradictory findings that are difficult to reconcile. + +The first study, by Gorczyca et al. (2021), is cross-sectional and exploratory in design, and found a significant correlation between serum LA and anti-nuclear antibody (ANA) [[147](https://pubmed.ncbi.nlm.nih.gov/34169789/)]. + +While ANA is an important part of the diagnostic criteria for SLE, I would take this correlation with a grain of salt. There was no assessment of baseline diet, and subjects were not followed prospectively and thus the study lacks the temporal component necessary to inform a causal inference. This is something the authors acknowledge. + +>_Another drawback is the assessment of PUFA profiles at a single time-point. A prospective analysis in this type of study would be more informative. Our findings suggest the need for a profound metabolomic analysis._ + +Not only that, but there was no multivariable adjustment to ascertain whether or not high serum LA was merely a correlate for other dietary habits that actually do increase risk. It's impossible to tell from this data alone. + +Puzzlingly, in stark contrast to these findings, other cross-sectional data seems to suggest that LA has either a neutral or beneficial effect on SLE, at least once people are diagnosed [[148](https://pubmed.ncbi.nlm.nih.gov/31074595/)][[149](https://pubmed.ncbi.nlm.nih.gov/26848399/)]. In the first paper by Charoenwoodhipong et al. (2020), it was observed that LA had no association with worsening SLE-related symptoms. + +![][image70] +[image70]: /blog/seedoils/image70.png + +As you can see in Figure 3, there is no consistent relationship between LA and SLE-related symptoms in either direction. However, a consistent trend toward favourable outcomes was observed with higher omega-3, and the inverse of which was observed with a high O6:O3. This suggests that while a high O6:O3 is a correlate for worse outcomes, it does not appear to be a function of LA, but rather a function of insufficient omega-3. This is a consistent trend in the literature so far. + +There is also evidence from Vordenbäumen et al. (2020) suggesting that among SLE patients, LA is associated with higher C-reactive protein (CRP), which is a marker of systemic inflammation [[150](https://pubmed.ncbi.nlm.nih.gov/32188303/)]. + +However, this correlation may be spurious considering that people diagnosed with SLE who maintain higher CRP are more likely to have poor dietary habits overall [[151](https://pubmed.ncbi.nlm.nih.gov/30282476/)]. Without multivariable adjustment to help control for some of these factors, it is again unclear if LA is merely acting as a correlate for a poor diet or if omega-3 is merely acting as a correlate for a good diet. + +Again, at the risk of sounding like a broken record, the inverse of this has been suggested in additional research by Lourdudoss et al. (2016) investigating the relationship between LA and the risk of increasing glucocorticoids [[152](https://pubmed.ncbi.nlm.nih.gov/26848399/)]. + +![][image71] +[image71]: /blog/seedoils/image71.png + +This is particularly odd since LA was associated with systemic inflammation in the previous study. Like I said in the beginning, the data is a mess. Nothing seems congruent, because most of it is either cross-sectional or completely uncontrolled or unadjusted. However, there are a few prospective studies investigating SLE and vegetable oil intake. + +First up is a study by Shin et al. (2017) involving 82 subjects which aimed to explore the differences in plasma fatty acids between those with SLE and those without [[153](https://pubmed.ncbi.nlm.nih.gov/30830319/)]. Ultimately, they discovered that plasma SFAs are more likely to be elevated in those with SLE, whereas plasma PUFA— particularly LA— was more likely to be reduced. + +![][image72] +[image72]: /blog/seedoils/image72.png + +At first glance, this may seem like a win for PUFA, or LA more specifically, but there are some interpretive challenges here. For example, PUFA concentrations in tissue could plausibly reduce in the presence of lipid peroxidation cascades, and there is evidence from Shah et al. (2014) that lipid peroxidation metabolites are higher in subjects with SLE [[154](https://pubmed.ncbi.nlm.nih.gov/24636579/)]. + +However, the authors remarked that antioxidant status plays an important role in the severity of lipid peroxidation when it does occur. It has been shown that antioxidant supplementation significantly reduces markers of lipid peroxidation in subjects with SLE [[155](https://pubmed.ncbi.nlm.nih.gov/17143589/)][[156](https://pubmed.ncbi.nlm.nih.gov/17143589/)]. It has also been shown by Bae et al. (2002) that antioxidant status can be impaired in subjects with SLE [[157](https://pubmed.ncbi.nlm.nih.gov/12426662/)]. + +The second prospective study, analyzed by Minami et al. (2003), is quite a bit larger than the previous studies, with a decent follow-up time [[158](https://pubmed.ncbi.nlm.nih.gov/12672194/)]. Basically, the relationship between dietary intakes and active SLE incidence were investigated over four years in 279 female participants with diagnosed SLE. Overall, there was no association between SLE activity and vegetable fat intake. + +However, echoing the sentiments toward antioxidants that have been discussed in some of the wider SLE literature, there was a statistically significant protective effect of vitamin C in reducing SLE activity. There were also non-significant risk reductions with fibre and vitamin A (but not retinol). To hammer this point home, Western dietary patterns are generally considered to be high in LA, but neither Western dietary patterns nor healthier dietary patterns associate either positively or negatively with SLE [[159](https://pubmed.ncbi.nlm.nih.gov/32936999/)][[160](https://pubmed.ncbi.nlm.nih.gov/31718449/)]. + +Much to my surprise, the relationship between both SLE and RA have been investigated using MR. In this MR study by Zhao and Schooling (2019), three different statistical tests across two gene variant subgroups were performed [[161](https://pubmed.ncbi.nlm.nih.gov/30409829/)]. + +![][image73] +[image73]: /blog/seedoils/image73.png + +Generally speaking, statistically significant inverse associations between genetically elevated plasma LA and both RA and SLE were consistently found. The only inconsistency was when the Egger MR or the MR PRESSO methods were applied. The application of the Egger MR method seemed to nullify the effect in all cases, and the application of the MR PRESSO method only seemed to nullify the effect for RA in the second subgroup analysis. + +Overall, the epidemiological data seems suggestive that antioxidant status likely matters more for SLE than PUFA or LA intakes, or even Western diets for that matter. However, the most robust evidence we have on the subject is the MR data, which suggests that genetically elevated plasma LA may even lower the risk of both SLE and RA. + +# **DEGENERATIVE DISEASES** + +###### **AGE-RELATED MACULAR DEGENERATION** + +Knobbe and Stojanoska (2017) have suggested that "harmful" vegetable oils such as oils derived from soybeans, corn, cottonseed, and rapeseed, are the primary culprits for age-related macular degeneration (AMD) [[162](https://pubmed.ncbi.nlm.nih.gov/29150284/)]. However, the data presented is purely ecological, and not very robust. One of the authors, Chris Knobbe, true to his name has published an entire book that details the pathophysiology of AMD, and cites a number of epidemiological studies to support his inferences [[163](https://www.amazon.ca/Ancestral-Dietary-Strategy-Prevent-Degeneration/dp/0578579545)]. + +When I checked his supporting references, I noticed that a number of prospective cohort studies were missing, and had seemed to be replaced with a hodgepodge of case-control studies. This was odd, because a number of cohort studies don't show the same results as the ones he cited. There are many prospective cohort studies (which are stronger evidence than case-control studies) that investigate the relationship between vegetable oils and AMD. + +So, as I do, I decided to gather all the data I could and compile a meta-analysis. + +**Inclusion Criteria:** + +- Prospective cohort studies investigating the relationship between either vegetable oils, PUFA, LA or TFA and early- or late-AMD. + + +**Results:** + +Altogether, 10 prospective cohort studies were included in the analysis. With respect to the exposures specified in the inclusion criteria, Delcourt et al. (2007) reported only on PUFA [[164](https://pubmed.ncbi.nlm.nih.gov/17299457/)]. Whereas Seddon et al. (2003) investigated both PUFA and vegetable fat [[165](https://pubmed.ncbi.nlm.nih.gov/14662593/)]. Chong et al. (2009), Chua et al. (2006), Cho et al. (2000), and Tan et al. (2009) all explored LA, PUFA, and TFA in their analyses [[166](https://pubmed.ncbi.nlm.nih.gov/19433719/)][[167](https://pubmed.ncbi.nlm.nih.gov/16832021/)][[168](https://pubmed.ncbi.nlm.nih.gov/11157315/)][[169](https://pubmed.ncbi.nlm.nih.gov/19433717/)]. Parekh et al. (2009) additionally included vegetable fat in their analysis, but did not investigate TFA [[170](https://pubmed.ncbi.nlm.nih.gov/19901214/)]. Similarly, Sasaki et al. (2020) reported on LA and PUFA, but did not report on TFA or vegetable fat [[171](https://pubmed.ncbi.nlm.nih.gov/32181798/)]. Both Christen et al. (2011) and Mares-Perlman et al. (1995) studied associations pertaining to both LA and PUFA [[172](https://pubmed.ncbi.nlm.nih.gov/21402976/)][[173](https://pubmed.ncbi.nlm.nih.gov/7786215/)]. There was significant heterogeneity across all investigated exposures, and no single exposure reached statistical significance. + +![][image74] +[image74]: /blog/seedoils/image74.png + +Among the studies with the longest follow-up time, largest cohort size, best adjustment models, and the widest exposure contrasts, the results tended to be null. For example, Chong et al. (2009) adjusted for lutein, zeaxanthin, and sources of omega-3, which are inversely associated with late AMD [[174](https://pubmed.ncbi.nlm.nih.gov/21899805/)][[175](https://pubmed.ncbi.nlm.nih.gov/18541848/)]. Their results were null for every exposure. + +The strongest study of all was Christen et al. (2011). Their analysis included three different adjustment models that help us better ascertain the relationship between AMD and vegetable oils. For example, their analysis showed that LA was associated with AMD only before adjustment for AMD risk factors, and that the association was likely a function of insufficient omega-3. + +>_Women in the highest tertile of LA intake, relative to the lowest, had an age- and treatment-adjusted RR of 1.41 (95% CI, 1.03-1.94; P for trend=.03). However, the RR was attenuated and no longer significant after additional adjustment for AMD risk factors and other fats. The ratio of -6 to -3 fatty acids was directly associated with the risk of AMD, and the association was strengthened when the denominator term for-3 fatty acids included only DHA and EPA (Table 2)._ + +Essentially, vegetable oils may be acting as a correlate for poor diet quality overall. The vegetable oils themselves are not independently increasing risk, but they tend to associate with dietary patterns that lack characteristics that decrease risk. Diets that are high in vegetable oils tend to be low in carotenoids and omega-3, for example. After adjusting for those confounders, the association vanishes. + +There is also MR data from Wang et al. (2021) investigating the relationship between genetically elevated LA biomarkers and AMD [[176](https://pubmed.ncbi.nlm.nih.gov/33982092/)]. In this multinational MR study of 8631 participants they applied three different statistical tests across two subgroups investigating different combinations of gene variants. + +In the aggregate, genetically increased plasma LA was consistently associated with a reduced risk of AMD, regardless of the test or gene variant subgrouping. Interestingly enough, tissue AA was actually positively associated with AMD, like we saw earlier with the previously mentioned MR research. + +Altogether, prospective cohort studies investigating the relationship between LA and AMD show a null association. However, more robust evidence from MR suggests that higher plasma LA might actually protect against AMD in the long run. The current evidence does not support lowering vegetable oil intake for AMD prophylaxis, and may actually suggest that increasing vegetable oil intake could have benefits. + +###### **COGNITIVE DECLINE** + +I almost forgot to investigate the relationship between vegetable oils and cognitive disorders like dementia and Alzheimer's disease. It must be all of these vegetable oils in my diet that are clouding my memory. Fortunately, after eating two coconuts and half a beehive, I'm as sharp as a tack and ready to dive into it. + +I'm not sure what sort of mechanistic speculation buttresses the narrative that vegetable oils make one demented, but seeing as though this is a popular claim that is made by many vegetable oil skeptics, the question seemed worthwhile to investigate nonetheless. So let's dive in. + +**Inclusion Criteria:** + +- Prospective cohort studies or RCTs investigating the relationship between vegetable oils, PUFA, or LA and either cognitive decline and/or dementia and/or Alzheimer's disease. + +- Exposure can be measured either by biomarkers or by assessment of dietary intake. + +- In the case of cognitive decline, composite endpoints such as global cognition scores, rather than verbal memory scores in particular, will be favoured. + + +**Exclusion Criteria:** + +- Trials that compare PUFA to other forms of PUFA (such as omega-3 supplements versus a high-LA placebo) will be excluded. + + +**Results:** + +Altogether 43 studies were obtained from a PubMed and Google Scholar literature search. All but 15 prospective cohort studies were excluded due to either having irrelevant endpoints or insufficient specificity with regards to vegetable oil related exposures. No RCTs were found. Of the 15 studies, four were included in an analysis on Alzheimer's disease [[177](https://pubmed.ncbi.nlm.nih.gov/16710090/)[[178](https://pubmed.ncbi.nlm.nih.gov/12580703/)][[179](https://pubmed.ncbi.nlm.nih.gov/12164721/)][180](https://pubmed.ncbi.nlm.nih.gov/22713770/)]. Whereas the remainder were included in an analysis of general dementia, which included global cognitive decline. The majority of the included studies reported on both dietary LA and dietary PUFA [[181](https://pubmed.ncbi.nlm.nih.gov/17413112/)[[182](https://pubmed.ncbi.nlm.nih.gov/20001761/)][[183](https://pubmed.ncbi.nlm.nih.gov/8982020/)][[184](https://pubmed.ncbi.nlm.nih.gov/34392373/)][[185](https://pubmed.ncbi.nlm.nih.gov/33386799/)]. However, both Heude et al. (2003) and Samieri et al. (2008) used biomarker LA and PUFA in their analysis, rather than dietary intake [[186](https://pubmed.ncbi.nlm.nih.gov/12663275/)][[187](https://pubmed.ncbi.nlm.nih.gov/18779288/)]. Dietary PUFA, rather than dietary LA or vegetable fat, was investigated by Okereke et al. (2012), Roberts et al. (2012), and Solfrizzi et al. (2006) [[188](https://pubmed.ncbi.nlm.nih.gov/22605573/)][[189](https://pubmed.ncbi.nlm.nih.gov/16697546/)][[190](https://pubmed.ncbi.nlm.nih.gov/22810099/)]. Lastly, only Laitinen et al. (2006) explored the association between vegetable fat and cognitive decline [[191](https://pubmed.ncbi.nlm.nih.gov/16710090/)]. + +**Alzheimer's Disease:** + +![][image75] +[image75]: /blog/seedoils/image75.png + +For Alzheimer's disease, results across all exposures were null. However, there were not many studies per subgroup. When the subgrouping is removed the results still don't reach statistical significance (RR 0.74 [0.43-1.26], P=0.26). There is also decently high heterogeneity between the included studies. For example, Rönnemaa et al. (2012), saw a non-significant increase in Alzheimer's risk with increasing LA intake, but Morris saw a statistically significant decrease in Alzheimer's risk with increasing vegetable oil intake. + +The adjustment model used by Rönnemaa et al. (2012) includes no adjustments for dietary covariates. As a consequence, it would be dubious to infer that we're observing an independent effect of LA, as LA might simply be a correlate for a different, undisclosed dietary exposure that is actually increasing risk. It is unknown. However, Morris et al. (2003) found an opposite, statistically significant effect of vegetable fats and did include some adjustments for diet quality. + +Included in the fully adjusted model were adjustments for other dietary fatty acids. Among these findings, only two were statistically significant. The first is a statistically significant decrease in the risk of Alzheimer's disease with vegetable fats after an adjustment for other fatty acids. The other is a statistically significant increase in the risk of Alzheimer's disease with TFA, after an adjustment for other fatty acids. + +Given that the two datasets that were investigated in these two studies were primarily including data that was collected during the 90s, before the TFA ban, it's possible that the increase in Alzheimer's risk with LA in Rönnemaa et al. (2012) is a consequence of confounding from TFA in many vegetable oil products. + +**Dementia:** + +![][image76] +[image76]: /blog/seedoils/image76.png + +Again, we see null findings across all of the investigated exposures. The only statistically significant study, Beydoun et al. (2007), found a 23% reduction in the risk of cognitive decline (RR 0.77 [0.65-0.91], P=0.002). What sets this study apart from most of the others was its robust multivariate adjustment model. In fact, the adjustment model was so comprehensive, it was given its own section in the paper. + +In fairness, Okereke et al. (2012), found a non-significant increase in cognitive decline with increasing PUFA intake, and also had a reasonably good multivariate adjustment model. The multivariate adjustment model included TFA as a covariate, and even considered a number of micronutrients and comorbidities. + +However, the cohort study had half as much follow-up time and used different methods for assessing cognitive function. Beydoun et al. (2007) used in-person interviewers to assess cognitive function, whereas Okereke et al. (2012) used telephone interviews to assess cognitive impairment. Though this might not matter very much [[192](https://pubmed.ncbi.nlm.nih.gov/29042492/)]. Regardless, their findings were null and the aggregated results of this meta-analysis are also null. + +**Total Dementia:** + +![][image77] +[image77]: /blog/seedoils/image77.png + +Results are slightly different when Alzheimer's disease, cognitive decline, and general dementia are all considered together, however. It is noteworthy to point out that when all of the studies are aggregated, vegetable fat associates with a statistically significant 58% reduction in total dementia (RR 0.42 [0.21-0.84], P=0.01). Though, to be clear, more than two thirds of the weight are derived from a single study, so interpret with caution. + +In conclusion, it does not appear as though LA, PUFA, or vegetable fat are associated with an increased risk of Alzheimer's disease, cognitive decline, or dementia in humans. These results are consistent with previous meta-analyses by Cao et al. (2019) and Ruan et al. (2018) investigating these particular relationships [[193](https://pubmed.ncbi.nlm.nih.gov/31062836/)][[194](https://pubmed.ncbi.nlm.nih.gov/29701155/)]. However, when all endpoints are considered together, vegetable fat seems to be associated with a reduced risk of total dementia. + +# **MECHANISTIC AUTOFELLATIO** + +###### **INFLAMMATION** + +The notion that modern culinary oils containing high amounts of PUFA, particularly LA, are inflammatory is an idea that has managed to permeate virtually every diet camp imaginable. The paleo/ancestral nuts believe it. The vegan/plant-based nuts believe it. The keto/carnivore nuts believe it. Zealots belonging to Ray Peat's diet cult definitely believe it too. But is there actually evidence for this claim from human experiments? + +I scoured the literature for as many LA substitution trials as I could find. Altogether I found 15 trials that used high-LA oils as either the intervention or the control, with CRP as a primary or secondary endpoint. From those 15 trials, I had to exclude ten of them. + +**Inclusion Criteria:** + +1. Design must be a RCT. + +2. High-LA diet must have >20g/day of LA. + +3. Both pre- and post-intervention CRP must be reported. + + +**Exclusion Criteria:** + +1. High-LA diet must not be compared to other PUFA or other types of LA. + +2. Low-LA diet must not have >10g/day of LA. + + +Four studies met the inclusion criteria and were included in the analysis [[195](https://pubmed.ncbi.nlm.nih.gov/11246548/)][[196](https://pubmed.ncbi.nlm.nih.gov/15168040/)][[197](https://pubmed.ncbi.nlm.nih.gov/26016869/)][[198](https://pubmed.ncbi.nlm.nih.gov/25319187/)]. The LA intakes in the high-LA diets ranged from 22.2g/day with Vafeiadou et al. (2015) to 50.8g/day with Junker et al. (2001), with an average of 33.5g/day, across all included studies. The LA intakes in the low-LA diets ranged from 4.8g/day with Iggman et al. (2014) to 7.8g/day with Junker et al. (2001), with an average of 6.4g/day, across all included studies. The average contrast in LA intake was 27g/day across all included studies. + +![][image78] +[image78]: /blog/seedoils/image78.png + +There were 12 studies that were captured by the exclusion criteria and had to be excluded from the analysis. + +![][image79] +[image79]: /blog/seedoils/image79.png + +**Results:** + +![][image80] +[image80]: /blog/seedoils/image80.png + +Altogether, high-LA diets yielded a non-significant increase in CRP when compared to control (P=0.15). The results are ultimately null. However, it may still be possible that the true effect of LA on CRP is hidden. It's plausible that high-LA diets do increase CRP, but they don't tend to increase CRP much more than control. + +![][image81] +[image81]: /blog/seedoils/image81.png + +When the effects of high-LA diets are compared to baseline, the results are almost squarely null (P=0.62). Even Junker, 2001, which saw the widest contrast in LA intake ultimately had a null result. But, we're not out of the woods yet. There are still other possibilities to consider. What if the subjects' usual diets are already high in LA that dosing more in an intervention trial doesn't actually do anything to CRP? Perhaps the comparator diets could still prove to be anti-inflammatory in some way. + +![][image82] +[image82]: /blog/seedoils/image82.png + +Comparing the effects of low-LA diets to baseline yielded a non-significant decrease in CRP (P=0.21). Again, the results are ultimately null. So, at present it does not appear as though low-LA diets are terribly protective compared to high-LA diets on measures of CRP. + +But there is one last thing to discuss. Junker et al. (2001), saw the widest contrast in LA intake and was also the only study to show a statistically significant increase in CRP when comparing a high-LA diet to a low-LA diet. However, this effect likely isn't accurate. Let me explain. + +>_For all parameters, mean and standard deviation (SD) or median and range (if non-normally distributed) were calculated. Intragroup differences between week 4 and week 0 were compared using the Mann-Whitney-Wilcoxon test (non-normally distributed variables) or the t-test for unpaired samples (if normally distributed), whereas intergroup differences at week 0 and at week 4 were compared using the Mann-Whitney-U test (non-normally distributed variables) or the t-test (normally distributed variables)._ + +As described in the Statistical Analyses section, the Mann-Whitney-Wilcoxon test was used to test for statistical significance when distributions were non-normal. This test is specifically designed for non-normal distributions, and applying this test is also best practice in this case. + +![][image83] +[image83]: /blog/seedoils/image83.png + +Here we see that CRP is actually reported as median and range, because the distributions of CRP were non-normal. We can also see that all three groups saw non-significant decreases in median CRP from baseline, falling from 0.9 (0.17-5.9) to 0.75 (0.17-7.7). However, the upper bounds for CRP during the starting week of the trial are unusually high in the OO group. This means that estimating the mean and standard deviation will actually yank the variance and the mean much higher than it rightfully should be. + +This gives the illusion that the drop in CRP in the OO group was much larger than it actually was, which in turn bloats the treatment effect seen when using estimated means and standard deviations [[199](https://pubmed.ncbi.nlm.nih.gov/15840177/)]. This also happened in the SU group. The range is much narrower at baseline than it was post-intervention, which pulled the variance and the mean toward showing an increase in CRP that didn't actually happen. In reality, the OO and SU groups saw a non-significant decrease in CRP. + +In conclusion, both high-LA and low-LA diets appear to have no particularly noteworthy effect on CRP, even when LA intakes are extremely high. The results of this meta-analysis suggest that avoiding high-LA diets on the basis of inflammation appears to be unwarranted. + +###### **LIPID PEROXIDATION** + +An unbelievable number of diet gurus, quacks, and ne'er-do-wells believe that PUFA found in vegetable oils are toxic to humans, especially at higher doses. To these clowns, PUFA are responsible for everything bad that could ever happen to the human body— doesn't matter if it's obesity, diabetes, heart disease, or limp dick. If you got it, PUFA caused it. + +"But why?", you might ask. Good question. The primary mechanism of action proposed by these lunatics is lipid peroxidation. PUFA are unique among fatty acids in that they have multiple double-bonds. The carbons between these double-bonds are uniquely vulnerable to oxidation. This essentially destroys the PUFA and creates a lot of byproducts— toxic byproducts to be fair. + +It is not at all disputed that PUFA behaves in this fashion. We know they do. They're fragile and they break apart really easily in isolation when exposed to different sorts of reactants, like oxygen. That is an indisputable fact. However, indisputable mechanisms don't necessarily translate into indisputable clinical relevance. + +To test this, I scoured the literature for any randomized controlled trials (RCT) that investigated the effects of different dietary fatty acids on measures of lipid peroxidation. The outcomes assessed were markers of lipid peroxidation, including 8-oxo-7,8-dihydro-20-deoxyguanosine (8-oxodG), glutathione reductase (GR), glutathione peroxidase (GPx), superoxide dismutase (SOD), conjugated dienes (CD), malondialdehyde (MDA), and catalase (CAT). + +**Inclusion Criteria:** + +1. RCT design. + +2. At least one of the chosen endpoints must be reported. + +3. Study design must be comparing high-PUFA to low-PUFA controls. + +4. Low-PUFA controls must replace PUFA with monounsaturated or saturated fat. + + +Altogether, five studies were included in the analysis. The vast majority of data was collected from Freese et al. (2008), which included data for 8-oxodG, GR, GPx, and CAT [[200](https://pubmed.ncbi.nlm.nih.gov/17671440/)]. Whereas Jenkinson et al. (1999) additionally investigated SOD and LO2 in their investigation [[201](https://pubmed.ncbi.nlm.nih.gov/10452406/)]. Exploration of MDA was contributed by both de Kok et al. (2003) and Södergren et al. (2001) [[202](https://pubmed.ncbi.nlm.nih.gov/12504167/)][[203](https://pubmed.ncbi.nlm.nih.gov/11641740/)]. Lastly, Parfitt et al. (1994) contributed data for CD [[204](https://pubmed.ncbi.nlm.nih.gov/8181259/)]. + +![][image84] +[image84]: /blog/seedoils/image84.png + +**Results:** + +Normally when I see a bunch of null results I feel like I may have wasted my time. However, these results make me giggle. The only significant finding was an effect of PUFA lowering 8-oxodG compared to baseline (P=0.02), however the results were null when compared to control (P=0.83). This means that both the high-PUFA and low-PUFA diets lowered this marker of lipid peroxidation. + +**8-oxo-7,8-dihydro-20-deoxyguanosine (8-oxodG) vs Control** + +![][image85] +[image85]: /blog/seedoils/image85.png + +**8-oxo-7,8-dihydro-20-deoxyguanosine (8-oxodG) vs Baseline** + +![][image86] +[image86]: /blog/seedoils/image86.png + +**Glutathione Reductase (GR) vs Control** + +![][image87] +[image87]: /blog/seedoils/image87.png + +**Glutathione Reductase (GR) vs Baseline** + +![][image88] +[image88]: /blog/seedoils/image88.png + +**Glutathione Peroxidase (GPx) vs Control** + +![][image89] +[id]: /blog/seedoils/image89.png + +**Glutathione Peroxidase (GPx) vs Baseline** + +![][image90] +[image90]: /blog/seedoils/image90.png + +**Superoxide Dismutase (SOD) vs Control** + +![][image91] +[image91]: /blog/seedoils/image91.png + +**Superoxide Dismutase (SOD) vs Baseline** + +![][image92] +[image92]: /blog/seedoils/image92.png + +**Malondialdehyde (MDA) vs Control** + +![][image93] +[image93]: /blog/seedoils/image93.png + +**Malondialdehyde (MDA) vs Baseline** + +![][image94] +[image94]: /blog/seedoils/image94.png + +**Catalase (CAT) vs Control** + +![][image95] +[image95]: /blog/seedoils/image95.png + +**Catalase (CAT) vs Baseline** + +![][image96] +[image96]: /blog/seedoils/image96.png + +**Conjugated Dienes (CD) vs Control** + +![][image97] +[image97]: /blog/seedoils/image97.png + +**Conjugated Dienes (CD) vs Baseline** + +![][image98] +[image98]: /blog/seedoils/image98.png + +The only statistically significant finding was a reduction in 8-oxodG with high-PUFA diets (P=0.02). Which is interesting, because 8-oxodG is a marker of DNA damage, and as such its implications extend far beyond oxidative stress. I thought PUFA was supposed to destroy your DNA with all of those highly reactive, toxic byproducts they create when they oxidize? Well, apparently, like most mechanistic reasoning, that shit just doesn't pan out in the real world. + +In fact, even if we ignored the P-values and just looked at trends or directionality, the results would overwhelmingly favour high-PUFA diets over low-PUFA diets. Especially for MDA, which saw non-significant decreases for high-PUFA diets compared to baseline (P=0.11). + +In conclusion, mechanistic speculation regarding the toxic, in vivo effects of PUFA on lipid peroxidation in humans doesn't pan out in real life. PUFA does not seem to negatively affect markers of lipid peroxidation, and may even improve some of them. + +# DISCUSSION + +It may be true that vegetable oils are food items that represent a stark divergence from traditional dietary norms. However, it does not appear as though these oils are uniquely causal of the chronic diseases we face in the modern, industrialized world. In fact, vegetable oils likely have a beneficial role to play in the prevention of many diseases— particularly heart disease, type 2 diabetes mellitus, and potentially skin cancer. Vegetable oils could plausibly have a beneficial role to play in preventing degeneration of the macula, fatty liver disease, and perhaps some auto-immune diseases. + +This in-depth analysis could find no persuasive evidence of harm with vegetable oils for any of the investigated endpoints. Vegetable oils seemed to have no consistent effect on the risk of breast cancer, colorectal cancer, obesity, or cognitive decline. Though there are many proposed mechanisms by which vegetable oils have been suggested to be harmful to humans, the actual human outcome data does not seem to support the importance of these mechanisms for these endpoints. If the outcomes consistently contradict our mechanistic speculations, the mechanisms are probably not interacting with those outcomes in the way we suspect. + +In conclusion, vegetable oils appear to be a health-promoting addition to the diet, and seem to offer a range of health benefits and little to no apparent health risks to the general population. However, one should exercise caution when navigating the current food environment, as vegetable oils are included in many foods that are not particularly health-promoting. If one chooses to consume vegetable oils, it would probably be wise to integrate them into a healthy eating pattern in ways that do not promote the overconsumption of calories. Some possible healthy ways to include vegetable oils in the diet could be in the form of salad dressings or as cooking oils for sauteed vegetables. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "DiNicolantonio, James J., and James H. O’Keefe" + , year = "2018" + , title = "Omega-6 Vegetable Oils as a Driver of Coronary Heart Disease: The Oxidized Linoleic Acid Hypothesis" + , journal = "Open Heart" + , link = "https://doi.org/10.1136/openhrt-2018-000898" + } + , { author = "Mata, P., et al." + , year = "1996" + , title = "Effect of Dietary Fat Saturation on LDL Oxidation and Monocyte Adhesion to Human Endothelial Cells in Vitro" + , journal = "Arteriosclerosis, Thrombosis, and Vascular Biology" + , link = "https://doi.org/10.1161/01.atv.16.11.1347" + } + , { author = "Kratz, M., et al." + , year = "2002" + , title = "Effects of Dietary Fatty Acids on the Composition and Oxidizability of Low-Density Lipoprotein" + , journal = "European Journal of Clinical Nutrition" + , link = "https://doi.org/10.1038/sj.ejcn.1601288" + } + , { author = "Reaven, P. D., et al." + , year = "1994" + , title = "Effects of Linoleate-Enriched and Oleate-Enriched Diets in Combination with Alpha-Tocopherol on the Susceptibility of LDL and LDL Subfractions to Oxidative Modification in Humans" + , journal = "Arteriosclerosis and Thrombosis: A Journal of Vascular Biology" + , link = "https://doi.org/10.1161/01.atv.14.4.557" + } + , { author = "Esterbauer, H., et al." + , year = "1991" + , title = "Role of Vitamin E in Preventing the Oxidation of Low-Density Lipoprotein" + , journal = "The American Journal of Clinical Nutrition" + , link = "https://doi.org/10.1093/ajcn/53.1.314S" + } + , { author = "Esterbauer, H., et al." + , year = "1989" + , title = "Continuous Monitoring of in Vitro Oxidation of Human Low Density Lipoprotein" + , journal = "Free Radical Research Communications" + , link = "https://doi.org/10.3109/10715768909073429" + } + , { author = "Raederstorff, Daniel, et al." + , year = "2015" + , title = "Vitamin E Function and Requirements in Relation to PUFA" + , journal = "The British Journal of Nutrition" + , link = "https://doi.org/10.1017/S000711451500272X" + } + , { author = "Herting, D. C., and E. J. Drury" + , year = "1963" + , title = "VITAMIN E CONTENT OF VEGETABLE OILS AND FATS" + , journal = "The Journal of Nutrition" + , link = "https://doi.org/10.1093/jn/81.4.335" + } + , { author = "Marrugat, Jaume, et al." + , year = "2004" + , title = "Effects of Differing Phenolic Content in Dietary Olive Oils on Lipids and LDL Oxidation--a Randomized Controlled Trial" + , journal = "European Journal of Nutrition" + , link = "https://doi.org/10.1007/s00394-004-0452-8" + } + , { author = "Hernáez, Álvaro, et al." + , year = "2017" + , title = "The Mediterranean Diet Decreases LDL Atherogenicity in High Cardiovascular Risk Individuals: A Randomized Controlled Trial" + , journal = "Molecular Nutrition & Food Research" + , link = "https://doi.org/10.1002/mnfr.201601015" + } + , { author = "Fitó, Montserrat, et al." + , year = "2007" + , title = "Effect of a Traditional Mediterranean Diet on Lipoprotein Oxidation: A Randomized Controlled Trial" + , journal = "Archives of Internal Medicine" + , link = "https://doi.org/10.1001/archinte.167.11.1195" + } + , { author = "Aronis, Pantelis, et al." + , year = "2007" + , title = "Effect of Fast-Food Mediterranean-Type Diet on Human Plasma Oxidation" + , journal = "Journal of Medicinal Food" + , link = "https://doi.org/10.1089/jmf.2006.235" + } + , { author = "Kiokias, Sotirios, et al." + , year = "2018" + , title = "Effect of Natural Food Antioxidants against LDL and DNA Oxidative Changes" + , journal = "Antioxidants (Basel, Switzerland)" + , link = "https://doi.org/10.3390/antiox7100133" + } + , { author = "Palomäki, Ari, et al." + , year = "2010" + , title = "Effects of Dietary Cold-Pressed Turnip Rapeseed Oil and Butter on Serum Lipids, Oxidized LDL and Arterial Elasticity in Men with Metabolic Syndrome" + , journal = "Lipids in Health and Disease" + , link = "https://doi.org/10.1186/1476-511X-9-137" + } + , { author = "Oörni, K., et al." + , year = "1997" + , title = "Oxidation of Low Density Lipoprotein Particles Decreases Their Ability to Bind to Human Aortic Proteoglycans. Dependence on Oxidative Modification of the Lysine Residues" + , journal = "The Journal of Biological Chemistry" + , link = "https://doi.org/10.1074/jbc.272.34.21303" + } + , { author = "Wu, Tianying, et al." + , year = "2006" + , title = "Is Plasma Oxidized Low-Density Lipoprotein, Measured with the Widely Used Antibody 4E6, an Independent Predictor of Coronary Heart Disease among U.S. Men and Women?" + , journal = "Journal of the American College of Cardiology" + , link = "https://doi.org/10.1016/j.jacc.2006.03.057" + } + , { author = "van Tits, Lambertus J., et al." + , year = "2005" + , title = "Letter Regarding Article by Tsimikas et al, ‘High-Dose Atorvastatin Reduces Total Plasma Levels of Oxidized Phospholipids and Immune Complexes Present on Apolipoprotein B-100 in Patients With Acute Coronary Syndromes in the MIRACL Trial.’" + , journal = "Circulation" + , link = "https://doi.org/10.1161/01.CIR.0000164264.00913.6D" + } + , { author = "Mercodia" + , year = "2020" + , title = "Mercodia Oxidized LDL ELISA monoclonal antibody 4E6" + , journal = "Mercodia" + , link = "https://www.mercodia.com/product/oxidized-ldl-elisa/#:~:text=Mercodia%20Oxidized%20LDL%20ELISA%20is,epitope%20in%20oxidized%20ApoB%2D100.&text=Substituting%20aldehydes%20can%20be%20produced,the%20generation%20of%20oxidized%20LDL" + } + , { author = "Annika Carlsson and Jeanette" + , year = "2008" + , title = "Oxidized LDL - Know what you measure" + , journal = "3rd Joint Meeting of the French, German and Swiss Atherosclerosis Societies" + , link = "https://cms.mercodia.com/wp-content/uploads/2019/06/poster-oxldl-know-what-you-measure.pdf" + } + , { author = "Henriksen, T., et al." + , year = "1983" + , title = "Enhanced Macrophage Degradation of Biologically Modified Low Density Lipoprotein" + , journal = "Arteriosclerosis (Dallas, Tex.)" + , link = "https://doi.org/10.1161/01.atv.3.2.149" + } + , { author = "Meyer, Jason M., et al." + , year = "2014" + , title = "Minimally Oxidized LDL Inhibits Macrophage Selective Cholesteryl Ester Uptake and Native LDL-Induced Foam Cell Formation" + , journal = "Journal of Lipid Research" + , link = "https://doi.org/10.1194/jlr.M044644" + } + , { author = "Tsimikas, Sotirios, et al." + , year = "2006" + , title = "Oxidized Phospholipids Predict the Presence and Progression of Carotid and Femoral Atherosclerosis and Symptomatic Cardiovascular Disease: Five-Year Prospective Results from the Bruneck Study" + , journal = "Journal of the American College of Cardiology" + , link = "https://doi.org/10.1016/j.jacc.2006.03.001" + } + , { author = "Marklund, Matti, et al." + , year = "2019" + , title = "Biomarkers of Dietary Omega-6 Fatty Acids and Incident Cardiovascular Disease and Mortality" + , journal = "Circulation" + , link = "https://doi.org/10.1161/CIRCULATIONAHA.118.038908" + } + , { author = "Wood, D. A., et al." + , title = "Adipose tissue and platelet fatty acids and coronary heart disease in Scottish men" + , journal = "Lancet (London, England)" + , year = "1984" + , link = "https://doi.org/10.1016/s0140-6736(84)91044-4" + } + , { author = "Siri-Tarino, P. W., et al." + , title = "Meta-analysis of prospective cohort studies evaluating the association of saturated fat with cardiovascular disease" + , journal = "The American Journal of Clinical Nutrition" + , year = "2010" + , link = "https://doi.org/10.3945/ajcn.2009.27725" + } + , { author = "Harcombe, Z., et al." + , title = "Evidence from prospective cohort studies does not support current dietary fat guidelines: A systematic review and meta-analysis" + , journal = "British Journal of Sports Medicine" + , year = "2017" + , link = "https://doi.org/10.1136/bjsports-2016-096550" + } + , { author = "Zhu, Y., et al." + , title = "Dietary total fat, fatty acids intake, and risk of cardiovascular disease: A dose-response meta-analysis of cohort studies" + , journal = "Lipids in Health and Disease" + , year = "2019" + , link = "https://doi.org/10.1186/s12944-019-1035-2" + } + , { author = "Mazidi, M., et al." + , title = "Association of types of dietary fats and all-cause and cause-specific mortality: A prospective cohort study and meta-analysis of prospective studies with 1,164,029 participants" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2020" + , link = "https://doi.org/10.1016/j.clnu.2020.03.028" + } + , { author = "Skeaff, C. M., & Miller, J." + , title = "Dietary fat and coronary heart disease: Summary of evidence from prospective cohort and randomised controlled trials" + , journal = "Annals of Nutrition & Metabolism" + , year = "2009" + , link = "https://doi.org/10.1159/000229002" + } + , { author = "Henderson, S. O., et al." + , title = "Established risk factors account for most of the racial differences in cardiovascular disease mortality" + , journal = "PloS One" + , year = "2007" + , link = "https://doi.org/10.1371/journal.pone.0000377" + } + , { author = "Nakamura, Y., et al." + , title = "Fatty acid intakes and coronary heart disease mortality in Japan: NIPPON DATA90, 1990-2005" + , journal = "Current Nutrition & Food Science" + , year = "2013" + , link = "" + } + , { author = "Zhuang, P., et al." + , title = "Dietary fats in relation to total and cause-specific mortality in a prospective cohort of 521,120 individuals with 16 years of follow-up" + , journal = "Circulation Research" + , year = "2019" + , link = "https://doi.org/10.1161/CIRCRESAHA.118.314038" + } + , { author = "Goldbourt, U., et al." + , title = "Factors predictive of long-term coronary heart disease mortality among 10,059 male Israeli civil servants and municipal employees: A 23-year mortality follow-up in the Israeli Ischemic Heart Disease Study" + , journal = "Cardiology" + , year = "1993" + , link = "https://doi.org/10.1159/000175862" + } + , { author = "Guasch-Ferré, M., et al." + , title = "Dietary fat intake and risk of cardiovascular disease and all-cause mortality in a population at high risk of cardiovascular disease" + , journal = "The American Journal of Clinical Nutrition" + , year = "2015" + , link = "https://doi.org/10.3945/ajcn.115.116046" + } + , { author = "Jakobsen, M. U., et al." + , title = "Dietary fat and risk of coronary heart disease: Possible effect modification by gender and age" + , journal = "American Journal of Epidemiology" + , year = "2004" + , link = "https://doi.org/10.1093/aje/kwh193" + } + , { author = "Zong, G., et al." + , title = "Intake of individual saturated fatty acids and risk of coronary heart disease in US men and women: Two prospective longitudinal cohort studies" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2016" + , link = "https://doi.org/10.1136/bmj.i5796" + } + , { author = "Mann, J. I., et al." + , title = "Dietary determinants of ischaemic heart disease in health conscious individuals" + , journal = "Heart (British Cardiac Society)" + , year = "1997" + , link = "https://doi.org/10.1136/hrt.78.5.450" + } + , { author = "Ricci, C., et al." + , title = "Type of dietary fat intakes in relation to all-cause and cause-specific mortality in US adults: An iso-energetic substitution analysis from the American National Health and Nutrition Examination Survey linked to the US mortality registry" + , journal = "The British Journal of Nutrition" + , year = "2018" + , link = "https://doi.org/10.1017/S0007114517003889" + } + , { author = "Posner, B. M., et al." + , title = "Dietary lipid predictors of coronary heart disease in men. The Framingham Study" + , journal = "Archives of Internal Medicine" + , year = "1991" + , link = "" + } + , { author = "Praagman, J., et al." + , title = "The association between dietary saturated fatty acids and ischemic heart disease depends on the type and source of fatty acid in the European Prospective Investigation into Cancer and Nutrition-Netherlands cohort" + , journal = "The American Journal of Clinical Nutrition" + , year = "2016" + , link = "https://doi.org/10.3945/ajcn.115.122671" + } + , { author = "Praagman, J., et al." + , title = "Dietary saturated fatty acids and coronary heart disease risk in a Dutch middle-aged and elderly population" + , journal = "Arteriosclerosis, Thrombosis, and Vascular Biology" + , year = "2016" + , link = "https://doi.org/10.1161/ATVBAHA.116.307578" + } + , { author = "Santiago, S., et al." + , title = "Fat quality index and risk of cardiovascular disease in the Sun Project" + , journal = "The Journal of Nutrition, Health & Aging" + , year = "2018" + , link = "https://doi.org/10.1007/s12603-018-1003-y" + } + , { author = "Schoenaker, D. A. J. M., et al." + , title = "Dietary saturated fat and fibre and risk of cardiovascular disease and all-cause mortality among type 1 diabetic patients: The EURODIAB prospective complications study" + , journal = "Diabetologia" + , year = "2012" + , link = "https://doi.org/10.1007/s00125-012-2550-0" + } + , { author = "Leosdottir, M., et al." + , title = "Cardiovascular event risk in relation to dietary fat intake in middle-aged individuals: Data from The Malmö Diet and Cancer Study" + , journal = "European Journal of Cardiovascular Prevention and Rehabilitation" + , year = "2007" + , link = "https://doi.org/10.1097/HJR.0b013e3282a56c45" + } + , { author = "Pietinen, P., et al." + , title = "Intake of Fatty Acids and Risk of Coronary Heart Disease in a Cohort of Finnish Men. The Alpha-Tocopherol, Beta-Carotene Cancer Prevention Study" + , journal = "American Journal of Epidemiology" + , year = "1997" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a009047" + } + , { author = "Nagata, Chisato, et al." + , title = "Total Fat Intake Is Associated with Decreased Mortality in Japanese Men but Not in Women" + , journal = "The Journal of Nutrition" + , year = "2012" + , link = "https://doi.org/10.3945/jn.112.161661" + } + , { author = "Yamagishi, Kazumasa, et al." + , title = "Dietary Intake of Saturated Fatty Acids and Incident Stroke and Coronary Heart Disease in Japanese Communities: The JPHC Study" + , journal = "European Heart Journal" + , year = "2013" + , link = "https://doi.org/10.1093/eurheartj/eht043" + } + , { author = "Yamagishi, Kazumasa, et al." + , title = "Dietary Intake of Saturated Fatty Acids and Mortality from Cardiovascular Disease in Japanese: The Japan Collaborative Cohort Study for Evaluation of Cancer Risk (JACC) Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2010" + , link = "https://doi.org/10.3945/ajcn.2009.29146" + } + , { author = "Virtanen, Jyrki K., et al." + , title = "Dietary Fatty Acids and Risk of Coronary Heart Disease in Men: The Kuopio Ischemic Heart Disease Risk Factor Study" + , journal = "Arteriosclerosis, Thrombosis, and Vascular Biology" + , year = "2014" + , link = "https://doi.org/10.1161/ATVBAHA.114.304082" + } + , { author = "Laaksonen, David E., et al." + , title = "Prediction of Cardiovascular Mortality in Middle-Aged Men by Dietary and Serum Linoleic and Polyunsaturated Fatty Acids" + , journal = "Archives of Internal Medicine" + , year = "2005" + , link = "https://doi.org/10.1001/archinte.165.2.193" + } + , { author = "Hooper, Lee, et al." + , title = "Reduction in Saturated Fat Intake for Cardiovascular Disease" + , journal = "The Cochrane Database of Systematic Reviews" + , year = "2020" + , link = "https://doi.org/10.1002/14651858.CD011737.pub3" + } + , { author = "Woodhill, J. M., et al." + , title = "Low Fat, Low Cholesterol Diet in Secondary Prevention of Coronary Heart Disease" + , journal = "Advances in Experimental Medicine and Biology" + , year = "1978" + , link = "https://doi.org/10.1007/978-1-4684-0967-3_18" + } + , { author = "Frantz, I. D., et al." + , title = "Test of Effect of Lipid Lowering by Diet on Cardiovascular Risk. The Minnesota Coronary Survey" + , journal = "Arteriosclerosis (Dallas, Tex.)" + , year = "1989" + , link = "https://doi.org/10.1161/01.atv.9.1.129" + } + , { author = "Dayton, Seymour, et al." + , title = "A Controlled Clinical Trial of a Diet High in Unsaturated Fat in Preventing Complications of Atherosclerosis" + , journal = "Circulation" + , year = "1969" + , link = "https://doi.org/10.1161/01.CIR.40.1S2.II-1" + } + , { author = "Laguzzi, Federica, et al." + , title = "Intake of Food Rich in Saturated Fat in Relation to Subclinical Atherosclerosis and Potential Modulating Effects from Single Genetic Variants" + , journal = "Scientific Reports" + , year = "2021" + , link = "https://doi.org/10.1038/s41598-021-86324-w" + } + , { author = "William Shurtleff and Akiko Aoyagi" + , title = "History of Soy Oil Margarine - Part 2" + , journal = "A Chapter from the Unpublished Manuscript, History of Soybeans and Soyfoods, 1100 B.C. to the 1980s" + , year = "2004" + , link = "https://www.soyinfocenter.com/HSS/margarine2.php" + } + , { author = "Zhuang, Pan, et al." + , title = "Dietary Fats in Relation to Total and Cause-Specific Mortality in a Prospective Cohort of 521\u{2009}120 Individuals With 16 Years of Follow-Up" + , journal = "Circulation Research" + , year = "2019" + , link = "https://doi.org/10.1161/CIRCRESAHA.118.314038" + } + , { author = "Ramsden, Christopher E., et al." + , title = "Use of Dietary Linoleic Acid for Secondary Prevention of Coronary Heart Disease and Death: Evaluation of Recovered Data from the Sydney Diet Heart Study and Updated Meta-Analysis" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2013" + , link = "https://doi.org/10.1136/bmj.e8707" + } + , { author = "Heart Foundation Takes Swipe at Butter and New Study on Margarine | Australian Food News" + , title = "Heart Foundation Takes Swipe at Butter and New Study on Margarine" + , journal = "Australian Food News" + , year = "2013" + , link = "https://www.ausfoodnews.com.au/2013/02/11/heart-foundation-takes-swipe-at-butter-and-new-study-on-margarine.html" + } + , { author = "News, A. B. C." + , title = "Unilever Gets All the Trans Fat out of Its Margarines" + , journal = "ABC News" + , year = "" + , link = "https://abcnews.go.com/Business/story?id=8182555&page=1" + } + , { author = "Ramsden, Christopher E., et al." + , title = "Re-Evaluation of the Traditional Diet-Heart Hypothesis: Analysis of Recovered Data from Minnesota Coronary Experiment (1968-73)" + , journal = "BMJ (Clinical Research Ed.)" + , year = "2016" + , link = "https://doi.org/10.1136/bmj.i1246" + } + , { author = "Kadhum, Abdul Amir H., and M. Najeeb Shamma" + , title = "Edible Lipids Modification Processes: A Review" + , journal = "Critical Reviews in Food Science and Nutrition" + , year = "2017" + , link = "https://doi.org/10.1080/10408398.2013.848834" + } + , { author = "SR11-SR28: USDA ARS" + , title = "SR11-SR28" + , journal = "USDA ARS" + , year = "" + , link = "https://www.ars.usda.gov/northeast-area/beltsville-md-bhnrc/beltsville-human-nutrition-research-center/methods-and-application-of-food-composition-laboratory/mafcl-site-pages/sr11-sr28/" + } + , { author = "de Lorgeril, M., et al." + , title = "Mediterranean Alpha-Linolenic Acid-Rich Diet in Secondary Prevention of Coronary Heart Disease" + , journal = "Lancet (London, England)" + , year = "1994" + , link = "https://doi.org/10.1016/s0140-6736(94)92580-1" + } + , { author = "de Lorgeril, M., et al." + , title = "Mediterranean Diet, Traditional Risk Factors, and the Rate of Cardiovascular Complications after Myocardial Infarction: Final Report of the Lyon Diet Heart Study" + , journal = "Circulation" + , year = "1999" + , link = "https://doi.org/10.1161/01.cir.99.6.779" + } + , { author = "Park, Sehoon, et al." + , title = "Causal Effects of Serum Levels of N-3 or n-6 Polyunsaturated Fatty Acids on Coronary Artery Disease: Mendelian Randomization Study" + , journal = "Nutrients" + , year = "2021" + , link = "https://doi.org/10.3390/nu13051490" + } + , { author = "Rett, Brian S., and Jay Whelan." + , title = "Increasing Dietary Linoleic Acid Does Not Increase Tissue Arachidonic Acid Content in Adults Consuming Western-Type Diets: A Systematic Review" + , journal = "Nutrition & Metabolism" + , year = "2011" + , link = "https://doi.org/10.1186/1743-7075-8-36" + } + , { author = "Pearce, M. L., and S. Dayton." + , title = "Incidence of Cancer in Men on a Diet High in Polyunsaturated Fat" + , journal = "Lancet (London, England)" + , year = "1971" + , link = "https://doi.org/10.1016/s0140-6736(71)91086-5" + } + , { author = "Ederer, F., et al." + , title = "Cancer among Men on Cholesterol-Lowering Diets: Experience from Five Clinical Trials" + , journal = "Lancet (London, England)" + , year = "1971" + , link = "https://doi.org/10.1016/s0140-6736(71)90911-1" + } + , { author = "Lee, Peter N., et al." + , title = "Systematic Review with Meta-Analysis of the Epidemiological Evidence in the 1900s Relating Smoking to Lung Cancer" + , journal = "BMC Cancer" + , year = "2012" + , link = "https://doi.org/10.1186/1471-2407-12-385" + } + , { author = "Li, Jun, et al." + , title = "Dietary Intake and Biomarkers of Linoleic Acid and Mortality: Systematic Review and Meta-Analysis of Prospective Cohort Studies" + , journal = "The American Journal of Clinical Nutrition" + , year = "2020" + , link = "https://doi.org/10.1093/ajcn/nqz349" + } + , { author = "Ruan, Liang, et al." + , title = "Dietary Fat Intake and the Risk of Skin Cancer: A Systematic Review and Meta-Analysis of Observational Studies" + , journal = "Nutrition and Cancer" + , year = "2020" + , link = "https://doi.org/10.1080/01635581.2019.1637910" + } + , { author = "Park, Min Kyung, et al." + , title = "Fat Intake and Risk of Skin Cancer in U.S. Adults" + , journal = "Cancer Epidemiology, Biomarkers & Prevention: A Publication of the American Association for Cancer Research, Cosponsored by the American Society of Preventive Oncology" + , year = "2018" + , link = "https://doi.org/10.1158/1055-9965.EPI-17-0782" + } + , { author = "Gogia, Ravinder, et al." + , title = "Fitzpatrick Skin Phototype Is an Independent Predictor of Squamous Cell Carcinoma Risk after Solid Organ Transplantation" + , journal = "Journal of the American Academy of Dermatology" + , year = "2013" + , link = "https://doi.org/10.1016/j.jaad.2012.09.030" + } + , { author = "Ibiebele, Torukiri I., et al." + , title = "Dietary Fat Intake and Risk of Skin Cancer: A Prospective Study in Australian Adults" + , journal = "International Journal of Cancer" + , year = "2009" + , link = "https://doi.org/10.1002/ijc.24481" + } + , { author = "Wallingford, Sarah C., et al." + , title = "Plasma Omega-3 and Omega-6 Concentrations and Risk of Cutaneous Basal and Squamous Cell Carcinomas in Australian Adults" + , journal = "Cancer Epidemiology, Biomarkers & Prevention: A Publication of the American Association for Cancer Research, Cosponsored by the American Society of Preventive Oncology" + , year = "2013" + , link = "https://doi.org/10.1158/1055-9965.EPI-13-0434" + } + , { author = "Harris, Robin B., et al." + , title = "Fatty Acid Composition of Red Blood Cell Membranes and Risk of Squamous Cell Carcinoma of the Skin" + , journal = "Cancer Epidemiology, Biomarkers & Prevention: A Publication of the American Association for Cancer Research, Cosponsored by the American Society of Preventive Oncology" + , year = "2005" + , link = "https://doi.org/10.1158/1055-9965.EPI-04-0670" + } + , { author = "Seviiri, Mathias, et al." + , title = "Polyunsaturated Fatty Acid Levels and the Risk of Keratinocyte Cancer: A Mendelian Randomization Analysis" + , journal = "Cancer Epidemiology, Biomarkers & Prevention: A Publication of the American Association for Cancer Research, Cosponsored by the American Society of Preventive Oncology" + , year = "2021" + , link = "https://doi.org/10.1158/1055-9965.EPI-20-1765" + } + , { author = "Noel, Sophie E., et al." + , title = "Consumption of Omega-3 Fatty Acids and the Risk of Skin Cancers: A Systematic Review and Meta-Analysis" + , journal = "International Journal of Cancer" + , year = "2014" + , link = "https://doi.org/10.1002/ijc.28630" + } + , { author = "Watkins, Bruce A., and Jeffrey Kim." + , title = "The Endocannabinoid System: Directing Eating Behavior and Macronutrient Metabolism" + , journal = "Frontiers in Psychology" + , year = "2014" + , link = "https://doi.org/10.3389/fpsyg.2014.01506" + } + , { author = "Alvheim, Anita R., et al." + , title = "Dietary Linoleic Acid Elevates Endogenous 2-AG and Anandamide and Induces Obesity" + , journal = "Obesity (Silver Spring, Md.)" + , year = "2012" + , link = "https://doi.org/10.1038/oby.2012.38" + } + , { author = "Blüher, Matthias, et al." + , title = "Dysregulation of the Peripheral and Adipose Tissue Endocannabinoid System in Human Abdominal Obesity" + , journal = "Diabetes" + , year = "2006" + , link = "https://doi.org/10.2337/db06-0812" + } + , { author = "Piomelli, Daniele." + , title = "The Molecular Logic of Endocannabinoid Signalling" + , journal = "Nature Reviews. Neuroscience" + , year = "2003" + , link = "https://doi.org/10.1038/nrn1247" + } + , { author = "Curioni, C., and C. André." + , title = "Rimonabant for Overweight or Obesity" + , journal = "The Cochrane Database of Systematic Reviews" + , year = "2006" + , link = "https://doi.org/10.1002/14651858.CD006162.pub2" + } + , { author = "Naughton, Shaan S., et al." + , title = "The Acute Effect of Oleic- or Linoleic Acid-Containing Meals on Appetite and Metabolic Markers; A Pilot Study in Overweight or Obese Individuals" + , journal = "Nutrients" + , year = "2018" + , link = "https://doi.org/10.3390/nu10101376" + } + , { author = "Flint, Anne, et al." + , title = "Effects of Different Dietary Fat Types on Postprandial Appetite and Energy Expenditure" + , journal = "Obesity Research" + , year = "2003" + , link = "https://doi.org/10.1038/oby.2003.194" + } + , { author = "Stevenson, Jada L., et al." + , title = "Hunger and Satiety Responses to High-Fat Meals of Varying Fatty Acid Composition in Women with Obesity" + , journal = "Obesity (Silver Spring, Md.)" + , year = "2015" + , link = "https://doi.org/10.1002/oby.21202" + } + , { author = "Lawton, C. L., et al." + , title = "The Degree of Saturation of Fatty Acids Influences Post-Ingestive Satiety" + , journal = "The British Journal of Nutrition" + , year = "2000" + , link = "" + } + , { author = "French, S. J., et al." + , title = "The Effects of Intestinal Infusion of Long-Chain Fatty Acids on Food Intake in Humans" + , journal = "Gastroenterology" + , year = "2000" + , link = "https://doi.org/10.1053/gast.2000.18139" + } + , { author = "MacIntosh, Beth A., et al." + , title = "Low-n-6 and Low-n-6 plus High-n-3 Diets for Use in Clinical Research" + , journal = "The British Journal of Nutrition" + , year = "2013" + , link = "https://doi.org/10.1017/S0007114512005181" + } + , { author = "Stevenson, Jada L., et al." + , title = "Hunger and Satiety Responses to High-Fat Meals after a High-Polyunsaturated Fat Diet: A Randomized Trial" + , journal = "Nutrition (Burbank, Los Angeles County, Calif.)" + , year = "2017" + , link = "https://doi.org/10.1016/j.nut.2017.03.008" + } + , { author = "Strik, Caroline M., et al." + , title = "No Evidence of Differential Effects of SFA, MUFA or PUFA on Post-Ingestive Satiety and Energy Intake: A Randomised Trial of Fatty Acid Saturation" + , journal = "Nutrition Journal" + , year = "2010" + , link = "https://doi.org/10.1186/1475-2891-9-24" + } + , { author = "Martin, Melanie A., et al." + , title = "Fatty Acid Composition in the Mature Milk of Bolivian Forager-Horticulturalists: Controlled Comparisons with a US Sample" + , journal = "Maternal & Child Nutrition" + , year = "2012" + , link = "https://doi.org/10.1111/j.1740-8709.2012.00412.x" + } + , { author = "McLaughlin, Joe, et al." + , title = "Adipose Tissue Triglyceride Fatty Acids and Atherosclerosis in Alaska Natives and Non-Natives" + , journal = "Atherosclerosis" + , year = "2005" + , link = "https://doi.org/10.1016/j.atherosclerosis.2005.01.019" + } + , { author = "Hirsch, Jules." + , title = "Fatty Acid Patterns in Human Adipose Tissue" + , journal = "Comprehensive Physiology" + , year = "2011" + , link = "https://doi.org/10.1002/cphy.cp050117" + } + , { author = "Heldenberg, D., et al." + , title = "Breast Milk and Adipose Tissue Fatty Acid Composition in Relation to Maternal Dietary Intake" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "1983" + , link = "https://doi.org/10.1016/0261-5614(83)90036-5" + } + , { author = "Martin, J. C., et al." + , title = "Dependence of Human Milk Essential Fatty Acids on Adipose Stores during Lactation" + , journal = "The American Journal of Clinical Nutrition" + , year = "1993" + , link = "https://doi.org/10.1093/ajcn/58.5.653" + } + , { author = "Demmelmair, H., et al." + , title = "Metabolism of U13C-Labeled Linoleic Acid in Lactating Women" + , journal = "Journal of Lipid Research" + , year = "1998" + , link = "" + } + , { author = "Kuipers, Remko S., et al." + , title = "Estimated Macronutrient and Fatty Acid Intakes from an East African Paleolithic Diet" + , journal = "The British Journal of Nutrition" + , year = "2010" + , link = "https://doi.org/10.1017/S0007114510002679" + } + , { author = "Leren, P." + , title = "Prevention of Coronary Heart Disease: Some Results from the Oslo Secondary and Primary Intervention Studies" + , journal = "Journal of the American College of Nutrition" + , year = "1989" + , link = "https://doi.org/10.1080/07315724.1989.10720315" + } + , { author = "" + , title = "Controlled Trial of Soya-Bean Oil in Myocardial Infarction" + , journal = "Lancet (London, England)" + , year = "1968" + , link = "" + } + , { author = "Krishnan, Sridevi, and Jamie A. Cooper." + , title = "Effect of Dietary Fatty Acid Composition on Substrate Utilization and Body Weight Maintenance in Humans" + , journal = "European Journal of Nutrition" + , year = "2014" + , link = "https://doi.org/10.1007/s00394-013-0638-z" + } + , { author = "Jones, P. J., et al." + , title = "Influence of Dietary Fat Polyunsaturated to Saturated Ratio on Energy Substrate Utilization in Obesity" + , journal = "Metabolism: Clinical and Experimental" + , year = "1992" + , link = "https://doi.org/10.1016/0026-0495(92)90074-k" + } + , { author = "van Marken Lichtenbelt, W. D., et al." + , title = "The Effect of Fat Composition of the Diet on Energy Metabolism" + , journal = "Zeitschrift Fur Ernahrungswissenschaft" + , year = "1997" + , link = "https://doi.org/10.1007/BF01617803" + } + , { author = "Casas-Agustench, P., et al." + , title = "Acute Effects of Three High-Fat Meals with Different Fat Saturations on Energy Expenditure, Substrate Oxidation and Satiety" + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2009" + , link = "https://doi.org/10.1016/j.clnu.2008.10.008" + } + , { author = "DeLany, J. P., et al." + , title = "Differential Oxidation of Individual Dietary Fatty Acids in Humans" + , journal = "The American Journal of Clinical Nutrition" + , year = "2000" + , link = "https://doi.org/10.1093/ajcn/72.4.905" + } + , { author = "Iggman, D., et al." + , title = "Adipose Tissue Fatty Acids and Insulin Sensitivity in Elderly Men" + , journal = "Diabetologia" + , year = "2010" + , link = "https://doi.org/10.1007/s00125-010-1669-0" + } + , { author = "Heine, R. J., et al." + , title = "Linoleic-Acid-Enriched Diet: Long-Term Effects on Serum Lipoprotein and Apolipoprotein Concentrations and Insulin Sensitivity in Noninsulin-Dependent Diabetic Patients." + , journal = "The American Journal of Clinical Nutrition" + , year = "1989" + , link = "https://doi.org/10.1093/ajcn/49.3.448" + } + , { author = "Zibaeenezhad, Mohammadjavad, et al." + , title = "The Effect of Walnut Oil Consumption on Blood Sugar in Patients With Diabetes Mellitus Type 2." + , journal = "International Journal of Endocrinology and Metabolism" + , year = "2016" + , link = "https://doi.org/10.5812/ijem.34889" + } + , { author = "Pertiwi, Kamalita, et al." + , title = "Associations of Linoleic Acid with Markers of Glucose Metabolism and Liver Function in South African Adults." + , journal = "Lipids in Health and Disease" + , year = "2020" + , link = "https://doi.org/10.1186/s12944-020-01318-3" + } + , { author = "Kröger, Janine, et al." + , title = "Erythrocyte Membrane Phospholipid Fatty Acids, Desaturase Activity, and Dietary Fatty Acids in Relation to Risk of Type 2 Diabetes in the European Prospective Investigation into Cancer and Nutrition (EPIC)-Potsdam Study." + , journal = "The American Journal of Clinical Nutrition" + , year = "2011" + , link = "https://doi.org/10.3945/ajcn.110.005447" + } + , { author = "Wu, Jason H. Y., et al." + , title = "Omega-6 Fatty Acid Biomarkers and Incident Type 2 Diabetes: Pooled Analysis of Individual-Level Data for 39,740 Adults from 20 Prospective Cohort Studies." + , journal = "The Lancet. Diabetes & Endocrinology" + , year = "2017" + , link = "https://doi.org/10.1016/S2213-8587(17)30307-8" + } + , { author = "Yepes-Calderón, Manuela, et al." + , title = "Plasma Malondialdehyde and Risk of New-Onset Diabetes after Transplantation in Renal Transplant Recipients: A Prospective Cohort Study." + , journal = "Journal of Clinical Medicine" + , year = "2019" + , link = "https://doi.org/10.3390/jcm8040453" + } + , { author = "Chen, Cai, et al." + , title = "Association between Omega-3 Fatty Acids Consumption and the Risk of Type 2 Diabetes: A Meta-Analysis of Cohort Studies." + , journal = "Journal of Diabetes Investigation" + , year = "2017" + , link = "https://doi.org/10.1111/jdi.12614" + } + , { author = "Brown, Tracey J., et al." + , title = "Omega-3, Omega-6, and Total Dietary Polyunsaturated Fat for Prevention and Treatment of Type 2 Diabetes Mellitus: Systematic Review and Meta-Analysis of Randomised Controlled Trials." + , journal = "BMJ (Clinical Research Ed.)" + , year = "2019" + , link = "https://doi.org/10.1136/bmj.l4697" + } + , { author = "Santoro, Nicola, et al." + , title = "Oxidized Metabolites of Linoleic Acid as Biomarkers of Liver Injury in Nonalcoholic Steatohepatitis." + , journal = "Clinical Lipidology" + , year = "2013" + , link = "https://doi.org/10.2217/clp.13.39" + } + , { author = "Hojsak, Iva, and Sanja Kolaček." + , title = "Fat Overload Syndrome after the Rapid Infusion of SMOFlipid Emulsion." + , journal = "JPEN. Journal of Parenteral and Enteral Nutrition" + , year = "2014" + , link = "https://doi.org/10.1177/0148607113482001" + } + , { author = "Gura, Kathleen M., and Mark Puder." + , title = "Rapid Infusion of Fish Oil-Based Emulsion in Infants Does Not Appear to Be Associated with Fat Overload Syndrome." + , journal = "Nutrition in Clinical Practice: Official Publication of the American Society for Parenteral and Enteral Nutrition" + , year = "2010" + , link = "https://doi.org/10.1177/0884533610373770" + } + , { author = "Fell, Gillian L., et al." + , title = "Intravenous Lipid Emulsions in Parenteral Nutrition." + , journal = "Advances in Nutrition (Bethesda, Md.)" + , year = "2015" + , link = "https://doi.org/10.3945/an.115.009084" + } + , { author = "Clayton, P. T., et al." + , title = "The Role of Phytosterols in the Pathogenesis of Liver Complications of Pediatric Parenteral Nutrition." + , journal = "Nutrition (Burbank, Los Angeles County, Calif.)" + , year = "1998" + , link = "https://doi.org/10.1016/s0899-9007(97)00233-5" + } + , { author = "El Kasmi, Karim C., et al." + , title = "Phytosterols Promote Liver Injury and Kupffer Cell Activation in Parenteral Nutrition-Associated Liver Disease." + , journal = "Science Translational Medicine" + , year = "2013" + , link = "https://doi.org/10.1126/scitranslmed.3006898" + } + , { author = "Nehra, Deepika, et al." + , title = "A Comparison of 2 Intravenous Lipid Emulsions: Interim Analysis of a Randomized Controlled Trial." + , journal = "JPEN. Journal of Parenteral and Enteral Nutrition" + , year = "2014" + , link = "https://doi.org/10.1177/0148607113492549" + } + , { author = "Klek, Stanislaw, et al." + , title = "Four-Week Parenteral Nutrition Using a Third Generation Lipid Emulsion (SMOFlipid)--a Double-Blind, Randomised, Multicentre Study in Adults." + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2013" + , link = "https://doi.org/10.1016/j.clnu.2012.06.011" + } + , { author = "Van Name, Michelle A., et al." + , title = "A Low ω-6 to ω-3 PUFA Ratio (n-6:N-3 PUFA) Diet to Treat Fatty Liver Disease in Obese Youth." + , journal = "The Journal of Nutrition" + , year = "2020" + , link = "https://doi.org/10.1093/jn/nxaa183" + } + , { author = "Van Name, Michelle A., et al." + , title = "A Low ω-6 to ω-3 PUFA Ratio (n-6:N-3 PUFA) Diet to Treat Fatty Liver Disease in Obese Youth (Supplement)." + , journal = "The Journal of Nutrition" + , year = "2020" + , link = "https://pmc.ncbi.nlm.nih.gov/articles/instance/7467848/bin/nxaa183_supplemental_files.zip" + } + , { author = "Bjermo, Helena, et al." + , title = "Effects of N-6 PUFAs Compared with SFAs on Liver Fat, Lipoproteins, and Inflammation in Abdominal Obesity: A Randomized Controlled Trial." + , journal = "The American Journal of Clinical Nutrition" + , year = "2012" + , link = "https://doi.org/10.3945/ajcn.111.030114" + } + , { author = "Rosqvist, Fredrik, et al." + , title = "Overfeeding Polyunsaturated and Saturated Fat Causes Distinct Effects on Liver and Visceral Fat Accumulation in Humans." + , journal = "Diabetes" + , year = "2014" + , link = "https://doi.org/10.2337/db13-1622" + } + , { author = "Petit, J. M., et al." + , title = "Increased Erythrocytes N-3 and n-6 Polyunsaturated Fatty Acids Is Significantly Associated with a Lower Prevalence of Steatosis in Patients with Type 2 Diabetes." + , journal = "Clinical Nutrition (Edinburgh, Scotland)" + , year = "2012" + , link = "https://doi.org/10.1016/j.clnu.2011.12.007" + } + , { author = "Cheng, Yipeng, et al." + , title = "Associations between Dietary Nutrient Intakes and Hepatic Lipid Contents in NAFLD Patients Quantified by 1H-MRS and Dual-Echo MRI" + , journal = "Nutrients" + , year = "2016" + , link = "https://doi.org/10.3390/nu8090527" + } + , { author = "Wehmeyer, Malte H., et al." + , title = "Nonalcoholic Fatty Liver Disease Is Associated with Excessive Calorie Intake Rather than a Distinctive Dietary Pattern" + , journal = "Medicine" + , year = "2016" + , link = "https://doi.org/10.1097/MD.0000000000003887" + } + , { author = "Lourdudoss, Cecilia, et al." + , title = "Dietary Intake of Polyunsaturated Fatty Acids and Pain in Spite of Inflammatory Control Among Methotrexate-Treated Early Rheumatoid Arthritis Patients" + , journal = "Arthritis Care & Research" + , year = "2018" + , link = "https://doi.org/10.1002/acr.23245" + } + , { author = "Navarini, Luca, et al." + , title = "Polyunsaturated Fatty Acids: Any Role in Rheumatoid Arthritis?" + , journal = "Lipids in Health and Disease" + , year = "2017" + , link = "https://doi.org/10.1186/s12944-017-0586-3" + } + , { author = "Senftleber, Ninna K., et al." + , title = "Marine Oil Supplements for Arthritis Pain: A Systematic Review and Meta-Analysis of Randomized Trials" + , journal = "Nutrients" + , year = "2017" + , link = "https://doi.org/10.3390/nu9010042" + } + , { author = "Wang, Yuanyuan, et al." + , title = "Dietary Fatty Acid Intake Affects the Risk of Developing Bone Marrow Lesions in Healthy Middle-Aged Adults without Clinical Knee Osteoarthritis: A Prospective Cohort Study" + , journal = "Arthritis Research & Therapy" + , year = "2009" + , link = "https://doi.org/10.1186/ar2688" + } + , { author = "Leventhal, L. J., et al." + , title = "Treatment of Rheumatoid Arthritis with Blackcurrant Seed Oil" + , journal = "British Journal of Rheumatology" + , year = "1994" + , link = "https://doi.org/10.1093/rheumatology/33.9.847" + } + , { author = "Byars, M. L., et al." + , title = "Blackcurrant Seed Oil as a Source of Polyunsaturated Fatty Acids in the Treatment of Inflammatory Disease" + , journal = "Biochemical Society Transactions" + , year = "1992" + , link = "https://doi.org/10.1042/bst020139s" + } + , { author = "Šavikin, Katarina P., et al." + , title = "Variation in the Fatty-Acid Content in Seeds of Various Black, Red, and White Currant Varieties" + , journal = "Chemistry & Biodiversity" + , year = "2013" + , link = "https://doi.org/10.1002/cbdv.201200223" + } + , { author = "Watson, J., et al." + , title = "Cytokine and Prostaglandin Production by Monocytes of Volunteers and Rheumatoid Arthritis Patients Treated with Dietary Supplements of Blackcurrant Seed Oil" + , journal = "British Journal of Rheumatology" + , year = "1993" + , link = "https://doi.org/10.1093/rheumatology/32.12.1055" + } + , { author = "Timoszuk, Magdalena, et al." + , title = "Evening Primrose (Oenothera Biennis) Biological Activity Dependent on Chemical Composition" + , journal = "Antioxidants (Basel, Switzerland)" + , year = "2018" + , link = "https://doi.org/10.3390/antiox7080108" + } + , { author = "Brzeski, M., et al." + , title = "Evening Primrose Oil in Patients with Rheumatoid Arthritis and Side-Effects of Non-Steroidal Anti-Inflammatory Drugs" + , journal = "British Journal of Rheumatology" + , year = "1991" + , link = "https://doi.org/10.1093/rheumatology/30.5.370" + } + , { author = "Horrobin, D. F." + , title = "Effects of Evening Primrose Oil in Rheumatoid Arthritis" + , journal = "Annals of the Rheumatic Diseases" + , year = "1989" + , link = "https://doi.org/10.1136/ard.48.11.965" + } + , { author = "Belch, J. J., et al." + , title = "Effects of Altering Dietary Essential Fatty Acids on Requirements for Non-Steroidal Anti-Inflammatory Drugs in Patients with Rheumatoid Arthritis: A Double Blind Placebo Controlled Study" + , journal = "Annals of the Rheumatic Diseases" + , year = "1988" + , link = "https://doi.org/10.1136/ard.47.2.96" + } + , { author = "Volker, D., et al." + , title = "Efficacy of Fish Oil Concentrate in the Treatment of Rheumatoid Arthritis" + , journal = "The Journal of Rheumatology" + , year = "2000" + , link = "https://doi.org/10.1136/ard.47.2.96" + } + , { author = "Essouiri, Jamila, et al." + , title = "Effectiveness of Argan Oil Consumption on Knee Osteoarthritis Symptoms: A Randomized Controlled Clinical Trial" + , journal = "Current Rheumatology Reviews" + , year = "2017" + , link = "https://doi.org/10.2174/1573397113666170710123031" + } + , { author = "Khallouki, F., et al." + , title = "Consumption of Argan Oil (Morocco) with Its Unique Profile of Fatty Acids, Tocopherols, Squalene, Sterols and Phenolic Compounds Should Confer Valuable Cancer Chemopreventive Effects" + , journal = "European Journal of Cancer Prevention: The Official Journal of the European Cancer Prevention Organisation (ECP)" + , year = "2003" + , link = "https://doi.org/10.1097/00008469-200302000-00011" + } + , { author = "Tuna, Halil Ibrahim, et al." + , title = "Investigation of the Effect of Black Cumin Oil on Pain in Osteoarthritis Geriatric Individuals" + , journal = "Complementary Therapies in Clinical Practice" + , year = "2018" + , link = "https://doi.org/10.1016/j.ctcp.2018.03.013" + } + , { author = "Gorczyca, D., et al." + , title = "Serum Levels of N-3 and n-6 Polyunsaturated Fatty Acids in Patients with Systemic Lupus Erythematosus and Their Association with Disease Activity: A Pilot Study" + , journal = "Scandinavian Journal of Rheumatology" + , year = "2021" + , link = "https://doi.org/10.1080/03009742.2021.1923183" + } + , { author = "Charoenwoodhipong, Prae, et al." + , title = "Dietary Omega Polyunsaturated Fatty Acid Intake and Patient-Reported Outcomes in Systemic Lupus Erythematosus: The Michigan Lupus Epidemiology and Surveillance Program" + , journal = "Arthritis Care & Research" + , year = "2020" + , link = "https://doi.org/10.1002/acr.23925" + } + , { author = "Lourdudoss, Cecilia, et al." + , title = "The Association between Diet and Glucocorticoid Treatment in Patients with SLE" + , journal = "Lupus Science & Medicine" + , year = "2016" + , link = "https://doi.org/10.1136/lupus-2015-000135" + } + , { author = "Vordenbäumen, Stefan, et al." + , title = "Erythrocyte Membrane Polyunsaturated Fatty Acid Profiles Are Associated with Systemic Inflammation and Fish Consumption in Systemic Lupus Erythematosus: A Cross-Sectional Study" + , journal = "Lupus" + , year = "2020" + , link = "https://doi.org/10.1177/0961203320912326" + } + , { author = "Pocovi-Gerardino, G., et al." + , title = "Diet Quality and High-Sensitivity C-Reactive Protein in Patients With Systemic Lupus Erythematosus" + , journal = "Biological Research for Nursing" + , year = "2019" + , link = "https://doi.org/10.1177/1099800418803176" + } + , { author = "Lourdudoss, Cecilia, et al." + , title = "The Association between Diet and Glucocorticoid Treatment in Patients with SLE" + , journal = "Lupus Science & Medicine" + , year = "2016" + , link = "https://doi.org/10.1136/lupus-2015-000135" + } + , { author = "Shin, Tae Hwan, et al." + , title = "Analysis of the Free Fatty Acid Metabolome in the Plasma of Patients with Systemic Lupus Erythematosus and Fever" + , journal = "Metabolomics: Official Journal of the Metabolomic Society" + , year = "2017" + , link = "https://doi.org/10.1007/s11306-017-1308-6" + } + , { author = "Shah, Dilip, et al." + , title = "Oxidative Stress and Its Biomarkers in Systemic Lupus Erythematosus" + , journal = "Journal of Biomedical Science" + , year = "2014" + , link = "https://doi.org/10.1186/1423-0127-21-23" + } + , { author = "Tam, Lai S., et al." + , title = "Effects of Vitamins C and E on Oxidative Stress Markers and Endothelial Function in Patients with Systemic Lupus Erythematosus: A Double Blind, Placebo Controlled Pilot Study" + , journal = "The Journal of Rheumatology" + , year = "2005" + , link = "https://doi.org/10.1136/ard.47.2.96" + } + , { author = "Maeshima, Etsuko, et al." + , title = "The Efficacy of Vitamin E against Oxidative Damage and Autoantibody Production in Systemic Lupus Erythematosus: A Preliminary Study" + , journal = "Clinical Rheumatology" + , year = "2007" + , link = "https://doi.org/10.1007/s10067-006-0477-x" + } + , { author = "Bae, Sang-Cheol, et al." + , title = "Impaired Antioxidant Status and Decreased Dietary Intake of Antioxidants in Patients with Systemic Lupus Erythematosus" + , journal = "Rheumatology International" + , year = "2002" + , link = "https://doi.org/10.1007/s00296-002-0241-8" + } + , { author = "Minami, Yuko, et al." + , title = "Diet and Systemic Lupus Erythematosus: A 4 Year Prospective Study of Japanese Patients" + , journal = "The Journal of Rheumatology" + , year = "2003" + , link = "https://doi.org/10.1136/ard.48.11.965" + } + , { author = "Barbhaiya, Medha, et al." + , title = "Association of Dietary Quality With Risk of Incident Systemic Lupus Erythematosus in the Nurses’ Health Study and Nurses’ Health Study II" + , journal = "Arthritis Care & Research" + , year = "2021" + , link = "https://doi.org/10.1002/acr.24443" + } + , { author = "Tedeschi, S. K., et al." + , title = "Dietary Patterns and Risk of Systemic Lupus Erythematosus in Women" + , journal = "Lupus" + , year = "2020" + , link = "https://doi.org/10.1177/0961203319888791" + } + , { author = "Zhao, Jie V., and C. Mary Schooling" + , title = "Role of Linoleic Acid in Autoimmune Disorders: A Mendelian Randomisation Study" + , journal = "Annals of the Rheumatic Diseases" + , year = "2019" + , link = "https://doi.org/10.1136/annrheumdis-2018-214519" + } + , { author = "Knobbe, Chris A., and Marija Stojanoska" + , title = "The ‘Displacing Foods of Modern Commerce’ Are the Primary and Proximate Cause of Age-Related Macular Degeneration: A Unifying Singular Hypothesis" + , journal = "Medical Hypotheses" + , year = "2017" + , link = "https://doi.org/10.1016/j.mehy.2017.10.010" + } + , { author = "Knobbe, Chris a." + , title = "Ancestral Dietary Strategy to Prevent and Treat Macular Degeneration: Full-Color Hardcover Edition" + , journal = "Cure AMD Foundation" + , year = "2019" + , link = "https://www.cureamdfoundation.org" + } + , { author = "Delcourt, C., et al." + , title = "Dietary Fat and the Risk of Age-Related Maculopathy: The POLANUT Study" + , journal = "European Journal of Clinical Nutrition" + , year = "2007" + , link = "https://doi.org/10.1038/sj.ejcn.1602685" + } + , { author = "Seddon, Johanna M., et al." + , title = "Progression of Age-Related Macular Degeneration: Association with Dietary Fat, Transunsaturated Fat, Nuts, and Fish Intake" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2003" + , link = "https://doi.org/10.1001/archopht.121.12.1728" + } + , { author = "Chong, Elaine W. T., et al." + , title = "Fat Consumption and Its Association with Age-Related Macular Degeneration" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2009" + , link = "https://doi.org/10.1001/archophthalmol.2009.60" + } + , { author = "Chua, Brian, et al." + , title = "Dietary Fatty Acids and the 5-Year Incidence of Age-Related Maculopathy" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2006" + , link = "https://doi.org/10.1001/archophthalmol.124.7.981" + } + , { author = "Cho, E., et al." + , title = "Prospective Study of Dietary Fat and the Risk of Age-Related Macular Degeneration" + , journal = "The American Journal of Clinical Nutrition" + , year = "2001" + , link = "https://doi.org/10.1093/ajcn/73.2.209" + } + , { author = "Tan, Jennifer S. L., et al." + , title = "Dietary Fatty Acids and the 10-Year Incidence of Age-Related Macular Degeneration: The Blue Mountains Eye Study" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2009" + , link = "https://doi.org/10.1001/archophthalmol.2009.76" + } + , { author = "Parekh, Niyati, et al." + , title = "Association between Dietary Fat Intake and Age-Related Macular Degeneration in the Carotenoids in Age-Related Eye Disease Study (CAREDS): An Ancillary Study of the Women’s Health Initiative" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2009" + , link = "https://doi.org/10.1001/archophthalmol.2009.130" + } + , { author = "Sasaki, Mariko, et al." + , title = "Dietary Saturated Fatty Acid Intake and Early Age-Related Macular Degeneration in a Japanese Population" + , journal = "Investigative Ophthalmology & Visual Science" + , year = "2020" + , link = "https://doi.org/10.1167/iovs.61.3.23" + } + , { author = "Christen, William G., et al." + , title = "Dietary ω-3 Fatty Acid and Fish Intake and Incident Age-Related Macular Degeneration in Women" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2011" + , link = "https://doi.org/10.1001/archophthalmol.2011.34" + } + , { author = "Mares-Perlman, J. A., et al." + , title = "Dietary Fat and Age-Related Maculopathy" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "1995" + , link = "https://doi.org/10.1001/archopht.1995.01100060069034" + } + , { author = "Ma, Le, et al." + , title = "Lutein and Zeaxanthin Intake and the Risk of Age-Related Macular Degeneration: A Systematic Review and Meta-Analysis" + , journal = "The British Journal of Nutrition" + , year = "2012" + , link = "https://doi.org/10.1017/S0007114511004260" + } + , { author = "Chong, Elaine W. T., et al." + , title = "Dietary Omega-3 Fatty Acid and Fish Intake in the Primary Prevention of Age-Related Macular Degeneration: A Systematic Review and Meta-Analysis" + , journal = "Archives of Ophthalmology (Chicago, Ill.: 1960)" + , year = "2008" + , link = "https://doi.org/10.1001/archopht.126.6.826" + } + , { author = "Wang, Kai, et al." + , title = "Causal Effects of N-6 Polyunsaturated Fatty Acids on Age-Related Macular Degeneration: A Mendelian Randomization Study" + , journal = "The Journal of Clinical Endocrinology and Metabolism" + , year = "2021" + , link = "https://doi.org/10.1210/clinem/dgab338" + } + , { author = "Laitinen, M. H., et al." + , title = "Fat Intake at Midlife and Risk of Dementia and Alzheimer’s Disease: A Population-Based Study" + , journal = "Dementia and Geriatric Cognitive Disorders" + , year = "2006" + , link = "https://doi.org/10.1159/000093478" + } + , { author = "Morris, Martha Clare, et al." + , title = "Dietary Fats and the Risk of Incident Alzheimer Disease" + , journal = "Archives of Neurology" + , year = "2003" + , link = "https://doi.org/10.1001/archneur.60.2.194" + } + , { author = "Luchsinger, Jose A., et al." + , title = "Caloric Intake and the Risk of Alzheimer Disease" + , journal = "Archives of Neurology" + , year = "2002" + , link = "https://doi.org/10.1001/archneur.59.8.1258" + } + , { author = "Rönnemaa, E., et al." + , title = "Serum Fatty-Acid Composition and the Risk of Alzheimer’s Disease: A Longitudinal Population-Based Study" + , journal = "European Journal of Clinical Nutrition" + , year = "2012" + , link = "https://doi.org/10.1038/ejcn.2012.63" + } + , { author = "Beydoun, May A., et al." + , title = "Plasma N-3 Fatty Acids and the Risk of Cognitive Decline in Older Adults: The Atherosclerosis Risk in Communities Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2007" + , link = "https://doi.org/10.1093/ajcn/85.4.1103" + } + , { author = "González, Sonia, et al." + , title = "The Relationship between Dietary Lipids and Cognitive Performance in an Elderly Population" + , journal = "International Journal of Food Sciences and Nutrition" + , year = "2010" + , link = "https://doi.org/10.3109/09637480903348098" + } + , { author = "Kalmijn, S., et al." + , title = "Polyunsaturated Fatty Acids, Antioxidants, and Cognitive Function in Very Old Men" + , journal = "American Journal of Epidemiology" + , year = "1997" + , link = "https://doi.org/10.1093/oxfordjournals.aje.a009029" + } + , { author = "Vercambre, Marie-Noël, et al." + , title = "Long-Term Association of Food and Nutrient Intakes with Cognitive and Functional Decline: A 13-Year Follow-up Study of Elderly French Women" + , journal = "The British Journal of Nutrition" + , year = "2009" + , link = "https://doi.org/10.1017/S0007114508201959" + } + , { author = "Nozaki, Shoko, et al." + , title = "Association Between Dietary Fish and PUFA Intake in Midlife and Dementia in Later Life: The JPHC Saku Mental Health Study" + , journal = "Journal of Alzheimer’s Disease: JAD" + , year = "2021" + , link = "https://doi.org/10.3233/JAD-191313" + } + , { author = "Heude, Barbara, et al." + , title = "Cognitive Decline and Fatty Acid Composition of Erythrocyte Membranes--The EVA Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2003" + , link = "https://doi.org/10.1093/ajcn/77.4.803" + } + , { author = "Samieri, Cécilia, et al." + , title = "Low Plasma Eicosapentaenoic Acid and Depressive Symptomatology Are Independent Predictors of Dementia Risk" + , journal = "The American Journal of Clinical Nutrition" + , year = "2008" + , link = "https://doi.org/10.1093/ajcn/88.3.714" + } + , { author = "Okereke, Olivia I., et al." + , title = "Dietary Fat Types and 4-Year Cognitive Change in Community-Dwelling Older Women" + , journal = "Annals of Neurology" + , year = "2012" + , link = "https://doi.org/10.1002/ana.23593" + } + , { author = "Solfrizzi, Vincenzo, et al." + , title = "Dietary Fatty Acids Intakes and Rate of Mild Cognitive Impairment. The Italian Longitudinal Study on Aging" + , journal = "Experimental Gerontology" + , year = "2006" + , link = "https://doi.org/10.1016/j.exger.2006.03.017" + } + , { author = "Roberts, Rosebud O., et al." + , title = "Relative Intake of Macronutrients Impacts Risk of Mild Cognitive Impairment or Dementia" + , journal = "Journal of Alzheimer’s Disease: JAD" + , year = "2012" + , link = "https://doi.org/10.3233/JAD-2012-120862" + } + , { author = "Laitinen, M. H., et al." + , title = "Fat Intake at Midlife and Risk of Dementia and Alzheimer’s Disease: A Population-Based Study" + , journal = "Dementia and Geriatric Cognitive Disorders" + , year = "2006" + , link = "https://doi.org/10.1159/000093478" + } + , { author = "Zietemann, Vera, et al." + , title = "Validation of the Telephone Interview of Cognitive Status and Telephone Montreal Cognitive Assessment Against Detailed Cognitive Testing and Clinical Diagnosis of Mild Cognitive Impairment After Stroke" + , journal = "Stroke" + , year = "2017" + , link = "https://doi.org/10.1161/STROKEAHA.117.017519" + } + , { author = "Cao, G. Y., et al." + , title = "Dietary Fat Intake and Cognitive Function among Older Populations: A Systematic Review and Meta-Analysis" + , journal = "The Journal of Prevention of Alzheimer’s Disease" + , year = "2019" + , link = "https://doi.org/10.14283/jpad.2019.9" + } + , { author = "Ruan, Yue, et al." + , title = "Dietary Fat Intake and Risk of Alzheimer’s Disease and Dementia: A Meta-Analysis of Cohort Studies" + , journal = "Current Alzheimer Research" + , year = "2018" + , link = "https://doi.org/10.2174/1567205015666180427142350" + } + , { author = "Junker, R., et al." + , title = "Effects of Diets Containing Olive Oil, Sunflower Oil, or Rapeseed Oil on the Hemostatic System" + , journal = "Thrombosis and Haemostasis" + , year = "2001" + , link = "" + } + , { author = "Freese, Riitta, et al." + , title = "No Difference in Platelet Activation or Inflammation Markers after Diets Rich or Poor in Vegetables, Berries and Apple in Healthy Subjects" + , journal = "European Journal of Nutrition" + , year = "2004" + , link = "https://doi.org/10.1007/s00394-004-0456-4" + } + , { author = "Vafeiadou, Katerina, et al." + , title = "Replacement of Saturated with Unsaturated Fats Had No Impact on Vascular Function but Beneficial Effects on Lipid Biomarkers, E-Selectin, and Blood Pressure: Results from the Randomized, Controlled Dietary Intervention and VAScular Function (DIVAS) Study" + , journal = "The American Journal of Clinical Nutrition" + , year = "2015" + , link = "https://doi.org/10.3945/ajcn.114.097089" + } + , { author = "Iggman, David, et al." + , title = "Role of Dietary Fats in Modulating Cardiometabolic Risk during Moderate Weight Gain: A Randomized Double-Blind Overfeeding Trial (LIPOGAIN Study)" + , journal = "Journal of the American Heart Association" + , year = "2014" + , link = "https://doi.org/10.1161/JAHA.114.001095" + } + , { author = "Hozo, Stela Pudar, et al." + , title = "Estimating the Mean and Variance from the Median, Range, and the Size of a Sample" + , journal = "BMC Medical Research Methodology" + , year = "2005" + , link = "https://doi.org/10.1186/1471-2288-5-13" + } + , { author = "Freese, R., et al." + , title = "No Effect on Oxidative Stress Biomarkers by Modified Intakes of Polyunsaturated Fatty Acids or Vegetables and Fruit" + , journal = "European Journal of Clinical Nutrition" + , year = "2008" + , link = "https://doi.org/10.1038/sj.ejcn.1602865" + } + , { author = "Jenkinson, A., et al." + , title = "Dietary Intakes of Polyunsaturated Fatty Acids and Indices of Oxidative Stress in Human Volunteers" + , journal = "European Journal of Clinical Nutrition" + , year = "1999" + , link = "https://doi.org/10.1038/sj.ejcn.1600783" + } + , { author = "de Kok, T. M. C. M., et al." + , title = "Analysis of Oxidative DNA Damage after Human Dietary Supplementation with Linoleic Acid" + , journal = "Food and Chemical Toxicology: An International Journal Published for the British Industrial Biological Research Association" + , year = "2003" + , link = "https://doi.org/10.1016/s0278-6915(02)00237-5" + } + , { author = "Södergren, E., et al." + , title = "A Diet Containing Rapeseed Oil-Based Fats Does Not Increase Lipid Peroxidation in Humans When Compared to a Diet Rich in Saturated Fatty Acids" + , journal = "European Journal of Clinical Nutrition" + , year = "2001" + , link = "https://doi.org/10.1038/sj.ejcn.1601246" + } + , { author = "Parfitt, V. J., et al." + , title = "Effects of High Monounsaturated and Polyunsaturated Fat Diets on Plasma Lipoproteins and Lipid Peroxidation in Type 2 Diabetes Mellitus" + , journal = "Diabetic Medicine: A Journal of the British Diabetic Association" + , year = "1994" + , link = "https://doi.org/10.1111/j.1464-5491.1994.tb00235.x" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Shenangians.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Shenangians.elm new file mode 100755 index 0000000..5dcee17 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Shenangians.elm @@ -0,0 +1,260 @@ +module Config.Pages.Blogs.MainBlog.Shenangians exposing (articleShenanigans) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleShenanigans : BlogArticle +articleShenanigans = + { articleName = "Cuckery 101: Cate Shanahan's Masterclass in Debate Dodging" + , articleLink = Path.toString Path.Blog_Shenanigans + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = True + , articleImage = "shenanigans" + , articlePublished = "Jun 6, 2024" + , articleBody = """ +It's basically a sound induction at this point that anti-seed oil clowns won't debate me. My comprehensive, 15,000+ word, 200+ reference [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on seed oils is almost three years old, and since it was published, nobody from the opposition has offered even a shred of substantive criticism toward it. A few have tried, but ultimately their efforts were akin to taking halfhearted swats at low-hanging fruit and ultimately failing, rather than actually meaningfully engaging with my core findings and the arguments underpinning my interpretations. They really are just a pathetically weak lot of human beings. + +At the risk of sounding self-aggrandizing, I think I have a pretty good idea why these people won't debate me—I have the tools to dismantle them. I'm well-versed on the relevant empirics, I'm intimately familiar with several formal systems of reasoning, I use semantic analysis to make sure my interlocutor's term meanings and usages are understood and remain consistent, I have decent knowledge of philosophy and, more specifically, scientific epistemology, and I deploy an algorithmic debate strategy. I am essentially kryptonite to anti-seed oil quacks. That's probably why they never show up to debate. + +My most recent exposure to anti-seed oil cuckery was so profoundly egregious that it warranted writing about it here on my main blog. This extra special example of subhuman behavior comes from Cate Shanahan herself, or as I like to call her, Cate Shenanigans. If you want more info on Cate Shenanigans' history of debate-dodging, I have compiled an inventory [here](https://www.the-nutrivore.com/dodgers). For now, let me start from the beginning. + +Nearly a year ago, I was [invited](https://x.com/zbitter/status/1668413822388916224) by Zach Bitter, via X, to debate the proposition "seed oils are not a significant, independent concern for public health" on his podcast with a willing interlocutor. Cate Shenanigans was [tagged](https://x.com/NTxLoneRider/status/1673811898645598211) in this post but did not reply. In fact, every single high-profile seed oil skeptic who responded to the thread declined my invite, while others, like Cate Shenanigans, were pinged and never replied. The nutrition debate arena was a ghost town that day. Not an ounce of courage was to be found among the anti-seed oil clowns. + +# THE DEBATE INVITATION + +However, nearly a year after that, Cate Shenanigans put out a general [invite](https://x.com/drcateshanahan/status/1773836787196346592) to debate. Even going so far as to [suggest](https://x.com/drcateshanahan/status/1774490576362062311) that I was scared to face her, to which I replied. Shortly after, she actually decided to engage and [replied](https://x.com/drcateshanahan/status/1774681584907559220) to me, encouraging me to DM her (presumably to work out the details of the debate). After some minor miscommunications, she instructed me in another [reply](https://x.com/drcateshanahan/status/1774830896006185446) to contact her via email. I did. I never received a reply. Some time passed, and Zach Bitter once again started [prodding](https://x.com/zbitter/status/1778171569967190413) at Cate Shenanigans about the status of her debate invitation to me (presumably with the intention of once again offering to host it). A day later, after a brief back and forth, Cate Shenanigans [replied](https://x.com/drcateshanahan/status/1778430104617603232) with what seemed like an alteration in the conditions to debate. At least this is how I interpreted it, as someone who has an interest in her arguments. I [pressed](https://x.com/upRootNutrition/status/1778456234078662984) her for clarification, and even quoted her in a [post](https://x.com/upRootNutrition/status/1778490825124552875) later that day about it, and received no reply. But not before she made her own [post](https://x.com/drcateshanahan/status/1778483241755787308) in a different thread, which I didn't initially see, wherein she withdrew from the debate that day. What a bizarre series of behaviours. + +# THE EMAIL EXCHANGE + +Fast forward to June 2nd, 2024, and I was DMed by another third party looking to coordinate yet another debate between Cate Shenanigans and myself. I won't reveal this person's identity and throw this individual under the bus, because they were nothing but cordial and respectful to me. After a short exchange, I was CC'd into an email chain with Cate Shenanigans, and this is where the fun begins. But rather than narrate the exchange, I'll just post it here: + +**Host:** + +> Hi cate +> +> Nick, CCed, would be down to do the seed oil debate for my show… Are you game? If so my team, CCed, can help to arrange… + +**Nick:** + +> If the debate proposition is clear and I disagree with it, then absolutely. I generally won't debate anything vague or normative, though. I'll happily debate a proposition like "seed oil consumption increases the risk of heart disease", for example. + +**Shenanigans:** + +> HI Host +> +> Someone else wanted to set up a debate on their podcast between myself and Nick. But what was proposed looked more like just an unstructured argument, and that is not something I’m interested in. I don’t know if the disconnect was with that host or with Nick….? So I’d like to make sure we’re all on the same page about what a debate is. +> +> A debate starts with an assertion and the two participants who are debating take opposing sides. +> +> So if Nick wants to debate, then the assertion could be “RBD vegetable oils are part of a healthy diet.” +> +> Sound good? + +**Host:** + +> What do you think Nick? + +**Nick:** + +> First of all, it's not just that someone else has previously wanted to set up a debate between Cate and myself. Cate herself put out what I (quite reasonably) interpreted as a general invitation to those challenging her positions, which can be found [here](https://x.com/drcateshanahan/status/1773836787196346592), on March 29th. I accepted the invite, to which Cate replied on March 31st with an invitation to me to DM her (presumably to set up a debate), which can be found [here](https://x.com/drcateshanahan/status/1774681584907559220). I responded via email on April 1st, after she invited me to do so [here](https://x.com/drcateshanahan/status/1774830896006185446), on the same day. There was no third party present at this time. This was Cate clearly inviting me, personally, to debate. Just to be clear about the facts. +> +> Furthermore, while we're being clear about the facts, Cate also presumably withdrew from the debate for what would be completely bizarre reasons that are ultimately orthogonal to the debate itself, which can be found [here](https://x.com/drcateshanahan/status/1778483241755787308). But, not before implying that she had altered the necessary conditions for a debate, which can be found [here](https://x.com/upRootNutrition/status/1778490825124552875). Whatever the case, declining to debate someone on an empirical position because they disagree with you on an unrelated normative position is **beyond** strange, and honestly it was so outlandish that I just flagged it as a blatant excuse not to debate. I hope, Host, you can also see that this is the most reasonable interpretation of her behaviour. +> +> Now that that's out of the way and clarified, I'd be happy to debate Cate on a number of propositions. So long as she's done making excuses. Specifically, I might want to debate against [this](https://x.com/drcateshanahan/status/1516786219841073153) proposition: +> +> "current levels of seed oil consumption are the main driver of the obesity and chronic disease epidemics that now represent an existential threat to human populations around the world. +> +> Out of all of her claims, this could easily be one of the most egregious, depending on how the semantics are unpacked. So, I'd need some of those semantics clarified. Cate, when you say seed oils are the main driver, do you mean that in a counterfactual scenario wherein all the seed oils in the food supply were replaced with low-PUFA alternatives like butter or tallow, those same diseases epidemics would be less likely to occur? If yes, I disagree with the proposition and will happily debate it. If not, what do you mean? +> +> As for the stuff about what the debate would be. I typically don't do "structured" debates in the traditional sense. They seem closer to theatrics than debates, with time limits and scheduled topic shifts, opening statements, closing statements, etc. I prefer a linear, continuous Socratic debate format where the truth value of a proposition can be scrutinized to completion with no get-out-of-jail free cards granted by the clock. If it takes many hours to reach a concession, so be it. Other formats typically just make sophistry and dodging easier to get away with, because one party can just filibuster until the clock runs out. +> +> Also, Cate, my debate style is far from unstructured. My debate algorithm can be found [here](https://drive.google.com/file/d/1QQaN6HRwzp3kY2DAcnHVBxeX6jBhrvkw/view). So everyone knows what to expect of me. No rational person would look at this and conclude that my approach to debate is unstructured. I just refuse to debate with my hands tied behind my back, or debate under conditions where the proposition can't be scrutinized to completion. + +**Host:** + +> Thanks Nick! +> Cate, you game to schedule? + +**Shenanigans:** + +> Dear Nick and Host, +> +> Nick, my tweet "sure I’ll take all comers,” was a casual proposition subject to agreeing on further details, which we have yet to do. +> +> Host, from Nick's email it looks like he wants to argue against a primary thesis of my book, without having read my book. That doesn’t seem like a debate to me.\u{00A0} +> +> In Dark Calories\u{00A0}I lay out the groundwork to support my claims across multiple chapters, each with scores of scientific references to support the arguments I make in the book. I can’t skip that information and jump right into a debate on my conclusions.\u{00A0} +> +> Maybe an analogy will help, here. Let’s say, hypothetically, that after publishing his theory of relativity, Einstein announced in a public forum “Hey everyone I think E=MC squared. Read my paper for supporting arguments." And then, someone wanted to debate his paper without having read it. Einstein would have been in a position to have to spell out many details of his complex thesis, including technical information that would probably not be interesting to a lay audience. (Not when presented in debate format. A good documentarian or science writer would be able to make it interesting, however.) In order to “win” the debate, Einstein may even have had to defend the veracity of fundamental principles of physics. That would take the form of a lecture, or a series of lectures. That’s not a debate. It’s a college course. +> +> Therefore, I’ve proposed we debate this: “Vegetable oils are heart healthy.” After all, that is what the AHA claims. It’s also what docctors learn, and it is influencing public policy, what American farmers grow, and what every child and adult eats. It’s an important topic that merits debate. I would argue against and Nick would argue for. +> +> Nick, are you willing to do that? + +**Host:** + +> I love that proposition “Vegetable oils are heart healthy.” +> +> What do u think Nick? + +**Nick:** + +> Just ignoring the fact that, in a blatant display of unbridled narcissism, Cate has unabashedly compared herself to Einstein, and her work to Einstein's theory of relativity, I'd like to ask Cate a few questions: +> +> 1. If I read your book, Dark Calories, will you debate the proposition I suggested (provided you actually unpack your semantics in a way that leads me to disagree with it)? If yes, surely you'd be willing to provide me with a free PDF of Dark Calories for me to scrutinize, no? +> +> 2. If you wish to debate what I believe on the subject, surely you've done me the likewise courtesy of reading my [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on the subject, right? If yes, why did you not suggest a proposition directly from my work? +> +> I also have some further objections to Cate's reasoning. Unlike Einstein's theories and models, the predictions of which could only be confirmed many decades later (if not a century later in some cases), Cate's thesis has been tested (and ultimately falsified with respect to human outcome data), which is why the debate would likely lead heavily into empirics and not require a whole book's worth of lectures on fundamentals. So no, I don't need to read her book to show that the proposition is false. Her reasoning here is ridiculous. +> +> Respectfully, Host and Cate, "vegetable oils are heart healthy" is an awful proposition, for a number of reasons: +> +> 1. It's not my proposition. +> 2. I don't represent the AHA. +> 3. I don't even care what the AHA says about seed oils. +> 4. I don't even know what it means because it's so semantically vague. +> 5. I can think and reason for myself and can defend my own propositions, thank you. +> +> How about we narrow the scope of the proposition I suggested down to a single disease? Since Cate quantifies the detrimental effects of seed oils over the entire scope of chronic diseases that qualify as epidemics, it is entailed logically that we could choose any disease within that scope. So, how about we meet half way on the subject and debate this proposition: +> +> "current levels of seed oil consumption are the main driver of heart disease." +> +> To the degree that Cate affirms that heart disease is an epidemic, she should affirm that the proposition is true. I affirm that the proposition is false. So, we simply exchange the relevant empirics and have the debate. EZPZ. + +**Shenanigans:** + +> Dear Host and Nick, +> +> I am interested in a debate on the topic I proposed. But I feel this particular email chain is no longer constructive.\u{00A0} +> +> Resorting to character attacks during what should be a civil conversation is outside the realm of what I consider acceptable discourse. +> +> Respectfully, +> Cate + +**Nick:** + +> You've attacked my character on multiple occasions, Cate. I don't care about that. Let's just discuss the arguments, and hammer out a path toward a productive debate. +> +> It's also ridiculous to imply that I'm not contributing productively to the conversation. I literally suggested a proposition that seems to satisfy us both. If I've failed to do that, please explain how so I can improve upon further suggestions. +> +> Just give me a yay or nay, Cate. I don't want to waste my time if you're not interested in actually defending your views or answering any clarifying questions. + +**Shenanigans:** + +> Nick, +> +> As I said two emails ago, because most people, including you, are not familiar with the scientific underpinnings of my work I would first need to explain them, and that is not a debate. +> +> What I proposed is a debate. If you are not interested in that debate then I believe we have reached the conclusion of this discussion. +> +> Best wishes to you. + +**Nick:** + +> And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering. +> +> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no. If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no. +> +> I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work? Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly? Why in the world do you want me to defend the AHA's prop and not a prop of my own? + +**Shenanigans:** + +> Nick I am responding to your questions and only your questions and I hope that can be the end of it. +> +> "And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering. +> +> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no." +> +> No. For reasons I explained. Just because you’ve read the book does not mean the audience has and I will still be in the position to essentially give a lecture on the topics in my books. Its simply not suitable for normal debate format. Furthermore, I’m not interested in debating someone who thinks familiarizing himself with the basic underpinnings of the topic being debated is optional. +> +> "If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no. +> +> N/A +> +> "I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work? +> +> I am familiar with your thoughts. You cite the same type of evidence that the AHA uses to support its heart healthy claim. +> +> "Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly? +> +> Not all propositions are equally interesting. I want to debate something interesting. +> +> "Why in the world do you want me to defend the AHA's prop and not a prop of my own? +> +> See above. Additionally, keep in mind that I did not bring you into this conversation. + +**Nick:** + +> So basically you're just dodging. Got it. +> +> Before we killscreen the entire enterprise, I would like one more answer to a question, because it might provide for a way forward. With respect to the AHA prop that you bizarrely want me to defend, what does it mean to say that seed oils are heart healthy? For example, does that mean that seed oils decrease the risk of heart disease? +> +> Because if that prop cashes out into a prop that I'd be willing to defend, then I don't see a reason why we couldn't debate it. If it means what I think it means, it'll just lead into the exact same empirical debate that you're currently dodging, so it makes no difference to me. + +**Host's Producer:** + +> Hi Nick and Cate, +> +> Host's Producer here; I'm the producer at [redacted]. Host and I agreed that we would like to conclude this discussion and explore other debate topics. The tone of the email discourse is not what we had in mind for our debut episode of this new podcast. +> +> We appreciate your consideration. + +**Nick:** + +> I'd be happy to debate cordially with somebody who is not a sophist. Cate, unfortunately, is one of the most dishonest actors in this entire space and deserves zero respect from anybody (though I would give her more than what she deserves and actually be respectful to her in a verbal discussion for the betterment of your podcast). There are people I could recommend who disagree with me who I don't think are dishonest but rather just confused about the empirics. If you guys are still interested in having a productive seed oil debate, I'd be happy to provide a list. +> +> Also if you're worried about my tone during the debate, you need not be concerned. I don't think anybody can actually find more than a single example of me being rude to my interlocutor across what is probably dozens of verbal debates by now. Other than that one exception, which I actually think was justified anyway, I am always polite and cordial with my interlocutor in verbal discussions. + +This is where the email exchange ended. So much of what Cate Shenanigans said was just brain-dead lunacy. Let's go through the list. + +# CATE'S RETARDATION + +**A) Suggesting that I defend a proposition that isn't my own** + +Why? Why in the world would I be asked to defend a proposition that I, myself, am not even sure I affirm? I'm not even sure what the proposition "seed oils are heart healthy" even means. Does it mean that seed oils will increase your VO2 max? Does it mean seed oils will cure hypertension? Who the hell knows. It was just beyond strange that it was even suggested and demonstrates to me that Cate Shenanigans is operating with a level-zero debate meta. + +Furthermore, if she was truly interested in contesting my views, why did she not pay me the likewise courtesy of reading my article and selecting a proposition directly from my own writing? Seems not only to be ridiculously stupid, but also a ridiculously stupid double-standard. Yet another example of Shenanigans-level cuckery. + +**B) Shifting the goalpost three times** + +Months ago, she dodged me on the grounds that I haven't read her book and that reading her book was necessary to have a debate. I [offered](https://x.com/upRootNutrition/status/1778490825124552875) to read her book then to satisfy the criteria and got no reply. Now, she dodged me for the second time on these grounds, and when I directly offered to read her book and satisfy her criteria, she shifted the goalpost a third time. Apparently, it's not good enough that I read her book, but now the entire audience needs to read her book in order for us to debate. This is just the most cuckish form of sophistry imaginable, and she should be ashamed. + +**C) Her goalposts are dumb anyway** + +To anyone with even a modicum of understanding with respect to scientific epistemology, it should be quite clear that Cate Shenanigans is dodging. Essentially, the strength of a scientific hypothesis does not rest upon its complexity, its elegance, its creativity, or any other such quality. It rests upon how scientifically virtuous it is, and this is determined by testing the hypothesis' compatibility with the theoretical virtues of science. I wrote a lengthy article on the subject [here](https://www.the-nutrivore.com/post/the-hitchhiker-s-guide-to-quack-smashing). + +To determine if a hypothesis is strong, we should ask three fundamental questions, compared to other hypotheses: + +1. Does this hypothesis make more novel predictions? + +2. Does this hypothesis explain a wider breadth of phenomena? + +3. Does this hypothesis make fewer overall assumptions? + + +There are other questions some philosophers think we should ask, but generally speaking, philosophers of science do not disagree about these three core questions. So, let's take them one by one. + +Firstly, the hypothesis doesn't really seem to make very many novel predictions at all. In fact, as I had previously discussed in another blog [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry), the overall weight of the literature heavily favours the negation of Cate Shenanigans' hypothesis. When confronted with this fact on a [podcast](https://gimletmedia.com/shows/science-vs/mehwdgww) (33:00), Cate Shenanigans had no compelling answers and merely insisted that it "didn't make any sense" and that every single study on the subject (150-300 studies by her count) was "flawed". Very persuasive, Dr. Shenanigans. Gold fucking star. + +As for the second question, the scope of her hypothesis is actually quite impressive. As she stated in the linked podcast above, seed oils literally have a causal role to play in every disease. That is quite an impressive scope. Think of all the phenomena this accounts for. Looks great for the hypothesis, except when we try to answer the third question. + +With respect to the final question we're asking, every disease Cate Shenanigans blames on seed oils in an attempt to inflate her scope, she piles on more and more assumptions. Assumptions that empirically verifiable pathophysiological mechanisms that explain a number of diseases, that have nothing to do with seed oils, are either wrong or so incomplete that they might as well be wrong. This produces an insane amount of assumptions. And that's not even counting the assumptions that are stacked in virtue of the hypothesis' failures to make novel predictions. + +As I explained in a previous article, The Hitchhiker's Guide to Quack-Smashing, quacks will often inflate scope at the expense of parsimony and/or fruitfulness. They want to be able to capture the widest scope of phenomena with their hypothesis without actually having evidence or having to explain a damn thing. + +No, Dr. Shenanigans, I don't need to read your book in order to debate your proposition that seed oils are responsible for all disease, or chronic disease, or even just heart disease. As I explained in the email exchange, the only thing that is required is an investigation into the empirical data that tests your hypothesis. We can test the fruitfulness, we can test the scope, and we can test the parsimony. You're just dodging because you are scared. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SweetDeception.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SweetDeception.elm new file mode 100755 index 0000000..3e01037 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SweetDeception.elm @@ -0,0 +1,383 @@ +module Config.Pages.Blogs.MainBlog.SweetDeception exposing (articleSweetDeception) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +articleSweetDeception : BlogArticle +articleSweetDeception = + { articleName = "Sweet Deception: Debunking Meme Diabetes Diets" + , articleLink = Path.toString Path.Blog_Sweetdeception + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "sweetdeception" + , articlePublished = "Apr 16, 2024" + , articleBody = """ +Because every online diet camp purports that their pet diet cures every disease known to mankind, naturally each one will give you some fantastical mechanistic story about how said diet cures type 2 diabetes mellitus (T2DM). In the paleo/keto/carnivore camp, people will often claim that T2DM is caused by chronic exposure to refined sugar, with some even going so far as to claim that it is caused by exposure to carbohydrates (CHO) more broadly (including foods like apples and even carrots). However, these days it is more trendy in that group to blame T2DM on vegetable oils, but I have previously debunked this on my blog. Over in the "whole food plant-based" (WFPB) cult, it is routinely remarked that T2DM is caused by intramyocellular lipid (IMCL), and that chronic exposure to the saturated fat (SFA) in animal products is responsible for the condition. + +In this article, I'll go over the mechanistic reasoning and experiment and/or observational support for these hypotheses, as well as provide an accounting of the leading hypothesis and its supporting evidence. Let's start off by tackling the fantastical notions dreamed up by our vegan friends, and address the IMCL hypothesis. + +## THE INTRAMYOCELLULAR LIPID HYPOTHESIS + +The core idea with this hypothesis is that IMCL, primarily in the form of triglycerides (TG) stored within lipid droplets in muscle cells, act through various pathways to disrupt insulin signaling. The IMCL hypothesis has drawn attention to the role of diet in modulating IMCL levels. High intakes of certain types of fats, particularly SFAs found abundantly in animal products, have been implicated by the proponents of this hypothesis in elevating IMCL levels and contributing to insulin resistance. + +This association is often highlighted in discussions on the benefits of WFPB diets for reducing the risk of T2DM and improving insulin sensitivity. Advocates of WFPB diets suggest that such a diet, which is typically lower in SFA and higher in unsaturated fats like monounsaturated fats (MUFA) and polyunsaturated fats (PUFA), which can purportedly help reduce IMCL accumulation and make traction against insulin resistance. + +The dietary focus is on whole grains, legumes, fruits, vegetables, nuts, and seeds, with minimal or no intake of animal products. The concern with animal products stems from their content of SFAs, dietary cholesterol, and perhaps even certain supposed inflammatory mediators (possibly Neu5Gc), which may contribute to increased IMCL levels and insulin resistance. WFPB proponents argue that replacing animal products with plant-based sources of protein and fat can mitigate these risks. But is it true? + +The IMCL hypothesis attempts to highlight the potential impact of IMCL accumulation on insulin resistance and physiological markers of T2DM. While WFPB are promoted as strategies to reduce IMCL and improve metabolic health, it's important to consider the broader literature and where this hypothesis lands with respect to epistemic virtues over other, possibly more prevailing hypotheses for which there is more evidence. + +The mechanistic case for the IMCL hypothesis was first outlined in the late 1990s with two small studies by Jacob, et al. and Perseghin, et al., which discovered relationships between IMCL and insulin resistance in T2DM-free subjects who were born of parents with T2DM [[1](https://pubmed.ncbi.nlm.nih.gov/10331418/)][[2](https://pubmed.ncbi.nlm.nih.gov/10426379/)]. In these experiments, the offspring of those with T2DM were subjected to the gold-standard measure of whole-body insulin sensitivity, the hyperinsulinemic-euglycemic clamp test (HEC). It was discovered that there was an inverse association between IMCL and insulin sensitivity, which led researchers to suspect that perhaps this biomarker was relevant to the pathophysiology of T2DM. + +![][image1] +[image1]: /blog/sweetdeception/image1.png + +Fast forward to 2004, and another small study from van Loon, et al. would introduce the hypothesis' first paradox [[3](https://pubmed.ncbi.nlm.nih.gov/15165998/)]. In this experiment, muscle biopsies and less precise (but still adequate) measures of insulin sensitivity were deployed in an investigation of subjects who were either sedentary, afflicted with T2DM, or who were trained athletes. The study found that the IMCL concentrations of IMCL were actually statistically significantly higher in athletic subjects compared to either sedentary or T2DM-afflicted subjects. Yet, the athletic subjects did not suffer from impaired insulin sensitivity or the hyperglycemia that is characteristic of T2DM. + +![][image2] +[image2]: /blog/sweetdeception/image2.png + +Researchers Coen and Goodpaster attempted to reconcile the findings in 2012 [[4](https://pubmed.ncbi.nlm.nih.gov/22721584/)]. They hypothesized that IMCL behaves differently in the context of T2DM, and that while IMCL serves as a fuel source in athletic subjects, in sedentary subjects with T2DM the IMCL seems to produce more disruptive mediators like ceramides and diacylglycerols. However, the authors tend to play fast and loose with their causal inferences, often citing animal research to buttress clear implications about what holds true in human beings. In fact, the majority of their supporting evidence is derived from mice, despite mice generally being poor facsimiles for human subjects [[5](https://pubmed.ncbi.nlm.nih.gov/31307492/)]. + +Some of the only human research they can cite are studies wherein there was an observed association between intramyocellular ceramides (IMCC) and insulin resistance. However, there are many biomarkers that serve as proxies for insulin resistance, and there did not seem to be a clear reason proposed by the authors to favour IMCC as causal or mediating. In fact, they cite research that offered conflicting evidence with a broader sample of human subjects, showing that IMCC has no clear association with insulin sensitivity [[6](https://pubmed.ncbi.nlm.nih.gov/18458871/)]. + +Additionally, Itani, et al (2002) discovered that the concentrations of IMCC do not differ substantially between subjects with varying degrees of insulin sensitivity [[7](https://pubmed.ncbi.nlm.nih.gov/12086926/)]. In fact, these researchers challenged subjects with lipids during a HEC to try to alter lipid states in muscle tissue, and ceramides did not change. However, a legitimate criticism of this study is that the lipid challenge done using Liposyn II, which is an intravenous lipid product consisting of 50% soybean oil and 50% safflower oil, making it over half PUFA in its composition. Coen and Goodpaster also cited research on diacylglycerols, but they themselves admit that the human data isn't particularly conclusive on the matter. + +To my knowledge there are no recent landmark human experiments that persuasively show that T2DM pathology can be modulated up or down with varying animal products, or even SFA, in the diet. Altogether, the hypothesis has a lot of failed predictions and phenomena to reconcile before it can be taken seriously and can even begin to be seen as epistemically virtuous compared to some other, more scientifically grounded hypotheses. What we need to see is a study that shows that removing SFA and/or animal products from the diets of those with T2DM actually makes traction against pathophysiological markers of T2DM. Ideally this would be done while also controlling for potential confounders or mediators that other competing hypotheses predict would make an impact. The aim is to demonstrate independent effects, and so far no research on the IMCL hypothesis persuasively does this. + +# THE SUGAR HYPOTHESIS + +Even though I have touched on this hypothesis five years ago [[8](https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html)], it bears repeating, with updated epistemic and philosophical rigour. For a recap, my original article challenges perceptions about T2DM that are common in the low carb (LC) diet sphere. I argue against the notions that sugar causes T2DM and that ketosis can somehow reverse it. But we're going to go a little deeper today. So, what is the hypothesis and how does it work? Basically, the hypothesis supposes that chronic exposure to refined sugar or insulin-stimulating CHO leads to T2DM through prolonged over-stimulation of the pancreas. This hypothesis involves several key mechanisms. + +Firstly, regular intake of high-sugar or high-glycemic CHOs prompts frequent blood insulin excursions by via the pancreas. To be clear, insulin is the hormone responsible for signaling cells to absorb glucose from the bloodstream for energy or storage. The idea is that over time, constant demand for more and more insulin can lead to insulin resistance via negative feedback. This is when cells become less responsive to insulin's signals because insulin levels are too high. This requires the pancreas to produce even more insulin to achieve the same effect, placing stress on the pancreatic beta cells (which are responsible for insulin secretion). + +Secondly, chronic over-stimulation of the pancreas due to persistent high sugar/CHO intake and supposed, resultant insulin resistance can lead to beta-cell dysfunction (which is characteristic of advanced T2DM). Over time, the beta cells' capacity to produce insulin can diminish due to the increased demand, oxidative stress, and subsequent glucotoxicity (toxicity due to hyperglycemia). This dysfunction contributes to the progression of T2DM, where insulin production eventually becomes insufficient to control blood sugar levels effectively. + +Lastly, high levels of circulating glucose (glucotoxicity) and fatty acids (lipotoxicity) are actually detrimental to pancreatic beta cells. High glucose levels can lead to the formation of reactive oxygen species (ROS), causing an inflammatory cascade effect, damaging beta cells and impairing insulin secretion. Similarly, elevated free fatty acids (FFAs) can accumulate in non-adipose tissues, including the pancreas, causing cellular dysfunction. + +The mechanisms, epidemiological, and experimental evidence for this hypothesis were most succinctly summarized by Stanhope in 2016 [[9](https://pubmed.ncbi.nlm.nih.gov/26376619/)]. This review discusses the evidence and controversies surrounding the impact of sugar consumption on T2DM, including mechanisms by which excess sugar intake may promote the development of T2DM directly and indirectly. It covers the direct metabolic pathways through which fructose, a component of table sugar, sucrose, can lead to intrahepatic lipid (IHL) accumulation and decreased insulin sensitivity, contributing to the pathophysiology of T2DM independent of total caloric intake. + +The author first refers to literature they themselves conducted, including three primary human trials demonstrating disturbances to energy expenditure, markers of liver function, as well as measures of IHL accumulation [[10](https://pubmed.ncbi.nlm.nih.gov/26376619/)][[11](https://pubmed.ncbi.nlm.nih.gov/21952692/)][[12](https://pubmed.ncbi.nlm.nih.gov/22828276/)]. The first trial discovered that isocaloric feeding of fructose compared to glucose over a ten-week period significantly increased hepatic fat. + +![][image3] +[image3]: /blog/sweetdeception/image3.png + +However, it's unclear what the clinical significance of this finding is, considering that the fructose-based intervention resulted in significant overfeeding and only increased fasting glucose by 5% compared to the glucose-based control. Seems like the authors tried pretty damn hard to induce a T2DM phenotype feeding fructose to subjects, and were ultimately unable to achieve that. In fact, they weren't really able to get close. Even the oral glucose tolerance test results, though far from ideal, showed an altogether normal blood glucose curve for the fructose group. + +![][image4] +[image4]: /blog/sweetdeception/image4.png + +The second trial was unremarkable, and suggested that fructose consumption may decrease energy expenditure over time when isocalorically compared to glucose. Again, it's interesting, but it's far from demonstrating a cause and effect relationship between T2DM and sugar. The third trial is a bit more complicated to unpack. Basically, subjects were split into two groups, 25% of calories as either fructose or glucose as parts of eucaloric diets over 10 weeks, with the primary endpoints beings measures of liver function. Overall, the results of the trial suggest a significantly detrimental effect of fructose compared to glucose on a number of markers related to liver function. However, it's slightly more complicated than that. + +While it's true that the treatment effect showed a benefit of glucose over fructose, it's also true that the marker of liver function that was negatively perturbed was gamma-glutamyl transferase (GTT). The change in GGT was also barely statistically significant compared to baseline, while markers such as aspartate aminotransferase (AST) and alanine aminotransferase (ALT) showed a non-significant decrease. Glucose showed greater reductions that were barely statistically significantly different from that of fructose. + +![][image5] +[image5]: /blog/sweetdeception/image5.png + +Other than that, fructose did seem to increase uric acid levels to a statistically significant degree, making fructose a potential aggravating factor for conditions such as gout. But again, this is a far cry from causally linking fructose consumption to the development of T2DM, especially since fructose seemed to do nothing particularly interesting to markers of liver function. It is true that sugar intake is severely negatively associated with health outcomes [[13](https://pubmed.ncbi.nlm.nih.gov/34444794/)]. However, while this is a consistent finding, clinical trials on sugar consistently fail to demonstrate a connection between sugar intake and the development of T2DM. + +We can indirectly test the sugar hypothesis by looking at long-term data in those following ketogenic diets for T2DM remission. If subjects cut nearly all carbohydrates out of their diets, presumably this subsumes sugar, and could present a valid test of the hypothesis. One such study might be the Virta Health trial [[14](https://pubmed.ncbi.nlm.nih.gov/29417495/)]. In this trial, a non-randomized, self-selected sample of eager subjects elected to participate in a cutting-edge, individualized dietary intervention program, with the aim of nutritional ketosis, called the Continuous Care Intervention (CCI), utilizing a web-app, ketone-verified adherence monitoring, and constant patient support. + +> Other aspects of the diet were individually prescribed to ensure safety, effectiveness, and satisfaction, including consumption of 3–5 servings of non-starchy vegetables and adequate mineral and fluid intake for the ketogenic state. At onset of dietary changes, participants were advised to consume a multivitamin, 1000–2000 IU vitamin D3, and up to 1000 mg omega-3 daily. If participants exhibited signs of magnesium depletion (e.g., muscle twitches or cramps), daily supplementation (500 mg magnesium oxide or 200 mg magnesium chloride) was suggested. If participants exhibited headaches, constipation, or lightheadedness, adequate sodium and fluid intake was recommended. + +Suffice it to say, there would be little, if any, room for sugar while on such a diet. These subjects were followed up for one year, and, as expected (given the high potential for bias with such a study design), results were impressive. By the end of the first year, the control group was floundering and the CCI group managed to achieve a massive 1.3% reduction in HbA1c, which effectively pushed the once diabetic group into the non-diabetic range on average. However, this change was commensurate with a 14.3% drop in body weight, which we'll revisit in a later section of this article. + +Despite these improvements, recidivism continued to climb. As of two years, the CCI group had crept back into the diabetic range on average [[15](https://pubmed.ncbi.nlm.nih.gov/31231311/)]. By, 3.5 years, the CCI group was once again firmly within the diabetic range on average, having regained a significant amount of weight [[16](https://www.hsrd.research.va.gov/publications/esp/virtual-diet-brief.pdf)][[17](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7208790/)]. + +![][image6] +[image6]: /blog/sweetdeception/image6.png + +To be clear, there was a clear distinction between remission and reversal, as defined by the authors. Remission was a much more robust measure of traction against T2DM than reversal, even though it sounds like the latter is stronger than the former. Remission was defined in two parts; partial remission and complete remission. Partial remission was defined as "sub-diabetic hyperglycemia of at least 1 year duration, HbA1c level between 5.7-6.5%, without any medications (two HbA1c measurements)" and complete remission was defined as "Normoglycemia of at least 1 year duration, HbA1c below 5.7%, without any medications (two HbA1c measurements)". Reversal was defined more loosely, as "sub-diabetic hyperglycemia and normoglycemia (HbA1c below 6.5%), without medications except metformin" (Athinarayanan, et al., (2019), Supplement Table 2). + +Unfortunately, all but the second year remission data is either aggregated or ambiguous, so it's difficult to make distinctions between partial and complete remission for years one and 3.5. However, at year two only 6.7% of the cohort had achieved complete remission. It's not clear what percentage of the cohort achieved complete remission by year 3.5. Furthermore, reversal rates, as they're defined, are probably just reflecting attrition rates (which were 26%), as the criteria for reversal is having achieved a sub-diabetic blood glucose at least once throughout the trial. It's actually not clear how meaningful that data even is on that definition. + +While a 9% weight reduction over 3.5 years is impressive, I'll reiterate the limitations— the subjects were self-selected, and highly motivated to participate in the CCI. In fact, the patients were paying customers of Virta Health's cutting-edge primary care service. This significantly challenges the external validity of the findings, as impressive as they are, to the general population. What we're seeing are results in the context of what is likely to be extraordinary ambition to succeed, and should be interpreted with caution. + +As for how these results relate to the sugar hypothesis, it's difficult to tell, had the subjects managed to control their weight. However, adherence rates to the diet dropped significantly by year two, with nutritional ketosis being achieved in 96% of CCI subjects in year one to only 14.1% by the end of year two. This non-adherence makes it difficult to infer the degree of sugar avoidance actually observed by the cohort on average, and makes cause and effect conclusions difficult to draw. There was no 3.5 year data on ketosis rates, and one can only speculate as to why. But given the poor adherence at two years, it's probably not unreasonable to assume it's because the numbers didn't look very good. + +## THE OXIDATION HYPOTHESIS + +The underlying premise is that PUFAs, particularly omega-6 fatty acids found in seed oils, are susceptible to oxidation. When oxidized, these fatty acids can form reactive compounds such as malondialdehyde (MDA) and other harmful products, leading to cellular damage and oxidative stress. In the context of the pancreas and liver, organs that, as previously mentioned, are crucial for glucose metabolism and insulin regulation, such oxidative stress could impair their function, contributing to insulin resistance and β-cell dysfunction— key features of T2DM. A tidy little bundle of sophistry indeed. + +Since I've already covered how the human outcome data flies in the face of this hypothesis in a previous article [[18](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry)], I won't rehash all of it here. But, essentially there is no human outcome data supporting this effect across multiple cohort studies and multiple RCTs. In the epidemiology, tight markers of seed oil consumption show a consistent inverse association with T2DM [[19](https://pubmed.ncbi.nlm.nih.gov/29032079/)]. + +![][image7] +[image7]: /blog/sweetdeception/image7.png + +Additionally, there have been several interventions feeding large amounts of PUFA to subjects, to the exclusion of SFA, and measuring long term effects on insulin sensitivity [[20](https://www.sciencedirect.com/science/article/abs/pii/0163782781900709)][[21](https://pubmed.ncbi.nlm.nih.gov/1347091/)]. In both Houtsmuller, et al. (1979) and Watts, et al. (1992), long term feeding of PUFA was associated with improvements in insulin sensitivity. In the case of the former trial, the insulin sensitivity measure, an oral glucose tolerance test (OGTT), showed improvement to glucose tolerance among diabetics over time. These results were aggregated by Hooper, et al. back in 2020 in an exploratory analysis [[22](https://pubmed.ncbi.nlm.nih.gov/32428300/)]. + +![][image8] +[image8]: /blog/sweetdeception/image8.png + +Additionally, we can also see that Ley, et al. (2004) showed an improvement in OGTT results, but with the substitution of CHO for SFA, rather than PUFA for SFA (which is kinda funny) [[23](https://pubmed.ncbi.nlm.nih.gov/14739050/)]. + +## THE TWIN CYCLES HYPOTHESIS + +The prevailing hypothesis, or the hypothesis that has been given the most credence in this domain, is the twin cycles hypothesis (TCH), which was spearheaded by Prof. Roy Taylor. It is closely interconnected with another concept from Prof. Taylor's work, known as the personal fat threshold (PFT). So what are these things? Let's start with the TCH. The TCH postulates that there are two stages, or "cycles", to T2DM development. The TCH was first discussed in a 2011 paper by Lim, et al. (coauthored by Prof. Taylor) detailing the development of the hypothesis from previous clinical trials performed on patients with T2DM [[24](https://pubmed.ncbi.nlm.nih.gov/21656330/)]. This trial would come to be known as the Counteracting Pancreatic Inhibition by Triglyceride (CounterPoint) study, and would be reviewed in greater detail two years later by the same authors [[25](https://pubmed.ncbi.nlm.nih.gov/23075228/)]. + +The first cycle originates in the liver, where chronic, excess calorie intake leads to ectopic fat accumulation, causing hepatic insulin resistance. The reason for this is because tissues that are energy replete will resist the action of insulin, which is a signalling hormone responsible for facilitating energy deposition in tissues. The second cycle concerns the pancreas, where the continued excess fat spills over to the pancreas (primarily via nonesterified fatty acids (NEFA), leading to lipotoxicity and subsequently impairing β-cell function. Ultimately, this contributes to β-cell dysfunction, rather than outright β-cell death, as the pivotal event in diabetes progression. + +In fact, the TCH originally came about by appreciating that the assumptions typically relied upon when inferring β-cell death in T2DM patients may be faulty. Usually, we infer to β-cell death by staining pancreatic tissue for insulin; no insulin, no β-cells. However, what if the β-cells aren't really dead? What if the diabetic pancreas is just so dysfunctional that the β-cells aren't producing as much insulin? Those assumptions would have us believing that the β-cells are dead when in fact they are merely dormant due to lipotoxicity— waiting to be brought back to life upon fat mass loss. Which brings us to the next piece of the puzzle. + +Now let's discuss the PFT, and how it ties into the overall picture. Essentially, the PFT posits that hepatic and pancreatic fat deposition are facilitated by accumulating more subcutaneous body fat (SBF) than one's body can tolerate, regardless of whether their body mass index (BMI) categorizes them as overweight or obese [[26](https://pubmed.ncbi.nlm.nih.gov/25515001/)]. In basic terms, after non-hepatic, non-pancreatic tissues get too fat, there is a spillover of fat (precipitated by chronic calorie excess) onto the liver and the pancreas, which initiates the T2DM phenotype. + +Think about it. There's just nowhere left for the energy substrates to go, be it glucose, triglycerides (TG), or even amino acids. They're all increased with T2DM, because all the tissues are energy replete. The liver and the peripheral tissues essentially play a never-ending game of ping pong with the energy substrates because no tissues are able to take on the extra calories. This hypothesis was tested with vindicating results in a recent trial by Taylor, et al. in 2024 [[27](https://pubmed.ncbi.nlm.nih.gov/37593846/)]. Essentially, it seems that T2DM development and remission have very little, if anything, to do with BMI, and BMI may be a very poor risk factor for T2DM, due to the individual variation in the PFT from person to person. + +Now that we have a clear understanding of the model, let's discuss the overwhelming evidence in favour of it. The clinical trials that first gave rise to the TCH were human experiments that involved both pharmaceutical and dietary means of reducing hepatic fat [[28](https://pubmed.ncbi.nlm.nih.gov/18535187/)][[29](https://pubmed.ncbi.nlm.nih.gov/15734833/)]. + +For the first study by Ravikumar, et al., a single-arm trial of 10 subjects, the drug pioglitazone was investigated for its effects on markers of T2DM, particularly postprandial endogenous glucose production (EGP) using isotope labeled glucose, as well as IHL. After 16 weeks of treatment, the pioglitazone group experienced an increase in total body weight equal to +6.2kg on average. Yet, the pioglitazone group also experienced a decrease in IHL. + +![][image9] +[image9]: /blog/sweetdeception/image9.png + +However, to be fair, the pioglitazone group also experienced a significant decrease in IMCL as well, however there was no significant correlation between decreases in IMCL and EGP. There was however, a direct association between IHL and EGP. Although this trial was not controlled, it certainly doesn't produce results expected on the IMCL hypothesis, and it lends further credence to the TCH. Additionally, many markers of T2DM subsequently improved, such as plasma glucose, hemoglobin A1c (HbA1c), and even TGs, with the changes being -2.3mmol/L, -1.9%, and 0.4mmol/L, respectively. + +![][image10] +[image10]: /blog/sweetdeception/image10.png + +It can also be inferred that there was a meaningful increase in insulin sensitivity, given the fact that plasma glucose dropped despite the same amount of insulin being produced by subject. Essentially, glucose disposal per unit insulin went up, implying that insulin signalling had improved. + +![][image11] +[image11]: /blog/sweetdeception/image11.png + +In the second study by Petersen, et al., eight subjects with T2DM were compared to 10 healthy volunteers in a non-randomized weight loss trial over an average of seven weeks. Essentially, subjects were followed up until normoglycemia was achieved, so not every subject was subjected to the same amount of weight loss for the same time period. In this time, body weight dropped by an average of 8kg in the T2DM group. This was marked with commensurate drops in plasma glucose, plasma insulin, and TG, at -2.4mmol/L, -108pmol/L, and -0.3mmol/L, respectively. + +![][image12] +[image12]: /blog/sweetdeception/image12.png + +The most interesting and surprising finding was that there was no significant change in IMCL despite weight loss. But, subjects did end up achieving normoglycemia and near normal insulin sensitivity as determined by a HEC. However, much like the previous study, insulin sensitivity was directly associated with IHL reduction. Once again, this flies in the face of the IMCL hypothesis, and offers further support for the TCH as the T2DM approached nearly normal levels of IHL. Although neither of these papers directly test for evidence of the sugar or oxidation hypotheses, it should be noted that both of these trials involve the consumption of both sugar and most likely animal products. + +In light of this evidence, Steven and Taylor conducted another preliminary human trial, the CounterBalance study, involving 29 subjects in 2015 to test the effects of the same intervention in those with long- versus short-term T2DM [[30](https://pubmed.ncbi.nlm.nih.gov/25683066/)]. Both groups experienced similar weight loss (short-duration: 14.8%, long-duration: 14.4%), indicating that the VLCD was effective for weight reduction regardless of diabetes duration. These results were also durable throughout the six month post-intervention follow-up. + +In terms of other T2DM markers, such as plasma glucose, the response to the diet was heterogeneous among participants with long-term T2DM. Some showed similar responses to those in the short-term group and some responded slowly. By the end of the study, 87% of the short-term group and 50% of the long-term group achieved non-T2DM fasting plasma glucose levels. HbA1c levels also decreased in both groups, with a more significant reduction observed in the short-term group. However, there was an unforeseen result— about half of subjects did not respond to the treatment at all, which was not expected given nearly all previous research. + +![][image13] +[image13]: /blog/sweetdeception/image13.png + +Given these results and Prof. Taylor's previous characterization of the PFT concept, the most likely hypothesis seemed clear— these people just needed to lose more weight, which we'll get to later. For now, there was enough evidence of the effectiveness of weight loss for T2DM treatment that Prof. Taylor and his colleagues decided it was time to test the efficacy of the treatment in a real-world outpatient scenario. A cluster-randomized experiment was designed and undertaken, and would come to be known as the Diabetes Remission Clinical Trial (DiRECT) [[31](https://pubmed.ncbi.nlm.nih.gov/29221645/)]. + +![][image14] +[image14]: /blog/sweetdeception/image14.png + +The DiRECT trial involved 298 subjects across 49 primary care practices (or clusters) randomized two groups, a control group receiving the standard of care for T2DM management, and the treatment group receiving a three stage program: stage one, total diet replacement; stage two, food reintroduction; phase three, weight maintenance. For the first stage, the treatment group received a liquid diet consisting of four packets of meal replacement formula, which totaled around 825-853 kcal/day for three to five months (depending on patient-specific goals). For the second stage, after subjects completed the first weight loss phase of the trial, food was gradually reintroduced over a period of two weeks to two months. During the last stage, patients were followed up over the course of around a year. The results were encouraging. + +Over the course of the trial, the treatment group lost an average of 10kg, with over 86% of them achieving T2DM remission by the end of the first year. An interesting finding was that on average, at the end of the first year, the treatment group still technically qualified as obese, despite the vast majority of them achieving T2DM remission. This would come to be the first nail in the coffin with respect to the idea that T2DM was somehow coupled to BMI. Additionally, patients experienced significant improvements to quality of life without serious side effects or complications. Altogether the treatment was successful, well-tolerated, and produced impressive rates of T2DM remission that was durable long-term. + +However, Prof. Taylor's group published two follow-up, long term durability studies on the DiRECT trial [[32](https://pubmed.ncbi.nlm.nih.gov/30852132/)][[33](https://pubmed.ncbi.nlm.nih.gov/38423026/)]. The results of these follow-up studies was bitter-sweet. At the two-year follow-up, only 41% of the treatment group remained in remission compared to the previous year, and only 10% at five years of follow-up. These results were not promising for the treatment over time once people were reintroduced to their previous diets and left without practitioner support. Even after the two-year follow-up, 94 or the remaining 101 subjects in the treatment group were given access to extended care, which only resulted in 13% remission rates within the extended care group at five years. + +It sounds bleak, but let's think about it. Prof. Taylor's research was essentially testing two things at the end of the day— the conceptual model of T2DM, encompassing the TCH and the PFT, as well as the efficacy of radical weight loss in an outpatient setting. With respect to the former, Taylor's work has been a resounding success, and it buttresses the strongest model of T2DM development and progression that we currently have. In regards to the latter, radical supervised weight loss with the practitioner support did not yield terribly promising results beyond two years. All isn't lost, though. + +The important thing is that we now have a firm grasp about what causes T2DM. It isn't sugar, seed oils, animal fat, or any other harebrained dietary boogeyman. It's just energy poisoning, with a simple, easy-to-understand etiology; if you gain more fat than your body can tolerate, you develop the phenotype of T2DM. If at that point you do indeed lose enough body fat to fall back below the maximum your body can withstand, T2DM remission follows. The last piece of the puzzle is figuring out what factors cause over-consumption, and how to durably address excessive body fat. + +## DISCUSSION + +In conclusion, while a myriad of hypotheses continue to circulate within nutritional and diabetic research spheres regarding the genesis and treatment of T2DM, it becomes increasingly clear that simplicity often guides the best practice. The TCH, underscored by the PFT, offers a cogent framework suggesting that T2DM is not merely a product of specific dietary components like sugars, SFA, or PUFA, but rather a complex interplay of caloric excess leading to dysfunctional energy storage and insulin response. As emerging studies, such as those by Prof. Taylor and his colleagues, indicate, interventions aiming at substantial and sustained weight loss may hold the key to reversing T2DM, provided these interventions are maintained with consistent medical oversight and support. + +While the exploration of dietary influence on T2DM remains important, we also have to acknowledge the apparently lack of elasticity of our food culture and the stark tendency toward recidivism with dietary intervenions. Emerging pharmacological interventions, particularly GLP-1 receptor agonists, are presenting promising frontiers in the management and potential reversal of this condition. As we advance, the integration of such pharmaceutical approaches alongside dietary management could revolutionize the treatment landscape of T2DM. Emphasizing the synergy between medication and lifestyle changes will likely be pivotal in crafting effective, personalized treatment plans that address both the biochemical and lifestyle facets of diabetes care. + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting! + +# BIBLIOGRAPHY""" + , articleReferences = + [ { author = "Jacob, S., et al." + , title = "Association of Increased Intramyocellular Lipid Content with Insulin Resistance in Lean Nondiabetic Offspring of Type 2 Diabetic Subjects" + , journal = "Diabetes" + , year = "1999" + , link = "https://doi.org/10.2337/diabetes.48.5.1113" + } + , { author = "Perseghin, G., et al." + , title = "Intramyocellular Triglyceride Content Is a Determinant of in Vivo Insulin Resistance in Humans: A 1H-13C Nuclear Magnetic Resonance Spectroscopy Assessment in Offspring of Type 2 Diabetic Parents" + , journal = "Diabetes" + , year = "1999" + , link = "https://doi.org/10.2337/diabetes.48.8.1600" + } + , { author = "van Loon, Luc J. C., et al." + , title = "Intramyocellular Lipid Content in Type 2 Diabetes Patients Compared with Overweight Sedentary Men and Highly Trained Endurance Athletes" + , journal = "American Journal of Physiology. Endocrinology and Metabolism" + , year = "2004" + , link = "https://doi.org/10.1152/ajpendo.00464.2003" + } + , { author = "Coen, Paul M., and Bret H. Goodpaster" + , title = "Role of Intramyocelluar Lipids in Human Health" + , journal = "Trends in Endocrinology and Metabolism: TEM" + , year = "2012" + , link = "https://doi.org/10.1016/j.tem.2012.05.009" + } + , { author = "Leenaars, Cathalijn H. C., et al." + , title = "Animal to Human Translation: A Systematic Scoping Review of Reported Concordance Rates" + , journal = "Journal of Translational Medicine" + , year = "2019" + , link = "https://doi.org/10.1186/s12967-019-1976-2" + } + , { author = "Skovbro, M., et al." + , title = "Human Skeletal Muscle Ceramide Content Is Not a Major Factor in Muscle Insulin Sensitivity" + , journal = "Diabetologia" + , year = "2008" + , link = "https://doi.org/10.1007/s00125-008-1014-z" + } + , { author = "Itani, Samar I., et al." + , title = "Lipid-Induced Insulin Resistance in Human Muscle Is Associated with Changes in Diacylglycerol, Protein Kinase C, and IkappaB-Alpha" + , journal = "Diabetes" + , year = "2002" + , link = "https://doi.org/10.2337/diabetes.51.7.2005" + } + , { author = "\"The Nutrivore\"" + , title = "The Nutrivore: Sugar Doesn’t Cause Diabetes, and Ketosis Doesn’t Reverse It" + , journal = "The Nutrivore" + , year = "2019" + , link = "https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html" + } + , { author = "Stanhope, Kimber L." + , title = "Sugar Consumption, Metabolic Disease and Obesity: The State of the Controversy" + , journal = "Critical Reviews in Clinical Laboratory Sciences" + , year = "2016" + , link = "https://doi.org/10.3109/10408363.2015.1084990" + } + , { author = "Stanhope, Kimber L., et al." + , title = "Consuming Fructose-Sweetened, Not Glucose-Sweetened, Beverages Increases Visceral Adiposity and Lipids and Decreases Insulin Sensitivity in Overweight/Obese Humans" + , journal = "The Journal of Clinical Investigation" + , year = "2009" + , link = "https://doi.org/10.1172/JCI37385" + } + , { author = "Cox, C. L., et al." + , title = "Consumption of Fructose-Sweetened Beverages for 10 Weeks Reduces Net Fat Oxidation and Energy Expenditure in Overweight/Obese Men and Women" + , journal = "European Journal of Clinical Nutrition" + , year = "2012" + , link = "https://doi.org/10.1038/ejcn.2011.159" + } + , { author = "Cox, Chad L., et al." + , title = "Consumption of Fructose- but Not Glucose-Sweetened Beverages for 10 Weeks Increases Circulating Concentrations of Uric Acid, Retinol Binding Protein-4, and Gamma-Glutamyl Transferase Activity in Overweight/Obese Humans" + , journal = "Nutrition & Metabolism" + , year = "2012" + , link = "https://doi.org/10.1186/1743-7075-9-68" + } + , { author = "Meng, Yantong, et al." + , title = "Sugar- and Artificially Sweetened Beverages Consumption Linked to Type 2 Diabetes, Cardiovascular Diseases, and All-Cause Mortality: A Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies" + , journal = "Nutrients" + , year = "2021" + , link = "https://doi.org/10.3390/nu13082636" + } + , { author = "Hallberg, Sarah J., et al." + , title = "Effectiveness and Safety of a Novel Care Model for the Management of Type 2 Diabetes at 1 Year: An Open-Label, Non-Randomized, Controlled Study" + , journal = "Diabetes Therapy: Research, Treatment and Education of Diabetes and Related Disorders" + , year = "2018" + , link = "https://doi.org/10.1007/s13300-018-0373-9" + } + , { author = "Athinarayanan, Shaminie J., et al." + , title = "Long-Term Effects of a Novel Continuous Remote Care Intervention Including Nutritional Ketosis for the Management of Type 2 Diabetes: A 2-Year Non-Randomized Clinical Trial" + , journal = "Frontiers in Endocrinology" + , year = "2019" + , link = "https://doi.org/10.3389/fendo.2019.00348" + } + , { author = "Veazie, S., Vela, K., & Helfand, M." + , title = "Evidence Brief: Virtual Diet Programs for Diabetes" + , journal = "Evidence Synthesis Program (ESP)" + , year = "2020" + , link = "http://www.hsrd.research.va.gov/publications/esp/" + } + , { author = "McKenzie, Amy, et al." + , title = "SUN-LB113 A Continuous Remote Care Intervention Utilizing Carbohydrate Restriction Including Nutritional Ketosis Improves Markers of Metabolic Risk and Reduces Diabetes Medication Use in Patients With Type 2 Diabetes Over 3.5 Years" + , journal = "Journal of the Endocrine Society" + , year = "2020" + , link = "https://doi.org/10.1210/jendso/bvaa046.2302" + } + , { author = "Hiebert, Nick" + , title = "A Comprehensive Rebuttal to Seed Oil Sophistry" + , journal = "The Nutrivore" + , year = "2021" + , link = "https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry" + } + , { author = "Wu, Jason H. Y., et al." + , title = "Omega-6 Fatty Acid Biomarkers and Incident Type 2 Diabetes: Pooled Analysis of Individual-Level Data for 39,740 Adults from 20 Prospective Cohort Studies" + , journal = "The Lancet. Diabetes & Endocrinology" + , year = "2017" + , link = "https://doi.org/10.1016/S2213-8587(17)30307-8" + } + , { author = "Houtsmuller, A. J., et al." + , title = "Favorable Influences of Linoleic Acid on the Progression of Diabetic Micro- and Macroangiopathy in Adult Onset Diabetes Mellitus" + , journal = "Progress in Lipid Research" + , year = "1981" + , link = "https://doi.org/10.1016/0163-7827(81)90070-9" + } + , { author = "Watts, G. F., et al." + , title = "Effects on Coronary Artery Disease of Lipid-Lowering Diet, or Diet plus Cholestyramine, in the St Thomas’ Atherosclerosis Regression Study (STARS)" + , journal = "Lancet (London, England)" + , year = "1992" + , link = "https://doi.org/10.1016/0140-6736(92)90863-x" + } + , { author = "Hooper, Lee, et al." + , title = "Reduction in Saturated Fat Intake for Cardiovascular Disease" + , journal = "The Cochrane Database of Systematic Reviews" + , year = "2020" + , link = "https://doi.org/10.1002/14651858.CD011737.pub2" + } + , { author = "Ley, Sarah J., et al." + , title = "Long-Term Effects of a Reduced Fat Diet Intervention on Cardiovascular Disease Risk Factors in Individuals with Glucose Intolerance" + , journal = "Diabetes Research and Clinical Practice" + , year = "2004" + , link = "https://doi.org/10.1016/j.diabres.2003.09.001" + } + , { author = "Lim, E. L., et al." + , title = "Reversal of Type 2 Diabetes: Normalisation of Beta Cell Function in Association with Decreased Pancreas and Liver Triacylglycerol" + , journal = "Diabetologia" + , year = "2011" + , link = "https://doi.org/10.1007/s00125-011-2204-7" + } + , { author = "Taylor, R." + , title = "Banting Memorial Lecture 2012: Reversing the Twin Cycles of Type 2 Diabetes" + , journal = "Diabetic Medicine: A Journal of the British Diabetic Association" + , year = "2013" + , link = "https://doi.org/10.1111/dme.12039" + } + , { author = "Taylor, Roy, and Rury R. Holman" + , title = "Normal Weight Individuals Who Develop Type 2 Diabetes: The Personal Fat Threshold" + , journal = "Clinical Science (London, England: 1979)" + , year = "2015" + , link = "https://doi.org/10.1042/CS20140553" + } + , { author = "Taylor, Roy, et al." + , title = "Aetiology of Type 2 Diabetes in People with a ‘normal’ Body Mass Index: Testing the Personal Fat Threshold Hypothesis" + , journal = "Clinical Science (London, England: 1979)" + , year = "2023" + , link = "https://doi.org/10.1042/CS20230586" + } + , { author = "Ravikumar, Balasubramanian, et al." + , title = "Pioglitazone Decreases Fasting and Postprandial Endogenous Glucose Production in Proportion to Decrease in Hepatic Triglyceride Content" + , journal = "Diabetes" + , year = "2008" + , link = "https://doi.org/10.2337/db07-1828" + } + , { author = "Petersen, Kitt Falk, et al." + , title = "Reversal of Nonalcoholic Hepatic Steatosis, Hepatic Insulin Resistance, and Hyperglycemia by Moderate Weight Reduction in Patients with Type 2 Diabetes" + , journal = "Diabetes" + , year = "2005" + , link = "https://doi.org/10.2337/diabetes.54.3.603" + } + , { author = "Steven, S., and R. Taylor" + , title = "Restoring Normoglycaemia by Use of a Very Low Calorie Diet in Long- and Short-Duration Type 2 Diabetes" + , journal = "Diabetic Medicine: A Journal of the British Diabetic Association" + , year = "2015" + , link = "https://doi.org/10.1111/dme.12722" + } + , { author = "Lean, Michael Ej, et al." + , title = "Primary Care-Led Weight Management for Remission of Type 2 Diabetes (DiRECT): An Open-Label, Cluster-Randomised Trial" + , journal = "Lancet (London, England)" + , year = "2018" + , link = "https://doi.org/10.1016/S0140-6736(17)33102-1" + } + , { author = "Lean, Michael E. J., et al." + , title = "Durability of a Primary Care-Led Weight-Management Intervention for Remission of Type 2 Diabetes: 2-Year Results of the DiRECT Open-Label, Cluster-Randomised Trial" + , journal = "The Lancet. Diabetes & Endocrinology" + , year = "2019" + , link = "https://doi.org/10.1016/S2213-8587(19)30068-3" + } + , { author = "Lean, Michael Ej, et al." + , title = "5-Year Follow-up of the Randomised Diabetes Remission Clinical Trial (DiRECT) of Continued Support for Weight Loss Maintenance in the UK: An Extension Study" + , journal = "The Lancet. Diabetes & Endocrinology" + , year = "2024" + , link = "https://doi.org/10.1016/S2213-8587(23)00385-6" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Template.elm b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Template.elm new file mode 100755 index 0000000..38fa1d9 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Template.elm @@ -0,0 +1,29 @@ +module Config.Pages.Blogs.MainBlog.Template exposing (article) + +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Route.Path as Path + + +article : BlogArticle +article = + { articleName = "" + , articleLink = Path.toString Path.Blog_ + , articleAuthor = "Nick Hiebert" + , isNewTabLink = False + , hasReferences = True + , hasTableOfContents = True + , articleImage = "" + , articlePublished = "" + , articleBody = """ + + +Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Blogs/Types.elm b/packages/website/frontend/src/Config/Pages/Blogs/Types.elm new file mode 100755 index 0000000..84312a8 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Blogs/Types.elm @@ -0,0 +1,17 @@ +module Config.Pages.Blogs.Types exposing (BlogArticle) + +import Config.Helpers.Articles.Types exposing (References) + + +type alias BlogArticle = + { articleName : String + , articleBody : String + , articleImage : String + , articleLink : String + , articleAuthor : String + , isNewTabLink : Bool + , hasReferences : Bool + , hasTableOfContents : Bool + , articlePublished : String + , articleReferences : List References + } diff --git a/packages/website/frontend/src/Config/Pages/Contact/Records.elm b/packages/website/frontend/src/Config/Pages/Contact/Records.elm new file mode 100755 index 0000000..d31b0af --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Contact/Records.elm @@ -0,0 +1,34 @@ +module Config.Pages.Contact.Records exposing (..) + +import Config.Pages.Contact.Types exposing (Contact) +import Route.Path as Path + + +contactInquiry : Contact +contactInquiry = + { contactName = "General Inquiries" + , contactImage = "email" + , contactDescription = "To submit any inquiries, including service purchases, general questions, guest appearances, webinars, public speaking, please reach out via email by clicking here. You may also submit Discord ban appeals here if you wish. To submit any criticism of the content on this site, follow the Criticism link below." + , contactLink = Path.toString Path.Contact_Inquiry + , isNewTabLink = False + } + + +contactCriticism : Contact +contactCriticism = + { contactName = "Criticism" + , contactImage = "discord" + , contactDescription = "To submit critiques of my arguments, reasoning, blog articles, video content, or public statements, please follow this link and adhere to the instructions precisely. Before pursuing any criticism, consider that misuse of this option may result in an immediate Discord ban with no opportunity for appeal." + , contactLink = Path.toString Path.Contact_Criticism + , isNewTabLink = False + } + + +contactMain : Contact +contactMain = + { contactName = "Contact" + , contactImage = "" + , contactDescription = "" + , contactLink = "" + , isNewTabLink = True + } diff --git a/packages/website/frontend/src/Config/Pages/Contact/Types.elm b/packages/website/frontend/src/Config/Pages/Contact/Types.elm new file mode 100755 index 0000000..22f9fb1 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Contact/Types.elm @@ -0,0 +1,10 @@ +module Config.Pages.Contact.Types exposing (Contact) + + +type alias Contact = + { contactName : String + , contactImage : String + , contactLink : String + , contactDescription : String + , isNewTabLink : Bool + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/List.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/List.elm new file mode 100755 index 0000000..2a28de9 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/List.elm @@ -0,0 +1,113 @@ +module Config.Pages.Debate.Arguments.List exposing (argumentList) + +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Records.Abortion exposing (argumentAbortion) +import Config.Pages.Debate.Arguments.Records.Agnosticism exposing (argumentAgnosticism) +import Config.Pages.Debate.Arguments.Records.AgriculturalPredation exposing (argumentAgriculturalPredation) +import Config.Pages.Debate.Arguments.Records.AnabolicKeto exposing (argumentAnabolicKeto) +import Config.Pages.Debate.Arguments.Records.AnimalRights exposing (argumentAnimalRights) +import Config.Pages.Debate.Arguments.Records.AntagonisticPleiotropy exposing (argumentAntagonisticPleiotropy) +import Config.Pages.Debate.Arguments.Records.AntiRewilding exposing (argumentAntiRewilding) +import Config.Pages.Debate.Arguments.Records.AntiVandalism exposing (argumentAntiVandalism) +import Config.Pages.Debate.Arguments.Records.ApoBCVD exposing (argumentApoBCVD) +import Config.Pages.Debate.Arguments.Records.BoobyTrapPagers exposing (argumentBoobyTrapPagers) +import Config.Pages.Debate.Arguments.Records.CarbsObesity exposing (argumentCarbsObesity) +import Config.Pages.Debate.Arguments.Records.CateUpfReductio exposing (argumentCateUpfReductio) +import Config.Pages.Debate.Arguments.Records.ColonizingNature exposing (argumentColonizingNature) +import Config.Pages.Debate.Arguments.Records.CropDeaths exposing (argumentCropDeaths) +import Config.Pages.Debate.Arguments.Records.DairyCowRape exposing (argumentDairyCowRape) +import Config.Pages.Debate.Arguments.Records.DietaryCholesterol exposing (argumentDietaryCholesterol) +import Config.Pages.Debate.Arguments.Records.Dummy exposing (argumentDummy) +import Config.Pages.Debate.Arguments.Records.EfilismPatrolSquad exposing (argumentEfilismPatrolSquad) +import Config.Pages.Debate.Arguments.Records.EpidemiologyCausality exposing (argumentEpidemiologyCausality) +import Config.Pages.Debate.Arguments.Records.EthicalSlurs exposing (argumentEthicalSlurs) +import Config.Pages.Debate.Arguments.Records.FineTuning exposing (argumentFineTuning) +import Config.Pages.Debate.Arguments.Records.FlatEarthDebunk exposing (argumentFlatEarthDebunk) +import Config.Pages.Debate.Arguments.Records.FructoseNAFLD exposing (argumentFructoseNAFLD) +import Config.Pages.Debate.Arguments.Records.HealthPromotingFoods exposing (argumentHealthPromotingFoods) +import Config.Pages.Debate.Arguments.Records.HealthSeeker exposing (argumentHealthSeeker) +import Config.Pages.Debate.Arguments.Records.HealthyChocolate exposing (argumentHealthyChocolate) +import Config.Pages.Debate.Arguments.Records.HealthyDairy exposing (argumentHealthyDairy) +import Config.Pages.Debate.Arguments.Records.HealthyFattyFish exposing (argumentHealthyFattyFish) +import Config.Pages.Debate.Arguments.Records.HealthyFibre exposing (argumentHealthyFibre) +import Config.Pages.Debate.Arguments.Records.HealthyFood exposing (argumentHealthyFood) +import Config.Pages.Debate.Arguments.Records.HealthyPlantFoods exposing (argumentHealthyPlantFoods) +import Config.Pages.Debate.Arguments.Records.HealthySeedOils exposing (argumentHealthySeedOils) +import Config.Pages.Debate.Arguments.Records.HealthySoy exposing (argumentHealthySoy) +import Config.Pages.Debate.Arguments.Records.ImmortalityReductio exposing (argumentImmortalityReductio) +import Config.Pages.Debate.Arguments.Records.LuigiTerrorist exposing (argumentLuigiTerrorist) +import Config.Pages.Debate.Arguments.Records.Malondialdehyde exposing (argumentMalondialdehyde) +import Config.Pages.Debate.Arguments.Records.OddOrderPredators exposing (argumentOddOrderPredators) +import Config.Pages.Debate.Arguments.Records.Omega3Omega6Ratio exposing (argumentOmega3Omega6Ratio) +import Config.Pages.Debate.Arguments.Records.Ostroveganism exposing (argumentOstroveganism) +import Config.Pages.Debate.Arguments.Records.PlantBasedCVDReversal exposing (argumentPlantBasedCVDReversal) +import Config.Pages.Debate.Arguments.Records.PollinationReductio exposing (argumentPollinationReductio) +import Config.Pages.Debate.Arguments.Records.PolyphenolReductio exposing (argumentPolyphenolReductio) +import Config.Pages.Debate.Arguments.Records.ScratcherPioneers exposing (argumentScratcherPioneers) +import Config.Pages.Debate.Arguments.Records.SodiumCVD exposing (argumentSodiumCVD) +import Config.Pages.Debate.Arguments.Records.TMAOCausality exposing (argumentTMAOCausality) +import Config.Pages.Debate.Arguments.Records.Template exposing (argument) +import Config.Pages.Debate.Arguments.Records.TransPeople exposing (argumentTransPeople) +import Config.Pages.Debate.Arguments.Records.TruncatedMeta exposing (argumentTruncatedMeta) +import Config.Pages.Debate.Arguments.Records.UnhealthyCoconutOil exposing (argumentUnhealthyCoconutOil) +import Config.Pages.Debate.Arguments.Records.UnhealthyProcessedMeat exposing (argumentUnhealthyProcessedMeat) +import Config.Pages.Debate.Arguments.Records.UnhealthyRedMeat exposing (argumentUnhealthyRedMeat) +import Config.Pages.Debate.Arguments.Records.UnhealthySaturatedFat exposing (argumentUnhealthySaturatedFat) +import Config.Pages.Debate.Arguments.Records.VeganSocietyReductio exposing (argumentVeganSocietyReductio) +import Config.Pages.Debate.Arguments.Types exposing (..) + + +argumentList : List Argument +argumentList = + [ argumentApoBCVD + , argumentAnabolicKeto + , argumentAntagonisticPleiotropy + , argumentCarbsObesity + , argumentCateUpfReductio + , argumentDietaryCholesterol + , argumentFructoseNAFLD + , argumentHealthPromotingFoods + , argumentHealthSeeker + , argumentHealthyChocolate + , argumentHealthyDairy + , argumentHealthyFattyFish + , argumentHealthyFibre + , argumentHealthyFood + , argumentHealthyPlantFoods + , argumentHealthySeedOils + , argumentHealthySoy + , argumentMalondialdehyde + , argumentOmega3Omega6Ratio + , argumentPlantBasedCVDReversal + , argumentLuigiTerrorist + , argumentPolyphenolReductio + , argumentSodiumCVD + , argumentTMAOCausality + , argumentUnhealthyCoconutOil + , argumentUnhealthyProcessedMeat + , argumentUnhealthyRedMeat + , argumentUnhealthySaturatedFat + , argumentAbortion + , argumentAgnosticism + , argumentAgriculturalPredation + , argumentAnimalRights + , argumentAntiRewilding + , argumentAntiVandalism + , argumentColonizingNature + , argumentCropDeaths + , argumentDairyCowRape + , argumentEfilismPatrolSquad + , argumentEthicalSlurs + , argumentFineTuning + , argumentImmortalityReductio + , argumentOddOrderPredators + , argumentOstroveganism + , argumentPollinationReductio + , argumentScratcherPioneers + , argumentTransPeople + , argumentVeganSocietyReductio + , argumentBoobyTrapPagers + , argumentEpidemiologyCausality + , argumentFlatEarthDebunk + , argumentTruncatedMeta + ] diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Abortion.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Abortion.elm new file mode 100755 index 0000000..bde3e63 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Abortion.elm @@ -0,0 +1,70 @@ +module Config.Pages.Debate.Arguments.Records.Abortion exposing (argumentAbortion) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAbortion : Argument +argumentAbortion = + { argumentTitle = toTitleCase "Argument Against Sentient Abortions" + , propositionTitle = "One's whims are not a sufficient justification for the termination of sentient human life." + , propositionReductio = "" + , propositionSummary = "Consenting to becoming pregnant, or at least implicitly accepting the risks of pregnancy by engaging in reckless sex, should disqualify one from having the opportunity to a abort a sentient fetus if the pregnancy doesn't pose a significant health risk to the mother." + , proofLink = "https://www.umsu.de/trees/#(P~2Q~5R),(P),(Q),((R~1F~1~3H)~5M),(F),(~3H),(M~5~3W)%7C=(~3W)" + , argumentCertainty = 6 + , argumentImage = "abortion" + , argumentHashtags = [ PoliticsAbortion, PhilosophySentience, PhilosophyEthics ] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "one consents to becoming pregnant" + } + , { definiendum = "Q" + , definiens = "one consensually engages in sexual activity without contraception" + } + , { definiendum = "R" + , definiens = "one is implicitly committed to at least accepting the average risks for the average pregnancy" + } + , { definiendum = "F" + , definiens = "one's pregnancy persists long enough for fetal sentience to develop" + } + , { definiendum = "H" + , definiens = "one's risk profile during pregnancy is high" + } + , { definiendum = "M" + , definiens = "one is morally bound to carrying the pregnancy to term" + } + , { definiendum = "W" + , definiens = "one's whims are a sufficient justification for the termination of sentient human life" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If one consents to becoming pregnant or one consensually engages in sexual activity without contraception, then one is implicitly committed to at least accepting the average risks for the average pregnancy." + , notation = "P∨Q→R" + } + , { premise = "One consents to becoming pregnant." + , notation = "P" + } + , { premise = "One consensually engages in sexual activity without contraception." + , notation = "Q" + } + , { premise = "If one is implicitly committed to at least accepting the average risks for the average pregnancy and one's pregnancy persists long enough for fetal sentience to develop and one's risk profile during pregnancy is not high, then one is morally bound to carrying the pregnancy to term." + , notation = "R∧F∧¬H→M" + } + , { premise = "One's pregnancy persists long enough for fetal sentience to develop." + , notation = "F" + } + , { premise = "One's risk profile during pregnancy is not high." + , notation = "¬H" + } + , { premise = "If one is morally bound to carrying the pregnancy to term, then one's whims are not a sufficient justification for the termination of sentient human life." + , notation = "M→¬W" + } + ] + , conclusion = "Therefore, one's whims are not a sufficient justification for the termination of sentient human life." + , conclusionNotation = "¬W" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Agnosticism.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Agnosticism.elm new file mode 100755 index 0000000..8944015 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Agnosticism.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.Agnosticism exposing (argumentAgnosticism) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAgnosticism : Argument +argumentAgnosticism = + { argumentTitle = toTitleCase "Agnosticism Consistency Checker" + , propositionTitle = "An interlocutor (who cannot unpack what evidence would lead them to change their doxastic attitude on a proposition) should temporarily withhold the belief that the proposition at hand is true." + , propositionReductio = "" + , propositionSummary = "Listen, if one doesn't know what would change their mind on a topic, about which they form strong opinions, then it's not clear why they'd even hold said opinions strongly in the first place. Given this, it would make more sense just to suspend your judgement in the meantime and form no opinions on the subject." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y(~3Pxy~5~3Qxy)),(~6x~6y(~3Qxy~5Rxy)),(~3Por)|=(Ror)" + , argumentCertainty = 9 + , argumentImage = "agnostic" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x,y)" + , definiens = "(x) can unpack what evidence would lead them to change their doxastic attitude on (y)" + } + , { definiendum = "Q(x,y)" + , definiens = "(x) knows why they believe that (y) is true" + } + , { definiendum = "R(x,y)" + , definiens = "(x) should temporarily withhold the belief that (y) is true" + } + , { definiendum = "x" + , definiens = "a person" + } + , { definiendum = "y" + , definiens = "a proposition" + } + , { definiendum = "o" + , definiens = "the interlocutor" + } + , { definiendum = "r" + , definiens = "the proposition at hand" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If one cannot unpack what evidence would lead them to change their doxastic attitude on a proposition, then one does does not know why they believe that a proposition is true." + , notation = "∀x∀y(¬Pxy→¬Qxy)" + } + , { premise = "If one does not know why they believe that a proposition is true, then one should temporarily withhold the belief that a proposition is true." + , notation = "∀x∀y(¬Qxy→Rxy)" + } + , { premise = "The interlocutor cannot unpack what evidence would lead them to change their doxastic attitude on the proposition at hand." + , notation = "(¬Por)" + } + ] + , conclusion = "Therefore, the interlocutor should temporarily withhold the belief that the proposition at hand is true." + , conclusionNotation = "Ror" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AgriculturalPredation.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AgriculturalPredation.elm new file mode 100755 index 0000000..50f99e2 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AgriculturalPredation.elm @@ -0,0 +1,73 @@ +module Config.Pages.Debate.Arguments.Records.AgriculturalPredation exposing (argumentAgriculturalPredation) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAgriculturalPredation : Argument +argumentAgriculturalPredation = + { argumentTitle = toTitleCase "Argument for Animal Agrirculture as Predation" + , propositionTitle = "Animal agriculture counts as predation." + , propositionReductio = "" + , propositionSummary = "Some vegans suggest that killing odd order predators is wrong because predation is permissible. However, if animal agriculture also counts as predation, it's analytically entailed that animal agriculture is permissible as well." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z(Px~4Qxyz~1(Rxyz~2Sxyz)~1Wxyz)),(Qahl),(Rahl~2Sahl),(Wahl)%7C=(Pa)" + , argumentCertainty = 10 + , argumentImage = "predatoragriculture" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) counts as predation" + } + , { definiendum = "Q(x,y,z)" + , definiens = "(x) involves a (y) regularly capturing a (z)" + } + , { definiendum = "R(x,y,z)" + , definiens = "(x) involves a (y) regularly killing a (z)" + } + , { definiendum = "S(x,y,z)" + , definiens = "(x) involves a (y) regularly subduing a (z)" + } + , { definiendum = "W(x,y,z)" + , definiens = "(x) involves a (y) regularly consuming, to the captor's benefit, a (z)" + } + , { definiendum = "x" + , definiens = "an action" + } + , { definiendum = "y" + , definiens = "an animal" + } + , { definiendum = "z" + , definiens = "another animal" + } + , { definiendum = "a" + , definiens = "animal agriculture" + } + , { definiendum = "h" + , definiens = "humans" + } + , { definiendum = "l" + , definiens = "livestock" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "Something counts as predation if, and only if, something involves an animal regularly capturing, killing or subduing, and consuming, to the captor's benefit, another animal." + , notation = "∀x∀y∀z(Px↔Qxyz∧(Rxyz∨Sxyz)∧Wxyz)" + } + , { premise = "Animal agriculture involves humans regularly capturing livestock." + , notation = "Qahl" + } + , { premise = "Animal agriculture involves humans regularly killing or subduing livestock." + , notation = "Rahl∨Sahl" + } + , { premise = "Animal agriculture involves humans regularly consuming, to the captors' benefit, livestock." + , notation = "Wahl" + } + ] + , conclusion = "Therefore, animal agriculture counts as predation." + , conclusionNotation = "Pa" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnabolicKeto.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnabolicKeto.elm new file mode 100755 index 0000000..af9b24a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnabolicKeto.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.AnabolicKeto exposing (argumentAnabolicKeto) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAnabolicKeto : Argument +argumentAnabolicKeto = + { argumentTitle = toTitleCase "Anabolic Opportunity Cost on Keto" + , propositionTitle = "Ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets." + , propositionReductio = "" + , propositionSummary = "A higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets, reducing the amount available for hypertrophy. This likely costs anabolic potential on ketogenic diets compared to non-ketogenic diets." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(P),(Q~5R)|=(R)" + , argumentCertainty = 5 + , argumentImage = "anabolicketo" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "a higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets" + } + , { definiendum = "Q" + , definiens = "a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets" + } + , { definiendum = "R" + , definiens = "ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If a higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets, then a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets." + , notation = "P→Q" + } + , { premise = "If a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets, then ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets." + , notation = "Q→R" + } + , { premise = "A higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets." + , notation = "P" + } + ] + , conclusion = "Therefore, ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnimalRights.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnimalRights.elm new file mode 100755 index 0000000..7c824fa --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AnimalRights.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.AnimalRights exposing (argumentAnimalRights) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAnimalRights : Argument +argumentAnimalRights = + { argumentTitle = toTitleCase "Argument for Animal Rights" + , propositionTitle = "We should not exploit animals to any greater degree than we would tolerate for humans." + , propositionReductio = "" + , propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. As such, if one wants to deny that animals should be given these trait-adjusted rights, they'll have to name a trait that accounts for the differential normative evaluation. Typically this is done by rejecting P3 and saying something retarded." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(~3Pa~5~7t(Rta~5(Rth~5~3Ph))),(~3~7t(Rta~5(Rth~5~3Ph))),(Pa)|=(~3Qa)" + , argumentCertainty = 10 + , argumentImage = "animalrights" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has moral worth" + } + , { definiendum = "Q(x)" + , definiens = "we should exploit (x) to any greater degree than we would tolerate for trait-adjusted humans" + } + , { definiendum = "R(t,x)" + , definiens = "there exists a (t) that is absent in (x)" + } + , { definiendum = "x" + , definiens = "a being" + } + , { definiendum = "t" + , definiens = "trait" + } + , { definiendum = "a" + , definiens = "animal" + } + , { definiendum = "h" + , definiens = "human" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a being has moral worth, then we should not exploit it to any greater degree than we would tolerate for trait-adjusted humans." + , notation = "∀x(Px→¬Qx)" + } + , { premise = "If animals don’t have moral worth, then there exists a trait that is absent in animals such that if it were absent in humans, humans wouldn’t have moral worth." + , notation = "¬Pa→∃t(Rta→(Rth→¬Ph))" + } + , { premise = "There doesn’t exist a trait that is absent in animals such that if it were absent in humans, humans wouldn’t have moral worth." + , notation = "¬∃t(Rta→(Rth→¬Ph))" + } + ] + , conclusion = "Therefore, we should not exploit animals to any greater degree than we would tolerate for trait-adjusted humans." + , conclusionNotation = "¬Qa" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntagonisticPleiotropy.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntagonisticPleiotropy.elm new file mode 100755 index 0000000..87cdcec --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntagonisticPleiotropy.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.AntagonisticPleiotropy exposing (argumentAntagonisticPleiotropy) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAntagonisticPleiotropy : Argument +argumentAntagonisticPleiotropy = + { argumentTitle = toTitleCase "Argument Against Ancestral Diets" + , propositionTitle = "Ancestral diets have inherent disadvantages over novel diets" + , propositionReductio = "" + , propositionSummary = "Humans have more genetic adaptations to ancestral foods than novel foods, which makes the long-term negative consequences of antagonistic pleiotropy a greater concern for ancestral foods." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(Q~5R),(P)|=(R)" + , argumentCertainty = 6 + , argumentImage = "antagonisticpleiotropy" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "humans have more genetic adaptations to ancestral foods than novel foods" + } + , { definiendum = "Q" + , definiens = "antagonistic pleiotropy is more of a concern for ancestral foods than novel foods" + } + , { definiendum = "R" + , definiens = "ancestral foods have inherent disadvantages over novel foods" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If humans have more genetic adaptations to ancestral foods than novel foods, then antagonistic pleiotropy is more of a concern for ancestral foods than novel foods." + , notation = "P→Q" + } + , { premise = "If antagonistic pleiotropy is more of a concern for ancestral foods than novel foods, then ancestral diets have inherent disadvantages over novel diets." + , notation = "Q→R" + } + , { premise = "Humans have more genetic adaptations to ancestral foods than novel foods." + , notation = "P" + } + ] + , conclusion = "Therefore, ancestral foods have inherent disadvantages over novel foods." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiRewilding.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiRewilding.elm new file mode 100755 index 0000000..6266515 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiRewilding.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.AntiRewilding exposing (argumentAntiRewilding) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAntiRewilding : Argument +argumentAntiRewilding = + { argumentTitle = toTitleCase "Argument Against Rewilding" + , propositionTitle = "Rewilding sentient animals is immoral." + , propositionReductio = "" + , propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. I think humans have the right not to be bred into wild circumstances where they're faced with the full brutality of the natural world, and by extension I think non-human animals have this right too." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(Pa),(~3Qa~5~3R),(~3R~5Sa)|=(Sa)" + , argumentCertainty = 10 + , argumentImage = "rewilding" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has negative rights" + } + , { definiendum = "Q(x)" + , definiens = "we should defend (x) from rights violations to any lesser degree than we would tolerate for humans" + } + , { definiendum = "R" + , definiens = "it is permissible to subject animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans" + } + , { definiendum = "S(a)" + , definiens = "rewilding sentient animals is immoral" + } + , { definiendum = "x" + , definiens = "a being" + } + , { definiendum = "a" + , definiens = "sentient animals" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a being has negative rights, then we should not defend a being from rights violations to any lesser degree than we would tolerate for humans." + , notation = "∀x(Px→¬Qx)" + } + , { premise = "Sentient animals have negative rights." + , notation = "Pa" + } + , { premise = "If we should not defend sentient animals from rights violations to any lesser degree than we would tolerate for humans, then it is not permissible to subject sentient animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans." + , notation = "¬Qa→¬R" + } + , { premise = "If it is not permissible to subject sentient animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans, then rewilding sentient animals is immoral." + , notation = "¬R→Sa" + } + ] + , conclusion = "Therefore, rewilding sentient animals is immoral." + , conclusionNotation = "Sa" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiVandalism.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiVandalism.elm new file mode 100755 index 0000000..c98e8f8 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/AntiVandalism.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.AntiVandalism exposing (argumentAntiVandalism) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentAntiVandalism : Argument +argumentAntiVandalism = + { argumentTitle = toTitleCase "Argument Against Zoo Vandalism" + , propositionTitle = "Vandalizing zoos increases the probability of harming the animals they keep." + , propositionReductio = "" + , propositionSummary = "The more we pressure institutions that hold innocent animals captive to direct their funds to endeavours or projects unrelated to animal care, the less money those institutions are going to have to devote to animal care." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(P),(Q~5R)%7C=(R)" + , argumentCertainty = 8 + , argumentImage = "antivandalism" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "zoos must spend extra money cleaning graffiti" + } + , { definiendum = "Q" + , definiens = "zoos will have less money to devote to animal care" + } + , { definiendum = "R" + , definiens = "vandalizing zoos increases the probability of harming the animals they keep" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If zoos must spend extra money cleaning graffiti, then zoos will have less money to devote to animal care." + , notation = "P→Q" + } + , { premise = "If zoos will have less money to devote to animal care, then vandalizing zoos increases the probability of harming the animals they keep." + , notation = "Q→R" + } + , { premise = "Zoos must spend extra money cleaning graffiti." + , notation = "P" + } + ] + , conclusion = "Therefore, vandalizing zoos increases the probability of harming the animals they keep." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ApoBCVD.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ApoBCVD.elm new file mode 100755 index 0000000..ce57e82 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ApoBCVD.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.ApoBCVD exposing (argumentApoBCVD) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentApoBCVD : Argument +argumentApoBCVD = + { argumentTitle = toTitleCase "Argument for Atherogenic ApoB" + , propositionTitle = "ApoB-containing lipoproteins dose-dependently cause atherosclerosis." + , propositionReductio = "" + , propositionSummary = "ApoB-containing lipoproteins consistently and proportionately associate with increased plaque volume after controlling for relevant confounders, which satisfies the conditions outlined for an exposure to cause atherosclerosis." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qw)|=(Pw)" + , argumentCertainty = 9 + , argumentImage = "lipoprotein" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) dose-dependently causes atherosclerosis" + } + , { definiendum = "Q(x)" + , definiens = "(x) consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "w" + , definiens = "ApoB-containing lipoproteins" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, a substance dose-dependently causes atherosclerosis if, and only if, a substance consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates." + , notation = "∀x(Px↔Qx)" + } + , { premise = "ApoB-containing lipoproteins consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates." + , notation = "Qw" + } + ] + , conclusion = "Therefore, ApoB-containing lipoproteins dose-dependently cause atherosclerosis." + , conclusionNotation = "Pw" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/BoobyTrapPagers.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/BoobyTrapPagers.elm new file mode 100755 index 0000000..2f12dcc --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/BoobyTrapPagers.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.BoobyTrapPagers exposing (argumentBoobyTrapPagers) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentBoobyTrapPagers : Argument +argumentBoobyTrapPagers = + { argumentTitle = toTitleCase "Argument Against Israeli Pagers as Booby-Traps" + , propositionTitle = "The Israeli pagers were not booby-traps." + , propositionReductio = "" + , propositionSummary = "Based on the definitions found in the IHL Databases, it's unlikely that the Israeli pager bombs qualify as booby-traps. However, there is sufficient ambiguity in the language that I'm not convinced it's necessarily an analytical truth." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4(Qx~1Rx~1Sx))),(Qp),(Rp),(~3Sp)|=(~3Pp)" + , argumentCertainty = 4 + , argumentImage = "pagers" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is a booby-trap" + } + , { definiendum = "Q(x)" + , definiens = "(x) is a device or material" + } + , { definiendum = "R(x)" + , definiens = "(x) is designed, constructed, or adapted to kill or injure" + } + , { definiendum = "S(x)" + , definiens = "(x) functions (as a device or material that was designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act" + } + , { definiendum = "x" + , definiens = "a device" + } + , { definiendum = "p" + , definiens = "Israeli pagers" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, a device is a booby-trap if, and only if, the device is a device or material AND the device is designed, constructed, or adapted to kill or injure AND x functions (as a device or material that was designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act." + , notation = "∀x(Px↔(Qx∧Rx∧Sx))" + } + , { premise = "The Israeli pagers were devices or materials." + , notation = "Qp" + } + , { premise = "The Israeli pagers were designed, constructed, or adapted to kill or injure." + , notation = "Rp" + } + , { premise = "The Israeli pagers did not function (as devices or materials that were designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act." + , notation = "¬Sp" + } + ] + , conclusion = "Therefore, the Israeli pagers were not booby-traps." + , conclusionNotation = "¬Pp" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CarbsObesity.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CarbsObesity.elm new file mode 100755 index 0000000..5a8c826 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CarbsObesity.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.CarbsObesity exposing (argumentCarbsObesity) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentCarbsObesity : Argument +argumentCarbsObesity = + { argumentTitle = toTitleCase "Argument Against the Obesogenic Carbohydrates" + , propositionTitle = "Carbohydrates do not uniquely cause fat accumulation or obesity." + , propositionReductio = "" + , propositionSummary = "There are a number of predictions made from the hypothesis that carbohydrates uniquely cause obesity. One of those predictions is that obesity would track with carbohydrate intake, but it doesn't" + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)|=(~3P)" + , argumentCertainty = 9 + , argumentImage = "carbobesity" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "carbs uniquely cause fat accumulation or obesity" + } + , { definiendum = "Q" + , definiens = "populations with high carb diets have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If carbohydrates uniquely cause fat accumulation or obesity, then, populations with high carbohydrate diets have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates." + , notation = "P→Q" + } + , { premise = "Populations with high carbohydrate diets do not have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates." + , notation = "¬Q" + } + ] + , conclusion = "Therefore, carbs do not uniquely cause fat accumulation or obesity." + , conclusionNotation = "¬P" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CateUpfReductio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CateUpfReductio.elm new file mode 100755 index 0000000..7f1794a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CateUpfReductio.elm @@ -0,0 +1,49 @@ +module Config.Pages.Debate.Arguments.Records.CateUpfReductio exposing (argumentCateUpfReductio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentCateUpfReductio : Argument +argumentCateUpfReductio = + { argumentTitle = toTitleCase "Cate's Ultraprocessed Food Reductio" + , propositionTitle = "Reducing the dietary intake of red meat and butter will be good for us all." + , propositionReductio = "" + , propositionSummary = "Cate Shanahan affirmed P1 in a post on X. The position is basically that if an ingredient is included in ultraprocessed foods, then reducing the intake of that ingredient (presumably inside and outside of the ultraprocessed food context) is a good thing." + , proofLink = "https://www.umsu.de/trees/#~6x(Px~5Qx),Pr~1Pb|=Qr~1Qb" + , argumentCertainty = 10 + , argumentImage = "cateupfreductio" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is an ingredient in ultraprocessed foods" + } + , { definiendum = "Q(x)" + , definiens = "reducing the dietary intake of (x) will be good for us all" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "r" + , definiens = "red meat" + } + , { definiendum = "b" + , definiens = "butter" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If a substance is an ingredient in ultraprocessed foods, then reducing the dietary intake of that substance will be good for us all." + , notation = "∀x(Px→Qx)" + } + , { premise = "Red meat and butter are ingredients in ultraprocessed foods." + , notation = "Pr∧Pb" + } + ] + , conclusion = "Therefore, reducing the dietary intake of red meat and butter will be good for us all." + , conclusionNotation = "Qr∧Qb" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ColonizingNature.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ColonizingNature.elm new file mode 100755 index 0000000..3927e65 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ColonizingNature.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.ColonizingNature exposing (argumentColonizingNature) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentColonizingNature : Argument +argumentColonizingNature = + { argumentTitle = toTitleCase "Argument for Colonizing Nature" + , propositionTitle = "We are justified in displacing nature into non-existence" + , propositionReductio = "" + , propositionSummary = "All else equal, is a world where sentient beings are getting torn to shreds and eaten alive or starving to death if they don't succumb to this fate better than a world where this does not happen? I'd argue not. As such, I advocate for non-violently displacing nature into non-existence." + , proofLink = "https://www.umsu.de/trees/#(P~1~3Q~1~3R~1~3S~5W),(P),(~3Q),(~3R),(~3S)%7C=(W)" + , argumentCertainty = 10 + , argumentImage = "colonizingnature" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "the natural world contains intolerable rights violations" + } + , { definiendum = "Q" + , definiens = "we know that nature is net positive or net negative for utility" + } + , { definiendum = "R" + , definiens = "there is any known practical means by which to end the rights violations beyond the use of force" + } + , { definiendum = "S" + , definiens = "the natural world is currently instrumentally vital to facilitating human flourishing" + } + , { definiendum = "W" + , definiens = "we are justified in non-violently displacing nature into non-existence" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If the natural world contains intolerable rights violations and we do not know that nature is net positive or net negative for utility and there is not any known practical means by which to end the rights violations beyond the use of force and the natural world is not currently instrumentally vital to facilitating human flourishing, then we are justified in non-violently displacing nature into non-existence." + , notation = "(P∧¬Q∧¬R∧¬S)→W" + } + , { premise = "Nature entails intolerable rights violations." + , notation = "P" + } + , { premise = "We do not know if nature is net positive or net negative for utility." + , notation = "¬Q" + } + , { premise = "There is not any known practical means by which to end the rights violations beyond the use of force." + , notation = "¬R" + } + , { premise = "The natural world is not currently instrumentally vital to facilitating human flourishing." + , notation = "¬S" + } + ] + , conclusion = "Therefore, we are justified in non-violently displacing nature into non-existence." + , conclusionNotation = "W" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CropDeaths.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CropDeaths.elm new file mode 100755 index 0000000..cab54f2 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/CropDeaths.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.CropDeaths exposing (argumentCropDeaths) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentCropDeaths : Argument +argumentCropDeaths = + { argumentTitle = toTitleCase "Cropland vs Wildland Argument" + , propositionTitle = "Proposition" + , propositionReductio = "" + , propositionSummary = "We can't claim to know that cropland kills more animals than wildland, because if we did know this, there would be evidence for it, and there isn't any such evidence." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)%7C=(~3P)" + , argumentCertainty = 9 + , argumentImage = "cropdeaths" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "it is known that cropland leads to more animal death than wildland" + } + , { definiendum = "Q" + , definiens = "there is evidence that cropland leads to more animal death than wildland" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If it is known that cropland leads to more animal death than wildland, then there is evidence that cropland leads to more animal death than wildland." + , notation = "P→Q" + } + , { premise = "There is not evidence that cropland leads to more animal death than wildland." + , notation = "P" + } + ] + , conclusion = "Therefore, it is not known that cropland leads to more animal death than wildland." + , conclusionNotation = "¬P" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DairyCowRape.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DairyCowRape.elm new file mode 100755 index 0000000..2ed5b5f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DairyCowRape.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.DairyCowRape exposing (argumentDairyCowRape) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentDairyCowRape : Argument +argumentDairyCowRape = + { argumentTitle = toTitleCase "Argument for Animal Sex Counting as Rape" + , propositionTitle = "An animal mating with another animal qualifies as rape." + , propositionReductio = "" + , propositionSummary = "It's not clear that non-human animal procreation isn't an example of rape if we take sexual interaction in the absence of informed consent to be rape. So, it seems to follow that a bull mating with a cow is rape, for example." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y(Px~4(Qxy~1~3Ryx))),(Qae),(~3Rea)|=(Pa)" + , argumentCertainty = 10 + , argumentImage = "cowrape" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) qualifies as rape" + } + , { definiendum = "Q(x,y)" + , definiens = "(x) involves sexual contact with (y)" + } + , { definiendum = "R(y,x)" + , definiens = "(y) renders informed consent for (x)" + } + , { definiendum = "x" + , definiens = "an action" + } + , { definiendum = "y" + , definiens = "an involved party" + } + , { definiendum = "a" + , definiens = "an animal mating with another animal" + } + , { definiendum = "e" + , definiens = "another animal" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "An action qualifies as rape if, and only if, the action involves sexual contact with an involved party and the involved party does not render informed consent for the action." + , notation = "∀x∀y(Px↔(Qxy∧¬Ryx))" + } + , { premise = "An animal mating with another animal involves sexual contact with another animal." + , notation = "Qae" + } + , { premise = "Said animal does not render informed consent to an animal mating with them." + , notation = "¬Rea" + } + ] + , conclusion = "Therefore, an animal mating with another animal qualifies as rape." + , conclusionNotation = "Pa" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DietaryCholesterol.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DietaryCholesterol.elm new file mode 100755 index 0000000..19c13f3 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/DietaryCholesterol.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.DietaryCholesterol exposing (argumentDietaryCholesterol) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentDietaryCholesterol : Argument +argumentDietaryCholesterol = + { argumentTitle = toTitleCase "Argument for Atherogenic Dietary Cholesterol" + , propositionTitle = "Consuming high amounts of dietary cholesterol increases heart disease risk." + , propositionReductio = "" + , propositionSummary = "LDL causally associates with heart disease in a linear and proportional manner, and in all cases exposures that durably increase LDL over time produce likewise increases in heart disease risk. Dietary cholesterol is one such exposure." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pd)|=(Qd)" + , argumentCertainty = 9 + , argumentImage = "dietarycholesterol" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "consuming high amounts of (x) increases LDL" + } + , { definiendum = "Q(x)" + , definiens = "(x) increases heart disease risk" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "d" + , definiens = "dietary cholesterol" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if consuming high amounts of a substance increases LDL, then consuming high amounts of a substance increases heart disease risk." + , notation = "∀x(Px→Qx)" + } + , { premise = "Consuming high amounts of dietary cholesterol increases LDL." + , notation = "Pd" + } + ] + , conclusion = "Therefore, consuming high amounts of dietary cholesterol increases heart disease risk." + , conclusionNotation = "Qd" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Dummy.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Dummy.elm new file mode 100755 index 0000000..1580444 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Dummy.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.Dummy exposing (argumentDummy) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentDummy : Argument +argumentDummy = + { argumentTitle = toTitleCase "" + , propositionTitle = "" + , propositionReductio = "" + , propositionSummary = "" + , proofLink = "" + , argumentCertainty = 6 + , argumentImage = "" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If evidence that is stronger than the best animal food epidemiology is required to demonstrate causality and confounding is a causal concept, then evidence that is stronger than the best animal food epidemiology is required to validate potential confounders." + , notation = "(P∧Q→R)" + } + , { premise = "Evidence that is stronger than the best animal food epidemiology is required to demonstrate causality." + , notation = "P" + } + , { premise = "Confounding is a causal concept." + , notation = "Q" + } + ] + , conclusion = "Therefore, evidence that is stronger than the best animal food epidemiology is required to validate potential confounders." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EfilismPatrolSquad.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EfilismPatrolSquad.elm new file mode 100755 index 0000000..69e655d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EfilismPatrolSquad.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.EfilismPatrolSquad exposing (argumentEfilismPatrolSquad) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentEfilismPatrolSquad : Argument +argumentEfilismPatrolSquad = + { argumentTitle = toTitleCase "The Eternal Intergalactic Sentience Patrol Squad" + , propositionTitle = "Efilists are committed to pragmatic natalism." + , propositionReductio = "Efilists fundamentally believe that sentient life is inherently characterized by suffering and that the most ethical action is to prevent the creation of any new sentient beings, ultimately aiming to completely eliminate all conscious life in the universe to end suffering permanently." + , propositionSummary = "If efilists follow their own logic to its ultimate conclusion, they would paradoxically be committed to a form of pragmatic natalism - the very opposite of their core philosophical stance." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q),(~3P~1R~5~3S),(R),(~3S~5W)|=(W)" + , argumentCertainty = 10 + , argumentImage = "efilism" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "humans abstaining from procreation maximally reduces rights violations" + } + , { definiendum = "Q" + , definiens = "humans have sterilized all sentient life in the universe" + } + , { definiendum = "R" + , definiens = "many more generations are required to sterilize all sentient life in the universe" + } + , { definiendum = "S" + , definiens = "efilists should abstain from procreation until all sentient life in the universe is sterilized" + } + , { definiendum = "W" + , definiens = "efilists are committed to pragmatic natalism" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If humans abstaining from procreation maximally reduces rights violations, then humans have sterilized all sentient life in the universe." + , notation = "P→Q" + } + , { premise = "Humans have not sterilized all sentient life in the universe." + , notation = "¬Q" + } + , { premise = "If humans abstaining from procreation does not maximally reduce rights violations and many more generations are required to sterilize all sentient life in the universe, then efilists should not abstain from procreation until all sentient life in the universe is sterilized." + , notation = "¬P∧R→¬S" + } + , { premise = "Many more generations are required to sterilize all sentient life in the universe." + , notation = "R" + } + , { premise = "If efilists should not abstain from procreation until all sentient life in the universe is sterilized, then efilists are committed to pragmatic natalism." + , notation = "¬S→W" + } + ] + , conclusion = "Therefore, efilists are committed to pragmatic natalism." + , conclusionNotation = "W" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EpidemiologyCausality.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EpidemiologyCausality.elm new file mode 100755 index 0000000..4236b15 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EpidemiologyCausality.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.EpidemiologyCausality exposing (argumentEpidemiologyCausality) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentEpidemiologyCausality : Argument +argumentEpidemiologyCausality = + { argumentTitle = toTitleCase "Argument for Nutritional Epidemiology" + , propositionTitle = "Nutritional epidemiology generally provides good causal estimates." + , propositionReductio = "" + , propositionSummary = "It's just straightforwardly the case that nutritional epidemiology has outstanding translation rates with randomized controlled trials, or at least these is overwhelmingly consistent compatibility in the results. If randomized controlled trials are the standard against which other research methods are to be evaluated, it's not clear why nutritional epidemiology wouldn't be trustworthy in the aggregate." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pe)|=(Qe)" + , argumentCertainty = 8 + , argumentImage = "epidemiologycausality" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) consistently identifies associations that are later confirmed by randomized controlled trials" + } + , { definiendum = "Q(x)" + , definiens = "(x) generally provides good causal estimates" + } + , { definiendum = "x" + , definiens = "a research method" + } + , { definiendum = "e" + , definiens = "nutritional epidemiology" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a research method consistently identifies associations that are later confirmed by randomized controlled trials, then the research method generally provides good causal estimates." + , notation = "∀x(Px→Qx)" + } + , { premise = "Nutritional epidemiology consistently identifies associations that are later confirmed by randomized controlled trials." + , notation = "Pe" + } + ] + , conclusion = "Therefore, nutritional epidemiology generally provides good causal estimates." + , conclusionNotation = "Qe" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EthicalSlurs.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EthicalSlurs.elm new file mode 100755 index 0000000..0c0fefa --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/EthicalSlurs.elm @@ -0,0 +1,64 @@ +module Config.Pages.Debate.Arguments.Records.EthicalSlurs exposing (argumentEthicalSlurs) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentEthicalSlurs : Argument +argumentEthicalSlurs = + { argumentTitle = toTitleCase "Argument for Using the Term Retard" + , propositionTitle = "It is generally permissible to use the term retard with an altered non-bigoted meaning." + , propositionReductio = "" + , propositionSummary = "The only historical examples of bigoted terms, such as slurs, becoming non-harmful to the demographics toward which they were historically targeted involve literally changing the usage of the term to something non-bigoted. I don’t see any historical precedent for a methodology that has been as successful in achieving this goal as altering the term's usage. Such as using the term \"nigga\" to mean \"friend\", for example." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(~6x(~3Px~5Rx)),(~3Pr),(~3Qr~1Rr~5Sr),(Sr~5Wr)|=(Wr)" + , argumentCertainty = 7 + , argumentImage = "ethicalslurs" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x)'s negative connotations have been neutralised" + } + , { definiendum = "Q(x)" + , definiens = "(x) has been rendered non-bigoted via altered usage" + } + , { definiendum = "R(x)" + , definiens = "oppressed people will continue to suffer from the use of (x)" + } + , { definiendum = "S(x)" + , definiens = "it is permissible to neutralise the term retard's negative connotations" + } + , { definiendum = "W(x)" + , definiens = "it is generally permissible to use the term retard with an altered non-bigoted meaning" + } + , { definiendum = "x" + , definiens = "a slur" + } + , { definiendum = "r" + , definiens = "retard" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all slurs, a slur's negative connotations have been neutralised if, and only if, slur has been rendered non-bigoted via altered usage." + , notation = "∀x(Px↔Qx)" + } + , { premise = "For all slurs, if it is not the case that slur's negative connotations have been neutralised, then oppressed people will continue to suffer from the use of slur." + , notation = "∀x(¬Px→Rx)" + } + , { premise = "It is not the case that the term retard's negative connotations have been neutralised." + , notation = "¬Pr" + } + , { premise = "If the term retard has not been rendered non-bigoted via altered usage and oppressed people will continue to suffer from the use of the term retard, then it is permissible to neutralise the term retard's negative connotations." + , notation = "¬Qr∧Rr→Sr" + } + , { premise = "If it is permissible to neutralise the term retard's negative connotations, then It is generally permissible to use the term retard with an altered non-bigoted meaning." + , notation = "Sr→Wr" + } + ] + , conclusion = "Therefore, it is generally permissible to use the term retard with an altered non-bigoted meaning." + , conclusionNotation = "Wr" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FineTuning.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FineTuning.elm new file mode 100755 index 0000000..ebf8133 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FineTuning.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.FineTuning exposing (argumentFineTuning) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentFineTuning : Argument +argumentFineTuning = + { argumentTitle = toTitleCase "Fine Tuning Debunk" + , propositionTitle = "Fine tuning is an infinitely regressive explanation for God" + , propositionReductio = "" + , propositionSummary = "It's not clear why God's constitution wouldn't count as finely tuned, and to the extent that it does count as finely-tuned, it's by extension unclear why fine-tuning wouldn't be an infinitely regressive argument for God's existence." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pg),(Qg~5R)%7C=(R)" + , argumentCertainty = 10 + , argumentImage = "finetuning" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is finely tuned" + } + , { definiendum = "Q(x)" + , definiens = "(x) has a designer" + } + , { definiendum = "R" + , definiens = "fine tuning is an infinitely regressive explanation for God" + } + , { definiendum = "x" + , definiens = "a thing" + } + , { definiendum = "g" + , definiens = "God's constitution" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If something is finely tuned, then something has a designer." + , notation = "∀x(Px→Qx)" + } + , { premise = "God's constitution is finely tuned." + , notation = "Pg" + } + , { premise = "If God's constitution has a designer, then fine tuning is an infinitely regressive explanation for God." + , notation = "Qg→R" + } + ] + , conclusion = "Therefore, fine tuning is an infinitely regressive explanation for God." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FlatEarthDebunk.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FlatEarthDebunk.elm new file mode 100755 index 0000000..a09b4e3 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FlatEarthDebunk.elm @@ -0,0 +1,67 @@ +module Config.Pages.Debate.Arguments.Records.FlatEarthDebunk exposing (argumentFlatEarthDebunk) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentFlatEarthDebunk : Argument +argumentFlatEarthDebunk = + { argumentTitle = toTitleCase "Flat Earth Internal Critique" + , propositionTitle = "The stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane." + , propositionReductio = "" + , propositionSummary = "The argument is structured to demonstrate that, within the context of a flat Earth model, if the stars are perceived as rotating counter-clockwise from the center, they cannot also be perceived as rotating clockwise from any point on the Earth." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z(Pxy~5(Qyz~5Rxz))),(Pkt~1Qta),(Rka~5~3Ska)|=(~3Ska)" + , argumentCertainty = 10 + , argumentImage = "flatearth" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x,y)" + , definiens = "(x) is perceived as rotating counter-clockwise from point (y)" + } + , { definiendum = "Q(y,z)" + , definiens = "(y) is on the same side of the rotational plane as (z)" + } + , { definiendum = "R(x,z)" + , definiens = "(x) will be perceived as rotating counter-clockwise from (z), as long as you are looking towards the plane" + } + , { definiendum = "S(x,z)" + , definiens = "(x) will be perceived as rotating clockwise from (z), as long as you are looking towards the plane" + } + , { definiendum = "x" + , definiens = "an object" + } + , { definiendum = "y" + , definiens = "vantage point A" + } + , { definiendum = "z" + , definiens = "vantage points B" + } + , { definiendum = "k" + , definiens = "stars in the sky" + } + , { definiendum = "t" + , definiens = "the center of the flat Earth" + } + , { definiendum = "a" + , definiens = "anywhere else on the flat Earth" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If an object is perceived as rotating counter-clockwise from vantage point A, then, for all vantage points B, if vantage point A is on the same side of the rotational plane as vantage points B, then the object will be perceived as rotating counter-clockwise from vantage points B, as long as you are looking towards the rotational plane." + , notation = "∀x∀y∀z(Pxy→(Qyz→Rxz))" + } + , { premise = "The stars in the sky are perceived as rotating counter-clockwise from the center of the flat Earth and the center of the flat Earth is on the same side of the rotational plane as anywhere else on the flat Earth." + , notation = "Pkt∧Qta" + } + , { premise = "If the stars in the sky are perceived as rotating counter-clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane, then the stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane." + , notation = "Rka→¬Ska" + } + ] + , conclusion = "Therefore, the stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane." + , conclusionNotation = "¬Ska" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FructoseNAFLD.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FructoseNAFLD.elm new file mode 100755 index 0000000..7ce5c49 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/FructoseNAFLD.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.FructoseNAFLD exposing (argumentFructoseNAFLD) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentFructoseNAFLD : Argument +argumentFructoseNAFLD = + { argumentTitle = toTitleCase "Argument Against Lipogenic Fructose" + , propositionTitle = "Fructose doesn't seem to uniquely cause fatty liver disease." + , propositionReductio = "" + , propositionSummary = "Experimental investigations into fructose overfeeding have consistently failed to produce a fatty liver phenotype in humans. This suggests that fructose, contrary to popular belief in some domains, does not uniquely cause fatty liver disease." + , proofLink = "https://www.umsu.de/trees/#(P~5~3Q),(P)|=(~3Q)" + , argumentCertainty = 8 + , argumentImage = "fructosenafld" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans" + } + , { definiendum = "Q" + , definiens = "fructose seems to uniquely cause fatty liver disease" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans, then fructose does not seem to uniquely cause fatty liver disease." + , notation = "P→¬Q" + } + , { premise = "Experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans." + , notation = "P" + } + ] + , conclusion = "Therefore, fructose does not seem to uniquely cause fatty liver disease." + , conclusionNotation = "¬Q" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthPromotingFoods.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthPromotingFoods.elm new file mode 100755 index 0000000..fdcb2f2 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthPromotingFoods.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.HealthPromotingFoods exposing (argumentHealthPromotingFoods) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthPromotingFoods : Argument +argumentHealthPromotingFoods = + { argumentTitle = toTitleCase "Argument for Food's Inherent Health Value" + , propositionTitle = "All foods are definitionally health-promoting." + , propositionReductio = "" + , propositionSummary = "Given that food is, by its very definition, material that provides essential nutrients and energy to sustain bodily functions and growth, it follows that anything classified as food must be inherently health-promoting by its very nature." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(P)|=(Q)" + , argumentCertainty = 10 + , argumentImage = "healthfoods" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy" + } + , { definiendum = "Q" + , definiens = "all foods are definitionally health-promoting" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy, then all foods are definitionally health-promoting." + , notation = "P→Q" + } + , { premise = "Food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy." + , notation = "P" + } + ] + , conclusion = "Therefore, all foods are definitionally health-promoting." + , conclusionNotation = "Q" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthSeeker.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthSeeker.elm new file mode 100755 index 0000000..9cb8d6a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthSeeker.elm @@ -0,0 +1,55 @@ +module Config.Pages.Debate.Arguments.Records.HealthSeeker exposing (argumentHealthSeeker) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthSeeker : Argument +argumentHealthSeeker = + { argumentTitle = toTitleCase "Ancestral Health Consistency Checker" + , propositionTitle = "If someone (who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk) is not in favour of consuming a novel food (that reduces disease risk when replacing an ancestral food), then that person would be acting against their values." + , propositionReductio = "" + , propositionSummary = "If someone values consuming ancestral foods over novel foods because they have the overall value of reducing disease risk, but a novel food reduces disease risk when replacing an ancestral food, they would be acting against their values by rejecting the novel food." + , proofLink = "https://www.umsu.de/trees/#(~7x(Px)~1~7y(Qy)~5~6x~6y(~3Rxy~5Sx)),(~7x(Px)),(~7y(Qy))|=(~6x~6y(~3Rxy~5Sx))" + , argumentCertainty = 10 + , argumentImage = "healthseeker" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) favours consuming ancestral foods to the exclusion of (y) because they value reducing disease risk" + } + , { definiendum = "Q(y)" + , definiens = "(y) reduces disease risk when replacing an ancestral food" + } + , { definiendum = "R(x,y)" + , definiens = "(x) is in favour of consuming that (y)" + } + , { definiendum = "S(x)" + , definiens = "(x) would be acting against their values" + } + , { definiendum = "x" + , definiens = "someone" + } + , { definiendum = "y" + , definiens = "novel food" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If there exists someone who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk, and there exists a novel food that reduces disease risk when replacing an ancestral food, then if that person is not in favour of consuming that novel food, then that person would be acting against their values." + , notation = "∃x(Px)∧∃y(Qy)→∀x∀y(¬Rxy→Sx)" + } + , { premise = "There exists someone who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk." + , notation = "∃x(Px)" + } + , { premise = "There exists a novel food that reduces disease risk when replacing an ancestral food." + , notation = "∃y(Qy)" + } + ] + , conclusion = "Therefore, if that person is not in favour of consuming that novel food, then that person would be acting against their values." + , conclusionNotation = "∀x∀y(¬Rxy→Sx)" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyChocolate.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyChocolate.elm new file mode 100755 index 0000000..5875dfe --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyChocolate.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthyChocolate exposing (argumentHealthyChocolate) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyChocolate : Argument +argumentHealthyChocolate = + { argumentTitle = toTitleCase "Argument for Healthy Chocolate" + , propositionTitle = "Chocolate does not cause atherosclerosis." + , propositionReductio = "" + , propositionSummary = "Despite chocolate containing high amounts of saturated fat, populations that consume more chocolate do not exhibit higher rates of atherosclerosis, suggesting that chocolate does not have the same effect on heart disease risk as most other saturated fat sources." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(~3Qc)|=(~3Pc)" + , argumentCertainty = 7 + , argumentImage = "chocolate" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "c" + , definiens = "chocolate" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Chocolate has a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pc" + } + , { premise = "There is a dearth of epistemically countervailing data on chocolate." + , notation = "Qc" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that chocolate is healthy than it is to believe the opposite." + , conclusionNotation = "Rc" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyDairy.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyDairy.elm new file mode 100755 index 0000000..f47b502 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyDairy.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.HealthyDairy exposing (argumentHealthyDairy) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyDairy : Argument +argumentHealthyDairy = + { argumentTitle = toTitleCase "Argument for Healthy Dairy Products" + , propositionTitle = "Non-churned, non-homogenized dairy do not cause atherosclerosis." + , propositionReductio = "" + , propositionSummary = "The diet-heart hypothesis would predict that populations consuming more dairy foods should have higher rates of the disease. However, even when you account for factors that could plausibly influence the results, non-churned, non-homogenized dairy have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease and colorectal cancer." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(~3Qh)|=(~3Ph)" + , argumentCertainty = 7 + , argumentImage = "dairy" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) causes atherosclerosis" + } + , { definiendum = "Q(x)" + , definiens = "populations consuming more (x) have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates" + } + , { definiendum = "x" + , definiens = "high saturated fat food" + } + , { definiendum = "h" + , definiens = "non-churned, non-homogenized dairy" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a high saturated fat food causes atherosclerosis, then populations consuming more of the high saturated fat food have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates." + , notation = "∀x(Px→Qx)" + } + , { premise = "Populations consuming more non-churned, non-homogenized dairy do not have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates." + , notation = "¬Qh" + } + ] + , conclusion = "Therefore, non-churned, non-homogenized dairy do not cause atherosclerosis." + , conclusionNotation = "¬Ph" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFattyFish.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFattyFish.elm new file mode 100755 index 0000000..a288a2f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFattyFish.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthyFattyFish exposing (argumentHealthyFattyFish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyFattyFish : Argument +argumentHealthyFattyFish = + { argumentTitle = toTitleCase "Argument for Healthy Fatty Fish" + , propositionTitle = "Fatty fish is healthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, fatty fish have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)" + , argumentCertainty = 8 + , argumentImage = "fattyfish" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "t" + , definiens = "fatty fish" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Fatty fish have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pt" + } + , { premise = "There is a dearth of epistemically countervailing data on fatty fish." + , notation = "Qt" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that fatty fish are healthy than it is to believe the opposite." + , conclusionNotation = "Rt" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFibre.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFibre.elm new file mode 100755 index 0000000..08b1848 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFibre.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthyFibre exposing (argumentHealthyFibre) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyFibre : Argument +argumentHealthyFibre = + { argumentTitle = toTitleCase "Argument for Healthy Fibre" + , propositionTitle = "Fibre, whether whole or refined, is healthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, both refined and whole fibre have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qb)|=(Pb)" + , argumentCertainty = 9 + , argumentImage = "fibre" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "f" + , definiens = "fibre" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Fibre has a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pf" + } + , { premise = "There is a dearth of epistemically countervailing data on fibre." + , notation = "Qf" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that fibre is healthy than it is to believe the opposite." + , conclusionNotation = "Rf" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFood.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFood.elm new file mode 100755 index 0000000..1fbae59 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyFood.elm @@ -0,0 +1,64 @@ +module Config.Pages.Debate.Arguments.Records.HealthyFood exposing (argumentHealthyFood) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyFood : Argument +argumentHealthyFood = + { argumentTitle = toTitleCase "Argument For Healthy Food Substitution" + , propositionTitle = "Pepsi is healthy compared to leafy greens when trapped on a desert island." + , propositionReductio = "" + , propositionSummary = "A food is considered healthier than another in a specific context if it increases the time before illness or disease sets in when replacing the other food. On a desert island, since Pepsi can extend the time before starvation compared to leafy greens, it is considered healthier than leafy greens in that context." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z~6w(Pxyw~4Qwxzy)),(Qdpsl)|=(Ppld)" + , argumentCertainty = 10 + , argumentImage = "foodsubstitution" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x,y,w)" + , definiens = "(x) is healthy compared to (w) when in (y)" + } + , { definiendum = "Q(x,y,z,w)" + , definiens = "when within a (y), the consumption of (x) is likely to increase the lag-time to the onset of (z) when replacing (w)" + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "y" + , definiens = "a another food" + } + , { definiendum = "z" + , definiens = "an illness or disease" + } + , { definiendum = "w" + , definiens = "a context" + } + , { definiendum = "p" + , definiens = "Pepsi" + } + , { definiendum = "d" + , definiens = "trapped on a desert island" + } + , { definiendum = "s" + , definiens = "starvation" + } + , { definiendum = "l" + , definiens = "leafy greens" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "A given a food is healthy compared to another given food when in a given context if, and only if, when within that context, the consumption of that given a food is likely to increase the lag-time to the onset of illness, disease, or infirmity when replacing a given other food." + , notation = "∀x∀y∀z∀w(Pxyw↔Qwxzy)" + } + , { premise = "When trapped on a desert island the consumption of Pepsi increases the lag-time to the onset of starvation when replacing leafy greens." + , notation = "Qdpsl" + } + ] + , conclusion = "Therefore, Pepsi is healthy compared to leafy greens when trapped on a desert island." + , conclusionNotation = "Ppld" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyPlantFoods.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyPlantFoods.elm new file mode 100755 index 0000000..8259635 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthyPlantFoods.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthyPlantFoods exposing (argumentHealthyPlantFoods) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthyPlantFoods : Argument +argumentHealthyPlantFoods = + { argumentTitle = toTitleCase "Argument for Healthy Plant Foods" + , propositionTitle = "Whole plant foods are healthy." + , propositionReductio = "" + , propositionSummary = "Since whole plant foods consistently consistently associate with reduced risk of illness and death, it is reasonable to conclude that whole plant foods are healthy." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)" + , argumentCertainty = 9 + , argumentImage = "plantfoods" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "w" + , definiens = "whole plant foods" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Whole plant foods have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pw" + } + , { premise = "There is a dearth of epistemically countervailing data on whole plant foods." + , notation = "Qw" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that whole plant foods are healthy than it is to believe the opposite." + , conclusionNotation = "Rw" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySeedOils.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySeedOils.elm new file mode 100755 index 0000000..3d812e1 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySeedOils.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthySeedOils exposing (argumentHealthySeedOils) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthySeedOils : Argument +argumentHealthySeedOils = + { argumentTitle = toTitleCase "Argument for Healthy Seed Oils" + , propositionTitle = "Non-hydrogenated vegetable oils are healthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for known factors, or model a reasonable accounting of unknown factors, that could plausibly influence the results (such as with adjustment models in prospective cohort studies or randomization in controlled trials), non-hydrogenated vegetable oils have been shown to consistently reduce the risk of morbidity and mortality in both prospective cohort studies and randomized controlled trials, strongly suggesting that they directly contribute to better health outcomes." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pv)|=(Qv)" + , argumentCertainty = 9 + , argumentImage = "seedoils" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "v" + , definiens = "non-hydrogenated vegetable oils" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Non-hydrogenated vegetable oils have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pv" + } + , { premise = "There is a dearth of epistemically countervailing data on non-hydrogenated vegetable oils." + , notation = "Qv" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that non-hydrogenated vegetable oils are healthy than it is to believe the opposite." + , conclusionNotation = "Rv" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySoy.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySoy.elm new file mode 100755 index 0000000..034b74a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/HealthySoy.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.HealthySoy exposing (argumentHealthySoy) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentHealthySoy : Argument +argumentHealthySoy = + { argumentTitle = toTitleCase "Argument for Healthy Soy Products" + , propositionTitle = "Soy products are healthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, non-hydrogenated soy products have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qs)|=(Ps)" + , argumentCertainty = 7 + , argumentImage = "soyproducts" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "s" + , definiens = "soy products" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Soy products have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Ps" + } + , { premise = "There is a dearth of epistemically countervailing data on soy products." + , notation = "Qs" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that soy products are healthy than it is to believe the opposite." + , conclusionNotation = "Rs" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ImmortalityReductio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ImmortalityReductio.elm new file mode 100755 index 0000000..70a991c --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ImmortalityReductio.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.ImmortalityReductio exposing (argumentImmortalityReductio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentImmortalityReductio : Argument +argumentImmortalityReductio = + { argumentTitle = toTitleCase "Appeal to Nature Immortality Reductio" + , propositionTitle = "Senescence does not result in death." + , propositionReductio = "People who appeal to nature in this fashion assert that death cannot result from natural biological processes. Usually this is asserted in order to avoid accepting that LDL is causative of atherosclerosis." + , propositionSummary = "If one commits to this variation of the appeal to nature fallacy, it's unclear why they wouldn't be subsequently committed to affirm that humans are immortal, like Connor fucking MacLeod." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y(Hx~5~3Rxy)),(Hs)%7C=(~3Rsd)" + , argumentCertainty = 10 + , argumentImage = "immortality" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "humans undergo (x)" + } + , { definiendum = "Q(x,y)" + , definiens = "(x) results in (y)" + } + , { definiendum = "x" + , definiens = "normal physiological process" + } + , { definiendum = "y" + , definiens = "negative health outcome" + } + , { definiendum = "s" + , definiens = "senescence" + } + , { definiendum = "d" + , definiens = "death" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If humans undergo a normal physiological process, then the normal physiological process does not result in a negative health outcome." + , notation = "∀x∀y(Px→¬Qxy)" + } + , { premise = "Humans undergo senescence." + , notation = "Ps" + } + ] + , conclusion = "Therefore, senescence does not result in death." + , conclusionNotation = "¬Qsd" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/LuigiTerrorist.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/LuigiTerrorist.elm new file mode 100755 index 0000000..14dd507 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/LuigiTerrorist.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.LuigiTerrorist exposing (argumentLuigiTerrorist) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentLuigiTerrorist : Argument +argumentLuigiTerrorist = + { argumentTitle = toTitleCase "Argumnent for Luigi Mangione Being a Terrorist" + , propositionTitle = "Luigi Mangione is a domestic terrorist" + , propositionReductio = "" + , propositionSummary = "According to the FBI's definition of a \" domestic terrorist \", it is quite clear that Luigi Mangione qualifies, based on his actions. It just seems like an analytic truth." + , proofLink = "https://www.umsu.de/trees/#~6x(Px~4Qx),Qm|=Pm" + , argumentCertainty = 10 + , argumentImage = "luigiterrorist" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) commits violent, criminal acts to further ideological goals stemming from domestic influence" + } + , { definiendum = "Q(x)" + , definiens = "(x) is a domestic terrorist" + } + , { definiendum = "x" + , definiens = "an individual" + } + , { definiendum = "m" + , definiens = "Luigi Mangione" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "An individual is a domestic terrorist if, and only if, the individual commits violent, criminal acts to further ideological goals stemming from domestic influences." + , notation = "∀x(Px↔Qx)" + } + , { premise = "Luigi Mangione committed violent, criminal acts to further ideological goals stemming from domestic influence." + , notation = "Qm" + } + ] + , conclusion = "Therefore, Luigi Mangione is a domestic terrorist." + , conclusionNotation = "Pm" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Malondialdehyde.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Malondialdehyde.elm new file mode 100755 index 0000000..423ba3b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Malondialdehyde.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.Malondialdehyde exposing (argumentMalondialdehyde) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentMalondialdehyde : Argument +argumentMalondialdehyde = + { argumentTitle = toTitleCase "Atherogenic Omega-3 Reductio" + , propositionTitle = "Omega-3s are atherogenic." + , propositionReductio = "Certain anti-seed oil proponents assert that seed oils cause atherosclerosis via omega-6-derived malondialdehyde, and that this is the only cause of atherosclerosis. However, they often also assert that omega-3 fatty acids are anti-atherogenic, despite the fact that omega-3s actually produce more malondialdehyde than omega-6s." + , propositionSummary = "If one takes the view that in order for a substance to increase the risk of atherosclerosis, it must facilitate the oxidative modification of LDL particles via malondialdehyde production, and one also affirms that omega-3s are anti-atherogenic, then this would imply that all fatty acids that produce malondialdehyde, including omega-3s, must also be atherogenic, which contradicts the their belief that omega-3s are heart-healthy." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qm),(Pm~5~6x(Rx))%7C=(Ro)" + , argumentCertainty = 6 + , argumentImage = "mda" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) increases the risk of atherosclerosis" + } + , { definiendum = "Q(x)" + , definiens = "(x) facilitates the oxidative modification of LDL particles" + } + , { definiendum = "R(x)" + , definiens = "all (x) are atherogenic" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "y" + , definiens = "malondialdehyde-producing fatty acids" + } + , { definiendum = "m" + , definiens = "malondialdehyde" + } + , { definiendum = "o" + , definiens = "omega-3s" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "A substance increases the risk of atherosclerosis if, and only if, that substance facilitates the oxidative modification of LDL particles." + , notation = "∀x(Px↔Qx)" + } + , { premise = "Malondialdehyde facilitates the oxidative modification of LDL particles." + , notation = "Qm" + } + , { premise = "If malondialdehyde increases the risk of atherosclerosis, then all malondialdehyde-producing fatty acids are atherogenic." + , notation = "Pm→∀y(Ry)" + } + ] + , conclusion = "Therefore, omega-3s are atherogenic." + , conclusionNotation = "Ro" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/OddOrderPredators.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/OddOrderPredators.elm new file mode 100755 index 0000000..9ab6e41 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/OddOrderPredators.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.OddOrderPredators exposing (argumentOddOrderPredators) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentOddOrderPredators : Argument +argumentOddOrderPredators = + { argumentTitle = toTitleCase "Argument for Culling Odd Order Predators" + , propositionTitle = "It is permissible to prevent predation with lethal force to the same degree we would tolerate for humans." + , propositionReductio = "" + , propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. I think humans have the right not to be exposed to circumstances where they're hunted for food, and I think it is permissible to use lethal force to save the lives of the hunted, all else equal. By extension I think non-human animals have this right too." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(Pa),(~3Qa~5R)%7C=(R)" + , argumentCertainty = 10 + , argumentImage = "oddorderpredators" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has negative rights" + } + , { definiendum = "Q(x)" + , definiens = "we should defend (x) from rights violations to any lesser degree than we would tolerate for trait-adjusted humans" + } + , { definiendum = "R(x)" + , definiens = "it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans" + } + , { definiendum = "x" + , definiens = "a being" + } + , { definiendum = "a" + , definiens = "animal" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if something has negative rights, then we should not defend it from rights violations to any lesser degree than we would tolerate for trait-adjusted humans." + , notation = "∀x(Px→¬Qx)" + } + , { premise = "Animals have negative rights." + , notation = "Pa" + } + , { premise = "If we should not defend animals from rights violations to any lesser degree than we would tolerate for humans, then it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans." + , notation = "¬Qa→R" + } + ] + , conclusion = "Therefore, it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans." + , conclusionNotation = "R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Omega3Omega6Ratio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Omega3Omega6Ratio.elm new file mode 100755 index 0000000..ac9a3eb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Omega3Omega6Ratio.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.Omega3Omega6Ratio exposing (argumentOmega3Omega6Ratio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentOmega3Omega6Ratio : Argument +argumentOmega3Omega6Ratio = + { argumentTitle = toTitleCase "Argument Against the Omega-6/Omega-3 Ratio" + , propositionTitle = "The omega-6/omega-3 ratio is unlikely to matter for health." + , propositionReductio = "" + , propositionSummary = "More often than not, the associated risks of a high omega-6/omega-3 ratio are better explained by omega-3 alone. In multivariable analyses, the ratio looks like it matters, but in univariable anaylses, low omega-3 is almost always driving the risk via lowering the denominator." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)|=(~3P)" + , argumentCertainty = 7 + , argumentImage = "omega6omega3ratio" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone" + } + , { definiendum = "Q" + , definiens = "the omega-6/omega-3 ratio is likely to matter for health" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone, then the omega-6/omega-3 ratio is not likely to matter for health." + , notation = "P→¬Q" + } + , { premise = "Increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone." + , notation = "P" + } + ] + , conclusion = "Therefore, the omega-6/omega-3 ratio is not likely to matter for health." + , conclusionNotation = "¬Q" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Ostroveganism.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Ostroveganism.elm new file mode 100755 index 0000000..b5a6118 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Ostroveganism.elm @@ -0,0 +1,67 @@ +module Config.Pages.Debate.Arguments.Records.Ostroveganism exposing (argumentOstroveganism) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentOstroveganism : Argument +argumentOstroveganism = + { argumentTitle = toTitleCase "Argument for Vegan Bivalves" + , propositionTitle = "Bivalves are not likely to be sentient." + , propositionReductio = "" + , propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. However, I do not believe that non-sentient human bodies, such as brainless or brain-dead human bodies, have such human rights. By extension, I don't believe that non-human animals that lack brains possess these rights either." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx~1Rx~1(Sx~2Wx))),(Qc~1~3Rc~1Sc~1~3Wc),(~3Pc~5~6x(~3Tx))|=(~3Tb)" + , argumentCertainty = 10 + , argumentImage = "ostroveganism" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) counts as a brain" + } + , { definiendum = "Q(x)" + , definiens = "(x) is a complex network of interconnected neurons" + } + , { definiendum = "R(x)" + , definiens = "(x) integrates neuronal pathways from multiple sensory organs" + } + , { definiendum = "S(x)" + , definiens = "(x) presents with distinct functional regions" + } + , { definiendum = "W(x)" + , definiens = "(x) presents with nuclei with white matter tracts that facilitate inter-regional communication" + } + , { definiendum = "T(x)" + , definiens = "the corresponding (y) is likely to be sentient" + } + , { definiendum = "x" + , definiens = "an object" + } + , { definiendum = "y" + , definiens = "brainless biological system into which cerebral ganglia are integrated" + } + , { definiendum = "c" + , definiens = "cerebral ganglia" + } + , { definiendum = "b" + , definiens = "bivalves" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "Something counts as a brain if, and only if, something is a complex network of interconnected neurons, integrates neuronal pathways from multiple sensory organs, and presents with distinct functional regions or nuclei with white matter tracts that facilitate inter-regional communication." + , notation = "∀x(Px↔(Qx∧Rx∧(Sx∨Wx)))" + } + , { premise = "Cerebral ganglia meet criteria one and three, but not criteria two and four." + , notation = "Qc∧¬Rc∧Sc∧¬Wc" + } + , { premise = "If cerebral ganglia do not count as brains, then the corresponding brainless biological system into which the cerebral ganglia are integrated is not likely to be sentient." + , notation = "¬Pc→∀x(¬Tx)" + } + ] + , conclusion = "Therefore, bivalves are not likely to be sentient." + , conclusionNotation = "¬Tb" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PlantBasedCVDReversal.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PlantBasedCVDReversal.elm new file mode 100755 index 0000000..f93d346 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PlantBasedCVDReversal.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.PlantBasedCVDReversal exposing (argumentPlantBasedCVDReversal) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentPlantBasedCVDReversal : Argument +argumentPlantBasedCVDReversal = + { argumentTitle = toTitleCase "Argument Against Plant-Based CVD Reversal" + , propositionTitle = "Plant-based diets do not appear to clinically reverse atherosclerosis." + , propositionReductio = "" + , propositionSummary = "To date, there is not a single case of supposed heart disease reversal from a plant-based diet that is actually compatible with established definitions of heart disease reversal in the literature." + , proofLink = "https://www.umsu.de/trees/#(P~1~3Q~5~3R),(P),(~3Q)|=(~3R)" + , argumentCertainty = 8 + , argumentImage = "plantbasedcvd" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "there are established definitions for atherosclerosis reversal in the domain of cardiology" + } + , { definiendum = "Q" + , definiens = "current research on plant-based diets and atherosclerosis reversal satisfy the definitions for atherosclerosis reversal in the domain of cardiology" + } + , { definiendum = "R" + , definiens = "plant-based diets do not appear to clinically reverse atherosclerosis" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If there are established definitions for atherosclerosis reversal in the domain of cardiology and current research on plant-based diets and atherosclerosis reversal do not satisfy the definitions for atherosclerosis reversal in the domain of cardiology, then plant-based diets do not appear to clinically reverse atherosclerosis." + , notation = "P∧¬Q→¬R" + } + , { premise = "There are established definitions for atherosclerosis reversal in the domain of cardiology." + , notation = "P" + } + , { premise = "Current research on plant-based diets and atherosclerosis reversal do not satisfy the definitions for atherosclerosis reversal in the domain of cardiology." + , notation = "¬Q" + } + ] + , conclusion = "Therefore, plant-based diets do not appear to clinically reverse atherosclerosis." + , conclusionNotation = "¬R" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PollinationReductio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PollinationReductio.elm new file mode 100755 index 0000000..790eff7 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PollinationReductio.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.PollinationReductio exposing (argumentPollinationReductio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentPollinationReductio : Argument +argumentPollinationReductio = + { argumentTitle = toTitleCase "Vegan Anti-Pollination Reductio" + , propositionTitle = "Apples are not vegan" + , propositionReductio = "Some vegans hold to a deontic principle that any form of animal exploitation is wrong, and the products of exploitation are to be boycotted and designated non-vegan." + , propositionSummary = "If one accepts that no animal exploitation is permissible, they're committed to some truly hilarious positions, such as apples not being vegan because we exploit the natural behaviour of bees to pollinate our apple trees." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4~3Qx)),(Qb),(~3Pb~5~6y(~3Ry))|=(~3Ra)" + , argumentCertainty = 10 + , argumentImage = "pollinationreductio" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is vegan" + } + , { definiendum = "Q(x)" + , definiens = "(x) involves human on non-human animal exploitation" + } + , { definiendum = "R(y)" + , definiens = "(y) generated are vegan" + } + , { definiendum = "x" + , definiens = "a being" + } + , { definiendum = "y" + , definiens = "a product" + } + , { definiendum = "b" + , definiens = "bees pollinating human crops" + } + , { definiendum = "a" + , definiens = "apples" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "Something is vegan if, and only if, something does not involve human on non-human animal exploitation." + , notation = "∀x(Px↔¬Qx)" + } + , { premise = "Bees pollinating human crops involves human on non-human exploitation." + , notation = "Qb" + } + , { premise = "If bees pollinating human crops is not vegan, then the products generated are not vegan." + , notation = "¬Pb→∀y(¬Ry)" + } + ] + , conclusion = "Therefore, apples are not vegan." + , conclusionNotation = "¬Ra" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PolyphenolReductio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PolyphenolReductio.elm new file mode 100755 index 0000000..82e5f47 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/PolyphenolReductio.elm @@ -0,0 +1,70 @@ +module Config.Pages.Debate.Arguments.Records.PolyphenolReductio exposing (argumentPolyphenolReductio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentPolyphenolReductio : Argument +argumentPolyphenolReductio = + { argumentTitle = toTitleCase "Anti-Polyphenol Reductio" + , propositionTitle = "Anti-polyphenol, ancestral diet advocates are committed to favouring GMOs." + , propositionReductio = "Some carnivore diet proponents suggest that phytochemical compounds, such as polyphenols, are actually harmful to human beings." + , propositionSummary = "If one is committed to the notions that polyphenols in plants are bad for humans, and that grass-fed red meat is the healthiest available type of red meat, then they're pragmatically committed to being pro-GMO to lower the grass-derived polyphenol content of grass-fed beef." + , proofLink = "https://www.umsu.de/trees/#(~6x~6y(Px~1Qxy~5Rxy)),(Pp),(Qpg),(Rpg~5Spg),(Spg~5Wp)|=(Wp)" + , argumentCertainty = 7 + , argumentImage = "polyphenolreductio" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is harmful" + } + , { definiendum = "Q(x,y)" + , definiens = "(x) is contained in (y)" + } + , { definiendum = "R(x,y)" + , definiens = "(x) renders (y) harmful" + } + , { definiendum = "S(p,g)" + , definiens = "genetic modification that removes (p) from grass renders (g) less harmful" + } + , { definiendum = "W(p)" + , definiens = "health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs" + } + , { definiendum = "x" + , definiens = "plant defense chemicals" + } + , { definiendum = "y" + , definiens = "a food" + } + , { definiendum = "p" + , definiens = "polyphenols" + } + , { definiendum = "g" + , definiens = "grass-fed beef" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If plant defense chemicals are harmful and plant defense chemicals are contained in a food, then plant defense chemicals render the food harmful." + , notation = "∀x∀y(Px∧Qxy→Rxy)" + } + , { premise = "Polyphenols from grass are harmful." + , notation = "Pp" + } + , { premise = "Polyphenols from grass are contained in grass-fed beef." + , notation = "Qpg" + } + , { premise = "If polyphenols from grass render grass-fed beef harmful, then genetic modification that removes polyphenols from grass renders grass-fed beef less harmful." + , notation = "Rpg→Spg" + } + , { premise = "If genetic modification that removes polyphenols from grass renders grass-fed beef less harmful, then health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs." + , notation = "Spg→Wp" + } + ] + , conclusion = "Therefore, health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs." + , conclusionNotation = "Wp" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ScratcherPioneers.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ScratcherPioneers.elm new file mode 100755 index 0000000..e346030 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/ScratcherPioneers.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.ScratcherPioneers exposing (argumentScratcherPioneers) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentScratcherPioneers : Argument +argumentScratcherPioneers = + { argumentTitle = toTitleCase "Tattoo Pioneers were Scratchers" + , propositionTitle = "The original trailblazers of modern tattooing were scratchers." + , propositionReductio = "Some tattoo artists condemn scratchers and their associated culture due to poor observation of sanitation standards and lack of mentorship and also simultaneously hold the original trailblazers of the tattoo industry in high esteem." + , propositionSummary = "If what qualifies a given tattoo artist as a scratcher is poor observation of sanitation standards and lack of mentorship, then it's just straightforwardly entailed that the original trailblazers of the tattoo industry were scratchers." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx~2Rx~2Sx)),(Qt),(Rt),(St)%7C=(Pt)" + , argumentCertainty = 10 + , argumentImage = "tattooscratchers" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is a scratcher" + } + , { definiendum = "Q(x)" + , definiens = "(x) tattoos without a license" + } + , { definiendum = "R(x)" + , definiens = "(x) tattoos without observing basic health standards" + } + , { definiendum = "S(x)" + , definiens = "(x) tattoos without having undertaken apprenticeship" + } + , { definiendum = "x" + , definiens = "a tattoo artist" + } + , { definiendum = "t" + , definiens = "original trailblazers of modern tattooing" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "A tattoo artist is a scratcher if, and only if, the tattoo artist tattoos without a license and/or one tattoos without observing basic health standards and/or one tattoos without having undertaken apprenticeship." + , notation = "∀x(Px↔Qx∨Rx∨Sx)" + } + , { premise = "The original trailblazers of modern tattooing tattooed without licenses." + , notation = "Qt" + } + , { premise = "The original trailblazers of modern tattooing tattooed without observing basic health standards." + , notation = "Rt" + } + , { premise = "The original trailblazers of modern tattooing tattooed without having undertaken apprenticeship." + , notation = "St" + } + ] + , conclusion = "Therefore, the original trailblazers of modern tattooing were scratchers." + , conclusionNotation = "Pt" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/SodiumCVD.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/SodiumCVD.elm new file mode 100755 index 0000000..f878e4e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/SodiumCVD.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.SodiumCVD exposing (argumentSodiumCVD) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentSodiumCVD : Argument +argumentSodiumCVD = + { argumentTitle = toTitleCase "Argument for Atherogenic Sodium" + , propositionTitle = "Higher intakes of sodium increases cardiovascular disease risk." + , propositionReductio = "" + , propositionSummary = "In all of the strongest analysis on the relationship between sodium intake and cardiovascular disease risk, there is a linear and proportional relationship. Particularly when the strongest measurement methods are used, such as multiple 24-hour urinary collections." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~1Q~5Rx)),(Ps),(Q)|=(Rs)" + , argumentCertainty = 9 + , argumentImage = "sodiumcvd" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) consistently raises blood pressure in controlled studies" + } + , { definiendum = "Q(x)" + , definiens = "elevated blood pressure is known to cause cardiovascular disease" + } + , { definiendum = "R(x)" + , definiens = "higher intakes of substance (x) increases cardiovascular disease risk" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "s" + , definiens = "sodium" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a substance consistently raises blood pressure in controlled studies and elevated blood pressure is known to cause cardiovascular disease, then higher intakes of that substance increases cardiovascular disease risk." + , notation = "∀x(Px∧Q→Rx)" + } + , { premise = "Sodium consistently raises blood pressure in controlled studies." + , notation = "Ps" + } + , { premise = "Elevated blood pressure is known to cause cardiovascular disease." + , notation = "Q" + } + ] + , conclusion = "Therefore, higher intakes of sodium increases cardiovascular disease risk." + , conclusionNotation = "Rs" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TMAOCausality.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TMAOCausality.elm new file mode 100755 index 0000000..e0cfcf6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TMAOCausality.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Arguments.Records.TMAOCausality exposing (argumentTMAOCausality) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentTMAOCausality : Argument +argumentTMAOCausality = + { argumentTitle = toTitleCase "Argument Against TMAO Being Causal in CVD" + , propositionReductio = "" + , propositionTitle = "TMAO is not likely to be causative of heart disease." + , propositionSummary = "In the strongest research we have on the relationship between TMAO and heart disease risk, such as with Mendelian randomization and genome-wide associational studies, there is no persuasive causal link between TMAO in the blood and heart disease risk." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(~3Qt)|=(~3Pt)" + , argumentCertainty = 9 + , argumentImage = "tmaocausality" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) is likely to be causative of heart diseas" + } + , { definiendum = "Q(x)" + , definiens = "(x) consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates" + } + , { definiendum = "x" + , definiens = "a substance" + } + , { definiendum = "t" + , definiens = "TMAO" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a substance is likely to be causative of heart disease if, then the substance consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates." + , notation = "∀x(Px↔Qx)" + } + , { premise = "TMAO consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates." + , notation = "¬Qt" + } + ] + , conclusion = "Therefore, TMAO is not likely to be causative of heart disease." + , conclusionNotation = "¬Pt" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Template.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Template.elm new file mode 100755 index 0000000..c9cf1bb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/Template.elm @@ -0,0 +1,61 @@ +module Config.Pages.Debate.Arguments.Records.Template exposing (argument) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argument : Argument +argument = + { argumentTitle = toTitleCase "" + , propositionTitle = "" + , propositionReductio = "" + , propositionSummary = "" + , proofLink = "" + , argumentCertainty = 1 + , argumentImage = "" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + , { definiendum = "" + , definiens = "" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "" + , notation = "" + } + , { premise = "" + , notation = "" + } + , { premise = "" + , notation = "" + } + , { premise = "" + , notation = "" + } + , { premise = "" + , notation = "" + } + ] + , conclusion = "" + , conclusionNotation = "" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TransPeople.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TransPeople.elm new file mode 100755 index 0000000..568beb3 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TransPeople.elm @@ -0,0 +1,70 @@ +module Config.Pages.Debate.Arguments.Records.TransPeople exposing (argumentTransPeople) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentTransPeople : Argument +argumentTransPeople = + { argumentTitle = toTitleCase "Argument For Trans Identity" + , propositionTitle = "A trans person of the male sex is a woman and a trans person with female sex is a man." + , propositionReductio = "" + , propositionSummary = "Virtually 100% of the debate surrounding trans identity is merely a trivial semantic disagreement about what constitutes a man or a woman. Below is a formal argument for characterization of a man and a women that maximally satisfies both parties and minimizes absurdities." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Rx~1Wx)),(~6x(Qx~4Sx~1Wx)),(Ra~1Wa),(Sg~1Wg)|=(Pa~1Qg)" + , argumentCertainty = 10 + , argumentImage = "transpeople" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "Male" + , definiens = "the cluster of traits that associate with small, but not large, gametes." + } + , { definiendum = "Female" + , definiens = "the cluster of traits that associate with large, but not small, gametes." + } + , { definiendum = "P(x)" + , definiens = "(x) is a woman" + } + , { definiendum = "Q(x)" + , definiens = "(x) is a man" + } + , { definiendum = "R(x)" + , definiens = "(x) possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes" + } + , { definiendum = "S(x)" + , definiens = "(x) possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes" + } + , { definiendum = "W(x)" + , definiens = "(x) is over 18 years of age" + } + , { definiendum = "x" + , definiens = "someone" + } + , { definiendum = "a" + , definiens = "a trans person of the male sex" + } + , { definiendum = "g" + , definiens = "a trans person of the female sex" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "Someone is a woman if, and only if, someone possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes and someone is over 18 years of age." + , notation = "∀x(Px↔Rx∧Wx)" + } + , { premise = "Someone is a man if, and only if, someone possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes and someone is over 18 years of age." + , notation = "∀x(Qx↔Sx∧Wx)" + } + , { premise = "A trans person of the male sex possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes and a trans person with small gametes is over 18 years of age." + , notation = "Ra∧Wa" + } + , { premise = "A trans person of the female sex possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes and a trans person with large gametes is over 18 years of age." + , notation = "Sg∧Wg" + } + ] + , conclusion = "Therefore, a trans person of the male sex is a woman and a trans person with female sex is a man." + , conclusionNotation = "Pa∧Qg" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TruncatedMeta.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TruncatedMeta.elm new file mode 100755 index 0000000..df03734 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/TruncatedMeta.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Arguments.Records.TruncatedMeta exposing (argumentTruncatedMeta) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentTruncatedMeta : Argument +argumentTruncatedMeta = + { argumentTitle = toTitleCase "Argument For Truncated Meta-Analysis" + , propositionTitle = "Meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies." + , propositionReductio = "" + , propositionSummary = "Some people argue that omission of studies from meta-analysis is bad form because the more point estimates, the better. However, I argue that there are circumstances where including more studies can actually lower the quality of causal estimates." + , proofLink = "https://www.umsu.de/trees/#(P~5Q),(P)%7C=(Q)" + , argumentCertainty = 7 + , argumentImage = "truncatedmetas" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "underpowered studies provide weaker causal estimates than adequately powered studies" + } + , { definiendum = "Q" + , definiens = "meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If underpowered studies provide weaker causal estimates than adequately powered studies, then meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies." + , notation = "P→Q" + } + , { premise = "Underpowered studies provide weaker causal estimates than adequately powered studies." + , notation = "P" + } + ] + , conclusion = "Therefore, meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies." + , conclusionNotation = "Q" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyCoconutOil.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyCoconutOil.elm new file mode 100755 index 0000000..7b06ffe --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyCoconutOil.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.UnhealthyCoconutOil exposing (argumentUnhealthyCoconutOil) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentUnhealthyCoconutOil : Argument +argumentUnhealthyCoconutOil = + { argumentTitle = toTitleCase "Argument For Atherogenic Coconut Oil" + , propositionTitle = "There is not a reason to believe that coconut oil is any better for heart health than other saturated fat sources that increase LDL-C." + , propositionReductio = "" + , propositionSummary = "LDL causally associates with heart disease in a linear and proportional manner, and in all cases exposures that durably increase LDL over time produce likewise increases in heart disease risk. Coconut oil is one such exposure." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~1Qx~5~3Rx)),(Pc),(Qc)|=(~3Rc)" + , argumentCertainty = 9 + , argumentImage = "coconutoil" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P" + , definiens = "a given (x) increases LDL-C at a similar rate to other saturated fat sources" + } + , { definiendum = "Q" + , definiens = "a given (x) has no other known qualities that counteract said increase in LDL-C" + } + , { definiendum = "R" + , definiens = "there is a reason to believe that such an (x) is any better for heart health than other (x) that increase LDL-C" + } + , { definiendum = "x" + , definiens = "a saturated fat source" + } + , { definiendum = "c" + , definiens = "coconut oil" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "If a given saturated fat source increases LDL-C at a similar rate to other saturated fat sources and and a given saturated fat source has no other known qualities that counteract said increase in LDL-C, then there is not a reason to believe that such a saturated fat source is any better for heart health than other saturated fat sources that increase LDL-C." + , notation = "∀x(Px∧Qx→¬Rx)" + } + , { premise = "Coconut oil increases LDL-C at a similar rate to other saturated fat sources." + , notation = "Pc" + } + , { premise = "Coconut oil has no other known qualities that counteract said increase in LDL-C." + , notation = "Qc" + } + ] + , conclusion = "Therefore, there is not a reason to believe that coconut oil is any better for heart health than other saturated fat sources that increase LDL-C." + , conclusionNotation = "¬Rc" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyProcessedMeat.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyProcessedMeat.elm new file mode 100755 index 0000000..511dce2 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyProcessedMeat.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.UnhealthyProcessedMeat exposing (argumentUnhealthyProcessedMeat) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentUnhealthyProcessedMeat : Argument +argumentUnhealthyProcessedMeat = + { argumentTitle = toTitleCase "Argument for Unhealthy Processed Meat" + , propositionTitle = "Processed meat is unhealthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, processed meat has been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to colorectal cancer and heart disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qs)|=(Ps)" + , argumentCertainty = 8 + , argumentImage = "processedmeat" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "p" + , definiens = "processed meat" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Processed meat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pp" + } + , { premise = "There is a dearth of epistemically countervailing data on processed meat." + , notation = "Qp" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that processed meat is unhealthy than it is to believe the opposite." + , conclusionNotation = "Rp" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyRedMeat.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyRedMeat.elm new file mode 100755 index 0000000..81f8bd6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthyRedMeat.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.UnhealthyRedMeat exposing (argumentUnhealthyRedMeat) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentUnhealthyRedMeat : Argument +argumentUnhealthyRedMeat = + { argumentTitle = toTitleCase "Argument for Unhealthy Red Meat" + , propositionTitle = "Red meat and processed meat are unhealthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, unprocessed red meat has been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to colorectal cancer and heart disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qm)|=(Pm)" + , argumentCertainty = 7 + , argumentImage = "redmeat" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "r" + , definiens = "red meat" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Red meat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Pr" + } + , { premise = "There is a dearth of epistemically countervailing data on red meat." + , notation = "Qr" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that red meat is unhealthy than it is to believe the opposite." + , conclusionNotation = "Rr" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthySaturatedFat.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthySaturatedFat.elm new file mode 100755 index 0000000..20f7315 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/UnhealthySaturatedFat.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Arguments.Records.UnhealthySaturatedFat exposing (argumentUnhealthySaturatedFat) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentUnhealthySaturatedFat : Argument +argumentUnhealthySaturatedFat = + { argumentTitle = toTitleCase "Argument Against Saturated Animal Fat" + , propositionTitle = "Most sources of saturated fat are unhealthy." + , propositionReductio = "" + , propositionSummary = "Even when you account for factors that could plausibly influence the results, most animal-derived saturated fats have been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to heart disease and non-alcoholic fatty liver disease." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)" + , argumentCertainty = 9 + , argumentImage = "saturatedfat" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables." + } + , { definiendum = "Q(x)" + , definiens = "there is a dearth of epistemically countervailing data on (x)." + } + , { definiendum = "R(x)" + , definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite." + } + , { definiendum = "x" + , definiens = "a food" + } + , { definiendum = "s" + , definiens = "saturated animal fat" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite." + , notation = "∀x((Px∧Qx)→Rx)" + } + , { premise = "Saturated animal fat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables." + , notation = "Ps" + } + , { premise = "There is a dearth of epistemically countervailing data on saturated animal fat." + , notation = "Qs" + } + ] + , conclusion = "Therefore, it is more reasonable to believe that saturated animal fat is unhealthy than it is to believe the opposite." + , conclusionNotation = "Rs" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/VeganSocietyReductio.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/VeganSocietyReductio.elm new file mode 100755 index 0000000..86763ed --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Records/VeganSocietyReductio.elm @@ -0,0 +1,58 @@ +module Config.Pages.Debate.Arguments.Records.VeganSocietyReductio exposing (argumentVeganSocietyReductio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Pages.Debate.Arguments.Types exposing (Argument) + + +argumentVeganSocietyReductio : Argument +argumentVeganSocietyReductio = + { argumentTitle = toTitleCase "Vegan Society Definition Reductio" + , propositionTitle = "It is vegan to eat Groot." + , propositionReductio = "Those who hold to the Vegan Society's definition of veganism index the object of moral value to belonging to the animal kingdom." + , propositionSummary = "If one holds to the position that exploiting a being is wrong so long as that being is an animal, then it is straightforwardly entailed that exploiting creatures like Groot would be an action compatible with veganism." + , proofLink = "https://www.umsu.de/trees/#(~6x(Px~4~3Qx)),(~6x~6y(~3Rx~5~3Q(e(y)))),(~3Rg)%7C=(P(e(g)))" + , argumentCertainty = 10 + , argumentImage = "vegansociety" + , argumentHashtags = [] + , isNewTabLink = False + , definitionTable = + [ { definiendum = "P(x)" + , definiens = "it is vegan to do (x)" + } + , { definiendum = "Q(x,y)" + , definiens = "(x) exploits (y)" + } + , { definiendum = "R(x)" + , definiens = "(x) is an animal" + } + , { definiendum = "x" + , definiens = "a being" + } + , { definiendum = "y" + , definiens = "an animal" + } + , { definiendum = "e" + , definiens = "eat" + } + , { definiendum = "g" + , definiens = "Groot" + } + ] + , argumentFormalization = + [ { premises = + [ { premise = "For all things, it is vegan to do something if, and only if, that thing does not exploit animals." + , notation = "∀x(Px↔¬Qx)" + } + , { premise = "If some beings are not animals, then eating those beings does not exploit animals." + , notation = "∀x∀y(¬Rx→¬Q(e(y)))" + } + , { premise = "Groot is not an animal." + , notation = "¬Rg" + } + ] + , conclusion = "Therefore, it is vegan to eat Groot." + , conclusionNotation = "P(e(g))" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Arguments/Types.elm b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Types.elm new file mode 100755 index 0000000..2e7c30d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Arguments/Types.elm @@ -0,0 +1,96 @@ +module Config.Pages.Debate.Arguments.Types exposing + ( Argument + , Notation(..) + , logic + ) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) + + +type alias Argument = + { argumentTitle : String + , propositionTitle : String + , propositionSummary : String + , propositionReductio : String + , proofLink : String + , definitionTable : List Definition + , argumentCertainty : Int + , argumentImage : String + , argumentHashtags : List Hashtags + , isNewTabLink : Bool + , argumentFormalization : List ArgumentEntry + } + + +type alias ArgumentEntry = + { premises : List PremiseWithNotation + , conclusion : String + , conclusionNotation : String + } + + +type alias PremiseWithNotation = + { premise : String + , notation : String + } + + +type alias Definition = + { definiendum : String + , definiens : String + } + + +type Notation + = Implies + | Biconditional + | Negation + | Conjunction + | Disjunction + | Universal + | Existential + | Therefore + | VariableW + | VariableX + | VariableY + | VariableZ + + +logic : Notation -> String +logic operator = + case operator of + Implies -> + "→" + + Biconditional -> + "↔" + + Negation -> + "¬" + + Conjunction -> + "∧" + + Disjunction -> + "∨" + + Universal -> + "∀" + + Existential -> + "∃" + + Therefore -> + "∴" + + VariableW -> + "𝑤" + + VariableX -> + "𝑥" + + VariableY -> + "𝑦" + + VariableZ -> + "𝑧" diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/List.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/List.elm new file mode 100755 index 0000000..3c0a5e3 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/List.elm @@ -0,0 +1,200 @@ +module Config.Pages.Debate.Cuckery.List exposing (cuckList) + +import Config.Pages.Debate.Cuckery.Records.AdamSinger exposing (cuckAdamSinger) +import Config.Pages.Debate.Cuckery.Records.AllenGreen exposing (cuckAllenGreen) +import Config.Pages.Debate.Cuckery.Records.AmberOHearn exposing (cuckAmberOHearn) +import Config.Pages.Debate.Cuckery.Records.AnnChilders exposing (cuckAnnChilders) +import Config.Pages.Debate.Cuckery.Records.AnthonyGustin exposing (cuckAnthonyGustin) +import Config.Pages.Debate.Cuckery.Records.AshwaniGarg exposing (cuckAshwaniGarg) +import Config.Pages.Debate.Cuckery.Records.AustinHerbert exposing (cuckAustinHerbert) +import Config.Pages.Debate.Cuckery.Records.AustinHiggs exposing (cuckAustinHiggs) +import Config.Pages.Debate.Cuckery.Records.BartKay exposing (cuckBartKay) +import Config.Pages.Debate.Cuckery.Records.BenBikman exposing (cuckBenBikman) +import Config.Pages.Debate.Cuckery.Records.BennyMalone exposing (cuckBennyMalone) +import Config.Pages.Debate.Cuckery.Records.BowTiedOx exposing (cuckBowTiedOx) +import Config.Pages.Debate.Cuckery.Records.BradCampbell exposing (cuckBradCampbell) +import Config.Pages.Debate.Cuckery.Records.BradCohn exposing (cuckBradCohn) +import Config.Pages.Debate.Cuckery.Records.BradMarshall exposing (cuckBradMarshall) +import Config.Pages.Debate.Cuckery.Records.BretScher exposing (cuckBretScher) +import Config.Pages.Debate.Cuckery.Records.BretWeinstein exposing (cuckBretWeinstein) +import Config.Pages.Debate.Cuckery.Records.BrianKateman exposing (cuckBrianKateman) +import Config.Pages.Debate.Cuckery.Records.BrianKerley exposing (cuckBrianKerley) +import Config.Pages.Debate.Cuckery.Records.CameronRuggles exposing (cuckCameronRuggles) +import Config.Pages.Debate.Cuckery.Records.CarnivoreAurelius exposing (cuckCarnivoreAurelius) +import Config.Pages.Debate.Cuckery.Records.CaryKelly exposing (cuckCaryKelly) +import Config.Pages.Debate.Cuckery.Records.CateShanahan exposing (cuckCateShanahan) +import Config.Pages.Debate.Cuckery.Records.ChrisBoettcher exposing (cuckChrisBoettcher) +import Config.Pages.Debate.Cuckery.Records.ClaraAboel exposing (cuckClaraAboel) +import Config.Pages.Debate.Cuckery.Records.CliffHarvey exposing (cuckCliffHarvey) +import Config.Pages.Debate.Cuckery.Records.DaltonGraham exposing (cuckDaltonGraham) +import Config.Pages.Debate.Cuckery.Records.DaveCali exposing (cuckDaveCali) +import Config.Pages.Debate.Cuckery.Records.DaveFeldman exposing (cuckDaveFeldman) +import Config.Pages.Debate.Cuckery.Records.DavidBeruh exposing (cuckDavidBeruh) +import Config.Pages.Debate.Cuckery.Records.DavidDiamond exposing (cuckDavidDiamond) +import Config.Pages.Debate.Cuckery.Records.DavidGornoski exposing (cuckDavidGornoski) +import Config.Pages.Debate.Cuckery.Records.DavidZarkov exposing (cuckDavidZarkov) +import Config.Pages.Debate.Cuckery.Records.DevanandPrabhu exposing (cuckDevanandPrabhu) +import Config.Pages.Debate.Cuckery.Records.DianaRodgers exposing (cuckDianaRodgers) +import Config.Pages.Debate.Cuckery.Records.EdSerrano exposing (cuckEdSerrano) +import Config.Pages.Debate.Cuckery.Records.EdwardGoeke exposing (cuckEdwardGoeke) +import Config.Pages.Debate.Cuckery.Records.ElieJarrouge exposing (cuckElieJarrouge) +import Config.Pages.Debate.Cuckery.Records.EricSartori exposing (cuckEricSartori) +import Config.Pages.Debate.Cuckery.Records.GarryLee exposing (cuckGarryLee) +import Config.Pages.Debate.Cuckery.Records.GaryBrecka exposing (cuckGaryBrecka) +import Config.Pages.Debate.Cuckery.Records.GaryFettke exposing (cuckGaryFettke) +import Config.Pages.Debate.Cuckery.Records.GaryTaubes exposing (cuckGaryTaubes) +import Config.Pages.Debate.Cuckery.Records.GeorgeMartin exposing (cuckGeorgeMartin) +import Config.Pages.Debate.Cuckery.Records.GuyAustin exposing (cuckGuyAustin) +import Config.Pages.Debate.Cuckery.Records.IvorCummins exposing (cuckIvorCummins) +import Config.Pages.Debate.Cuckery.Records.JaimieDrew exposing (cuckJaimieDrew) +import Config.Pages.Debate.Cuckery.Records.JakeMey exposing (cuckJakeMey) +import Config.Pages.Debate.Cuckery.Records.JamesDiNicolantonio exposing (cuckJamesDiNicolantonio) +import Config.Pages.Debate.Cuckery.Records.JosephEverett exposing (cuckJosephEverett) +import Config.Pages.Debate.Cuckery.Records.JustinMares exposing (cuckJustinMares) +import Config.Pages.Debate.Cuckery.Records.KaitMalthaner exposing (cuckKaitMalthaner) +import Config.Pages.Debate.Cuckery.Records.KemMinnick exposing (cuckKemMinnick) +import Config.Pages.Debate.Cuckery.Records.KenBerry exposing (cuckKenBerry) +import Config.Pages.Debate.Cuckery.Records.KevinStock exposing (cuckKevinStock) +import Config.Pages.Debate.Cuckery.Records.KyleMamounis exposing (cuckKyleMamounis) +import Config.Pages.Debate.Cuckery.Records.LewisWhitfield exposing (cuckLewisWhitfield) +import Config.Pages.Debate.Cuckery.Records.MacroFour exposing (cuckMacroFour) +import Config.Pages.Debate.Cuckery.Records.MarionHolman exposing (cuckMarionHolman) +import Config.Pages.Debate.Cuckery.Records.MarkBski exposing (cuckMarkBski) +import Config.Pages.Debate.Cuckery.Records.MarkSisson exposing (cuckMarkSisson) +import Config.Pages.Debate.Cuckery.Records.MartyKendall exposing (cuckMartyKendall) +import Config.Pages.Debate.Cuckery.Records.MaxLugavere exposing (cuckMaxLugavere) +import Config.Pages.Debate.Cuckery.Records.MichaelKummer exposing (cuckMichaelKummer) +import Config.Pages.Debate.Cuckery.Records.MichaelManderville exposing (cuckMichaelManderville) +import Config.Pages.Debate.Cuckery.Records.MiguelEspejel exposing (cuckMiguelEspejel) +import Config.Pages.Debate.Cuckery.Records.MikeMutzel exposing (cuckMikeMutzel) +import Config.Pages.Debate.Cuckery.Records.MikeSweeney exposing (cuckMikeSweeney) +import Config.Pages.Debate.Cuckery.Records.NickEggleton exposing (cuckNickEggleton) +import Config.Pages.Debate.Cuckery.Records.NinaTeicholz exposing (cuckNinaTeicholz) +import Config.Pages.Debate.Cuckery.Records.NoCarbsNation exposing (cuckNoCarbsNation) +import Config.Pages.Debate.Cuckery.Records.NorstrongChris exposing (cuckNorstrongChris) +import Config.Pages.Debate.Cuckery.Records.PaulMason exposing (cuckPaulMason) +import Config.Pages.Debate.Cuckery.Records.PaulSaladino exposing (cuckPaulSaladino) +import Config.Pages.Debate.Cuckery.Records.PeterFaber exposing (cuckPeterFaber) +import Config.Pages.Debate.Cuckery.Records.PhilipOvadia exposing (cuckPhilipOvadia) +import Config.Pages.Debate.Cuckery.Records.PhilippeStephenson exposing (cuckPhilippeStephenson) +import Config.Pages.Debate.Cuckery.Records.RalphNapolitano exposing (cuckRalphNapolitano) +import Config.Pages.Debate.Cuckery.Records.RaphaelSirtoli exposing (cuckRaphaelSirtoli) +import Config.Pages.Debate.Cuckery.Records.RealTruther exposing (cuckRealTruther) +import Config.Pages.Debate.Cuckery.Records.RobMeijer exposing (cuckRobMeijer) +import Config.Pages.Debate.Cuckery.Records.RobbWolf exposing (cuckRobbWolf) +import Config.Pages.Debate.Cuckery.Records.SamTsimikas exposing (cuckSamTsimikas) +import Config.Pages.Debate.Cuckery.Records.ScottPsysher exposing (cuckScottPsysher) +import Config.Pages.Debate.Cuckery.Records.SebastianRamirez exposing (cuckSebastianRamirez) +import Config.Pages.Debate.Cuckery.Records.ShawnBaker exposing (cuckShawnBaker) +import Config.Pages.Debate.Cuckery.Records.SimonGoddek exposing (cuckSimonGoddek) +import Config.Pages.Debate.Cuckery.Records.StevenArena exposing (cuckStevenArena) +import Config.Pages.Debate.Cuckery.Records.StevenBelknap exposing (cuckStevenBelknap) +import Config.Pages.Debate.Cuckery.Records.TomDayspring exposing (cuckTomDayspring) +import Config.Pages.Debate.Cuckery.Records.TravisStatham exposing (cuckTravisStatham) +import Config.Pages.Debate.Cuckery.Records.TristanHaggard exposing (cuckTristanHaggard) +import Config.Pages.Debate.Cuckery.Records.TroKalayjian exposing (cuckTroKalayjian) +import Config.Pages.Debate.Cuckery.Records.TuckerGoodrich exposing (cuckTuckerGoodrich) +import Config.Pages.Debate.Cuckery.Records.ZoeHarcombe exposing (cuckZoeHarcombe) +import Config.Pages.Debate.Cuckery.Records.ZsofiaClemens exposing (cuckZsofiaClemens) +import Config.Pages.Debate.Cuckery.Types exposing (..) + + +cuckList : List Cuck +cuckList = + [ cuckAdamSinger + , cuckAllenGreen + , cuckAmberOHearn + , cuckAnnChilders + , cuckAnthonyGustin + , cuckAshwaniGarg + , cuckAustinHerbert + , cuckAustinHiggs + , cuckBartKay + , cuckBenBikman + , cuckBennyMalone + , cuckBowTiedOx + , cuckBradCampbell + , cuckBradCohn + , cuckBradMarshall + , cuckBretScher + , cuckBretWeinstein + , cuckBrianKateman + , cuckBrianKerley + , cuckCameronRuggles + , cuckCarnivoreAurelius + , cuckCaryKelly + , cuckCateShanahan + , cuckChrisBoettcher + , cuckClaraAboel + , cuckCliffHarvey + , cuckDaltonGraham + , cuckDaveCali + , cuckDaveFeldman + , cuckDavidBeruh + , cuckDavidDiamond + , cuckDavidGornoski + , cuckDavidZarkov + , cuckDevanandPrabhu + , cuckDianaRodgers + , cuckEdSerrano + , cuckEdwardGoeke + , cuckElieJarrouge + , cuckEricSartori + , cuckGarryLee + , cuckGaryBrecka + , cuckGaryFettke + , cuckGaryTaubes + , cuckGeorgeMartin + , cuckGuyAustin + , cuckIvorCummins + , cuckJakeMey + , cuckJamesDiNicolantonio + , cuckJaimieDrew + , cuckJosephEverett + , cuckJustinMares + , cuckKaitMalthaner + , cuckKemMinnick + , cuckKenBerry + , cuckKevinStock + , cuckKyleMamounis + , cuckLewisWhitfield + , cuckMacroFour + , cuckMarionHolman + , cuckMarkBski + , cuckMarkSisson + , cuckMartyKendall + , cuckMaxLugavere + , cuckMichaelKummer + , cuckMichaelManderville + , cuckMiguelEspejel + , cuckMikeMutzel + , cuckMikeSweeney + , cuckNickEggleton + , cuckNinaTeicholz + , cuckNoCarbsNation + , cuckNorstrongChris + , cuckPaulMason + , cuckPaulSaladino + , cuckPeterFaber + , cuckPhilipOvadia + , cuckPhilippeStephenson + , cuckRalphNapolitano + , cuckRaphaelSirtoli + , cuckRealTruther + , cuckRobbWolf + , cuckRobMeijer + , cuckSamTsimikas + , cuckScottPsysher + , cuckSebastianRamirez + , cuckShawnBaker + , cuckSimonGoddek + , cuckStevenArena + , cuckStevenBelknap + , cuckTomDayspring + , cuckTravisStatham + , cuckTristanHaggard + , cuckTroKalayjian + , cuckTuckerGoodrich + , cuckZoeHarcombe + , cuckZsofiaClemens + ] diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AdamSinger.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AdamSinger.elm new file mode 100755 index 0000000..d10b163 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AdamSinger.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Cuckery.Records.AdamSinger exposing (cuckAdamSinger) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckAdamSinger : Cuck +cuckAdamSinger = + let + name : String + name = + "Adam Singer" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/AdamSinger" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1566491269194719232?s=20" + , dodgeDescription = VagueGesture + , dodgeProposition = "Seed oils cause inflammation and stomach pain." + , dodgeReceipts = + [ { receipt = "receipt1" } + , { receipt = "receipt2" } + ] + , dodgeFallacy = Just MotteAndBailey + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AllenGreen.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AllenGreen.elm new file mode 100755 index 0000000..c5bd203 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AllenGreen.elm @@ -0,0 +1,40 @@ +module Config.Pages.Debate.Cuckery.Records.AllenGreen exposing (cuckAllenGreen) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckAllenGreen : Cuck +cuckAllenGreen = + let + name : String + name = + "Allen Green" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/AllenGreenMD1" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1982632539216023931" + , dodgeDescription = VagueGesture + , dodgeProposition = "Bears killing baby moose is morally permissible because baby moose are not human." + , dodgeReceipts = + [ { receipt = "receipt1" } + ] + , dodgeFallacy = Just VagueHumanity + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The correct response here is to ask what is true of the baby moose that is untrue of the human child that, if made true of the human child, would lead Allen to let the human child die too. When asked, Allen vaguely gestured, then ran away." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AmberOHearn.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AmberOHearn.elm new file mode 100755 index 0000000..a572b2f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AmberOHearn.elm @@ -0,0 +1,39 @@ +module Config.Pages.Debate.Cuckery.Records.AmberOHearn exposing (cuckAmberOHearn) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , noProposition + ) + + +cuckAmberOHearn : Cuck +cuckAmberOHearn = + let + name : String + name = + "Amber O Hearn" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/KetoCarnivore" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/FusionProgGuy/status/1413888976281169922?s=20" + , dodgeDescription = VagueGesture + , dodgeProposition = noProposition + , dodgeReceipts = + [ { receipt = "receipt1" } + ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnnChilders.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnnChilders.elm new file mode 100755 index 0000000..3c5b234 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnnChilders.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.AnnChilders exposing (cuckAnnChilders) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckAnnChilders : Cuck +cuckAnnChilders = + let + name : String + name = + "Ann Childers" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/AnnChildersMD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1447245484356108292?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Diets humans thrived on in the wild, sans dentists and doctors, are correct." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnthonyGustin.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnthonyGustin.elm new file mode 100755 index 0000000..fa3da51 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AnthonyGustin.elm @@ -0,0 +1,39 @@ +module Config.Pages.Debate.Cuckery.Records.AnthonyGustin exposing (cuckAnthonyGustin) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + , noProposition + ) + + +cuckAnthonyGustin : Cuck +cuckAnthonyGustin = + let + name : String + name = + "Anthony Gustin" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/dranthonygustin" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1482502242632552449?s=20" + , dodgeDescription = GhostedMe + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToTradition + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AshwaniGarg.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AshwaniGarg.elm new file mode 100755 index 0000000..cd14564 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AshwaniGarg.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.AshwaniGarg exposing (cuckAshwaniGarg) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckAshwaniGarg : Cuck +cuckAshwaniGarg = + let + name : String + name = + "Ashwani Garg" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/agargmd" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1443328350982967303?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Representing the protein content of beans by dry weight is misleading." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "It's unclear why we should care about the protein content of a dry food item if that food item is inedible in its dry state" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHerbert.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHerbert.elm new file mode 100755 index 0000000..9350ddb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHerbert.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.AustinHerbert exposing (cuckAustinHerbert) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckAustinHerbert : Cuck +cuckAustinHerbert = + let + name : String + name = + "Austin Herbert" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/_AustinHerbert" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1663698981833277440" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils make you fat and kill your body." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHiggs.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHiggs.elm new file mode 100755 index 0000000..3e04333 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/AustinHiggs.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.AustinHiggs exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , multiplePropositions + ) + + +cuckAustinHiggs : Cuck +cuckAustinHiggs = + let + name : String + name = + "Austin Higgs" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/artofoptimal" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1869452605954707861" + , dodgeDescription = NoReply + , dodgeProposition = "We have been mislead into believing natural animals fats will kill us while highly processed seed oils are heart healthy." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1900265937959330199" + , dodgeDescription = NoReply + , dodgeProposition = "Mainstream medicine lied about the sun causing melanoma skin cancer, sunglasses being good for eye health, saturated fat and cholesterol clogging your arteries, seed oils being heart healthy, meat causing cancer, bad cholesterol existing, fluoride being safe and necessary for teeth, fiber being healthy and necessary, salt raising blood pressure, fruits and vegetables being super healthy, high carb/low fat diets being optimal, grains being healthy, and diabetes being all genetics." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "There are many individual propositions here, but I don't think any of them are true on a charitable interpretation." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BartKay.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BartKay.elm new file mode 100755 index 0000000..1f5b6af --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BartKay.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.BartKay exposing (cuckBartKay) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckBartKay : Cuck +cuckBartKay = + let + name : String + name = + "Bart Kay" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Bart_WT_Kay" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://www.youtube.com/watch?v=M7vTJ02xxrw" + , dodgeDescription = RanAway + , dodgeProposition = "A 100% Carnivore diet is the appropriate and best health choice for all people." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaimDisbelief + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BenBikman.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BenBikman.elm new file mode 100755 index 0000000..bd316df --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BenBikman.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.BenBikman exposing (cuckBenBikman) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckBenBikman : Cuck +cuckBenBikman = + let + name : String + name = + "Ben Bikman" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BenBikmanPhD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1587547250074746880?s=19" + , dodgeDescription = NoReply + , dodgeProposition = "The diet-heart hypothesis is false." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BennyMalone.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BennyMalone.elm new file mode 100755 index 0000000..fd9aa0b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BennyMalone.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.BennyMalone exposing (cuckBennyMalone) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckBennyMalone : Cuck +cuckBennyMalone = + let + name : String + name = + "Benny Malone" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/bennymaloneUK" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1569046576609300489" + , dodgeDescription = RanAway + , dodgeProposition = "Eating oysters is compatible with veganism." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "Bivalves are not likely to be sentient, and extending them the precautionary principle has hilarious entails." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BowTiedOx.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BowTiedOx.elm new file mode 100755 index 0000000..309c2de --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BowTiedOx.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.BowTiedOx exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckBowTiedOx : Cuck +cuckBowTiedOx = + let + name : String + name = + "BowTiedOx" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BowTiedOx" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1509370357722931208" + , dodgeDescription = VagueGesture + , dodgeProposition = "If you eat a ton of omega 3, the damage of omega 6 is lessened." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The aggregate of the data suggests omega-6 and omega-3 are both health-promoting, and it's not clear at all that one lessens any negative effect of the other." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCampbell.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCampbell.elm new file mode 100755 index 0000000..4feb993 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCampbell.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.BradCampbell exposing (cuckBradCampbell) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckBradCampbell : Cuck +cuckBradCampbell = + let + name : String + name = + "Brad Campbell" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DrBradCampbell" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1530933999610171392?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Canola oil kills you slowly." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCohn.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCohn.elm new file mode 100755 index 0000000..06c5280 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradCohn.elm @@ -0,0 +1,54 @@ +module Config.Pages.Debate.Cuckery.Records.BradCohn exposing (cuckBradCohn) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckBradCohn : Cuck +cuckBradCohn = + let + name : String + name = + "Brad Cohn" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BradCohn" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1687535030862831616" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1474139301369634816" + , dodgeDescription = RanAway + , dodgeProposition = "RCTs and cohort studies wouldn't pick up on the effect of the displacing foods of modern commerce." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason "I'm not even sure what the proposition was intending to communicate." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1443654067411030046" + , dodgeDescription = RanAway + , dodgeProposition = "Seed oils are associated with AMD, particularly if people don't have sufficient levels of antioxidants in their diets." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The aggregate of the data suggests seed oils have no statistically significant association with age-related macular degeneration." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradMarshall.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradMarshall.elm new file mode 100755 index 0000000..4714304 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BradMarshall.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.BradMarshall exposing (cuckBradMarshall) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckBradMarshall : Cuck +cuckBradMarshall = + let + name : String + name = + "Brad Marshall" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/fire_bottle" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1687597276074782727" + , dodgeDescription = InTooDeep + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretScher.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretScher.elm new file mode 100755 index 0000000..0849b34 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretScher.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.BretScher exposing (cuckBretScher) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckBretScher : Cuck +cuckBretScher = + let + name : String + name = + "Bret Scher" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BretScher" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1912019150912061892" + , dodgeDescription = NoReply + , dodgeProposition = "Keto caused rapid plaque progression in the KETO-CTA Trial." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "I think the most epistemically parsimonious explanation for the rapid plaque progression that was observed was ketogenic diet-induced hyperlipidemia." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretWeinstein.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretWeinstein.elm new file mode 100755 index 0000000..e4070d8 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BretWeinstein.elm @@ -0,0 +1,53 @@ +module Config.Pages.Debate.Cuckery.Records.BretWeinstein exposing (cuckBretWeinstein) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckBretWeinstein : Cuck +cuckBretWeinstein = + let + name : String + name = + "Bret Weinstein" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BretWeinstein" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1858356347332374597" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are dangerous." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1858745910701777229" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are dangerous." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1858746414882263256" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are dangerous." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKateman.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKateman.elm new file mode 100755 index 0000000..3f0604b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKateman.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.BrianKateman exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckBrianKateman : Cuck +cuckBrianKateman = + let + name : String + name = + "Brian Kateman" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/BrianKateman" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/BrianKateman/status/1645884359344369668" + , dodgeDescription = NoReply + , dodgeProposition = "If someone identifies as vegan, then going for a casual stroll is a cruel choice." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just (SpecificFallacy "Nirvana Fallacy") + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "This just misunderstands vegan values. Vegans don't want to contribute to additional rights violations against sentient beings, such as animals. It's completely unclear how going for a stroll voilates this principle." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKerley.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKerley.elm new file mode 100755 index 0000000..3e2df3b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/BrianKerley.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.BrianKerley exposing (cuckBrianKerley) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckBrianKerley : Cuck +cuckBrianKerley = + let + name : String + name = + "Brian Kerley" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/SeedOilDsrspctr" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1483889771134926849?s=20" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1783200352646619227" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CameronRuggles.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CameronRuggles.elm new file mode 100755 index 0000000..7fc19a7 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CameronRuggles.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.CameronRuggles exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckCameronRuggles : Cuck +cuckCameronRuggles = + let + name : String + name = + "Cameron Ruggles" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/CameronRuggles" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1503799477324300290" + , dodgeDescription = VagueGesture + , dodgeProposition = "Nick's antagonistic pleiotropy argument commits him to affirming that trans-fat is healthy." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Strawman + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "This is a bizarre claim that requires some sort of evidence, and none was provided." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CarnivoreAurelius.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CarnivoreAurelius.elm new file mode 100755 index 0000000..d127487 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CarnivoreAurelius.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.CarnivoreAurelius exposing (cuckCarnivoreAurelius) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckCarnivoreAurelius : Cuck +cuckCarnivoreAurelius = + let + name : String + name = + "Carnivore Aurelius" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/AlpacaAurelius" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1538272143061815299?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Vegans kill 100x more animals." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CaryKelly.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CaryKelly.elm new file mode 100755 index 0000000..05c3a82 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CaryKelly.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.CaryKelly exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckCaryKelly : Cuck +cuckCaryKelly = + let + name : String + name = + "Cary Kelly" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/CaryKelly11" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1468307609623031808" + , dodgeDescription = RanAway + , dodgeProposition = "Cary Kelly refuses to eat something that can fuel a diesel engine." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "Beef tallow can be used to fiel a diesel engine as well, but Cary eats beef tallow. So, the proposition is straightforwardly false." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CateShanahan.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CateShanahan.elm new file mode 100755 index 0000000..d6d5074 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CateShanahan.elm @@ -0,0 +1,111 @@ +module Config.Pages.Debate.Cuckery.Records.CateShanahan exposing (cuckCateShanahan) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + , noProposition + ) + + +cuckCateShanahan : Cuck +cuckCateShanahan = + let + name : String + name = + "Cate Shanahan" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/drcateshanahan" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1266438463634632709?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are pro-inflammatory." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonInflammation + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1479497980570857474?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Those who defend seed oils are just regurgitating the garbage that the AHA pumps out." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "I defend seed oils and I've never even read the AHA's material on the subject." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1487215337116508162?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are toxic." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/drcateshanahan/status/1516904406805057537?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Current levels of seed oil consumption are the main driver of the obesity and chronic disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1537544882532716544?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Nick is just following the AHA marching orders." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just GeneticFallacy + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "I've never even read the AHA's recommendations on anything." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1778616438116483102" + , dodgeDescription = RanAway + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1779185488521310601" + , dodgeDescription = PussiedOut + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1778616438116483102" + , dodgeDescription = KillScreen + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1798766450255253987" + , dodgeDescription = KillScreen + , dodgeProposition = "Current levels of seed oil consumption are the main driver of heart disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCVD + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1869843045677666410" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ChrisBoettcher.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ChrisBoettcher.elm new file mode 100755 index 0000000..21530ee --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ChrisBoettcher.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ChrisBoettcher exposing (cuckChrisBoettcher) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckChrisBoettcher : Cuck +cuckChrisBoettcher = + let + name : String + name = + "Chris Boettcher" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/chrisboettcher9" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/MeggGawat/status/1669691841682210822" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are making you fat, depressed, and sick." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ClaraAboel.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ClaraAboel.elm new file mode 100755 index 0000000..eebea3d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ClaraAboel.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ClaraAboel exposing (cuckClaraAboel) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckClaraAboel : Cuck +cuckClaraAboel = + let + name : String + name = + "Clara Aboel" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/AIWellnessCoach" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1727510906655969736" + , dodgeDescription = NoReply + , dodgeProposition = "Polyunsaturated fatty acids are known to initiate cancer." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCancer + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CliffHarvey.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CliffHarvey.elm new file mode 100755 index 0000000..10ee660 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/CliffHarvey.elm @@ -0,0 +1,45 @@ +module Config.Pages.Debate.Cuckery.Records.CliffHarvey exposing (cuckCliffHarvey) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckCliffHarvey : Cuck +cuckCliffHarvey = + let + name : String + name = + "Cliff Harvey" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/CarbAppropriate" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/CarbAppropriate/status/1372281626206507010?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Saturated fat in the diet does not independently increase the risk of mortality." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1500650543886204929?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Saturated fat in the diet does not independently increase the risk of mortality." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaltonGraham.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaltonGraham.elm new file mode 100755 index 0000000..ca48138 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaltonGraham.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.DaltonGraham exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckDaltonGraham : Cuck +cuckDaltonGraham = + let + name : String + name = + "Dalton Graham" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Outdoctrination" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/Outdoctrination/status/1488564457894813699" + , dodgeDescription = VagueGesture + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveCali.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveCali.elm new file mode 100755 index 0000000..3920a86 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveCali.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.DaveCali exposing (cuckDaveCali) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckDaveCali : Cuck +cuckDaveCali = + let + name : String + name = + "Dave Cali" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/NostraDavus2" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1978671129796464894" + , dodgeDescription = RanAway + , dodgeProposition = "Nick is slippery and evasive." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "It's unclear what he's talking about since I literally answered all of his questions. He ran away rather than actually explaining so I'm guessing he's just fucking retarded." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveFeldman.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveFeldman.elm new file mode 100755 index 0000000..2975176 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DaveFeldman.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.DaveFeldman exposing (cuckDaveFeldman) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckDaveFeldman : Cuck +cuckDaveFeldman = + let + name : String + name = + "Dave Feldman" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/realDaveFeldman" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1306625219440730118?s=20" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1842372113946329138" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils are healthful." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidBeruh.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidBeruh.elm new file mode 100755 index 0000000..b3353a4 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidBeruh.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.DavidBeruh exposing (cuckDavidBeruh) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckDavidBeruh : Cuck +cuckDavidBeruh = + let + name : String + name = + "David Beruh" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DavidB96770" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1970930731645010378" + , dodgeDescription = RanAway + , dodgeProposition = "Gender-affirming surgeries for transgender individuals saves lives through suicide reduction." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "Empirical observation consistency shows lower rates of suicide for transgender populations after gender-affirming interventions." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidDiamond.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidDiamond.elm new file mode 100755 index 0000000..40ad364 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidDiamond.elm @@ -0,0 +1,49 @@ +module Config.Pages.Debate.Cuckery.Records.DavidDiamond exposing (cuckDavidDiamond) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckDavidDiamond : Cuck +cuckDavidDiamond = + let + name : String + name = + "David Diamond" + + statinProp : String + statinProp = + "Statin therapy is not warranted for a person high LDL-C on a low-carb diet." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/LDLSkeptic" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/LDLSkeptic/status/1583471298306375681?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = statinProp + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + , { dodgeLink = "https://x.com/LDLSkeptic/status/1583481964840902656?s=20" + , dodgeDescription = KillScreen + , dodgeProposition = statinProp + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidGornoski.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidGornoski.elm new file mode 100755 index 0000000..28b56e5 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidGornoski.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.DavidGornoski exposing (cuckDavidGornoski) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckDavidGornoski : Cuck +cuckDavidGornoski = + let + name : String + name = + "David Gornoski" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DavidGornoski" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1525474063044550657?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Polyunsaturated fatty acids cause obesity." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonObesity + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidZarkov.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidZarkov.elm new file mode 100755 index 0000000..6e44686 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DavidZarkov.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.DavidZarkov exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckDavidZarkov : Cuck +cuckDavidZarkov = + let + name : String + name = + "David Zarkov" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/wahmahchi" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1503050222104047618" + , dodgeDescription = EmptyHanded + , dodgeProposition = "Nick denies that hunting facilitates wildlife conservation." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Strawman + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "I literally believe the proposition is true, lol. I don't know what the fuck he was rambling about." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DevanandPrabhu.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DevanandPrabhu.elm new file mode 100755 index 0000000..bc1b5dd --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DevanandPrabhu.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.DevanandPrabhu exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckDevanandPrabhu : Cuck +cuckDevanandPrabhu = + let + name : String + name = + "Devanand Prabhu" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/MindMusclePro" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1480580946122452997" + , dodgeDescription = EmptyHanded + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DianaRodgers.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DianaRodgers.elm new file mode 100755 index 0000000..04caa9b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/DianaRodgers.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.DianaRodgers exposing (cuckDianaRodgers) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckDianaRodgers : Cuck +cuckDianaRodgers = + let + name : String + name = + "Diana Rodgers" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/sustainabledish" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1365857401786814465?s=20" + , dodgeDescription = InTooDeep + , dodgeProposition = "Saturated fat doesn't increase the risk of coronary heart disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdSerrano.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdSerrano.elm new file mode 100755 index 0000000..80c9a42 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdSerrano.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.EdSerrano exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckEdSerrano : Cuck +cuckEdSerrano = + let + name : String + name = + "Ed Serrano" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/ed_e_s" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1848829301464142296" + , dodgeDescription = EmptyHanded + , dodgeProposition = "Exercise, a whole food diet, and a gut cleanse can solve the eating and health disorders many people face today." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaimDisbelief + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdwardGoeke.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdwardGoeke.elm new file mode 100755 index 0000000..7c6abc4 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EdwardGoeke.elm @@ -0,0 +1,48 @@ +module Config.Pages.Debate.Cuckery.Records.EdwardGoeke exposing (cuckEdwardGoeke) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckEdwardGoeke : Cuck +cuckEdwardGoeke = + let + name : String + name = + "Edward Goeke" + + propSeedOils = + "Seed oils are inflammatory." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/GoekeEddie" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1773421625150746784?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonInflammation + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1774154640403423359?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonInflammation + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ElieJarrouge.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ElieJarrouge.elm new file mode 100755 index 0000000..73a799e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ElieJarrouge.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.ElieJarrouge exposing (cuckElieJarrouge) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckElieJarrouge : Cuck +cuckElieJarrouge = + let + name : String + name = + "Elie Jarrouge" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/ElieJarrougeMD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1506845469980315648?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Sugar, refined carbs, and seed oils are poison." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EricSartori.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EricSartori.elm new file mode 100755 index 0000000..7be1773 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/EricSartori.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.EricSartori exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckEricSartori : Cuck +cuckEricSartori = + let + name : String + name = + "Eric Sartori" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://www.youtube.com/NurseEric" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/Batleth108/status/1655237358424555520" + , dodgeDescription = PussiedOut + , dodgeProposition = "Vitamin A deficiency isn't real." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The primary symptom of vitamin A deficiency is xerophthalmia. We have a number of interventions dosing vitamin A, oftentimes with a control group, and seeing xerophthalmia resolve. Given the etiology of the disease (insufficient retinoic acid), this is just straightforward." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GarryLee.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GarryLee.elm new file mode 100755 index 0000000..a004dcb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GarryLee.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.GarryLee exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckGarryLee : Cuck +cuckGarryLee = + let + name : String + name = + "Garry Lee" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Gearoidmuar" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1450834923875676161" + , dodgeDescription = RanAway + , dodgeProposition = "With respect to saturated fat, France is a serious outlier in prevalence of actual clinical ischemic heart disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just (SpecificFallacy "Ecological Fallacy") + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "Modern analyses of France that model substitutions demonstrate that saturated fat, even in France, increases the risk of ischemic heart disease." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryBrecka.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryBrecka.elm new file mode 100755 index 0000000..f1e0dc6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryBrecka.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.GaryBrecka exposing (cuckGaryBrecka) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckGaryBrecka : Cuck +cuckGaryBrecka = + let + name : String + name = + "Gary Brecka" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/garybrecka1" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1726664526316372125" + , dodgeDescription = NoReply + , dodgeProposition = "Linoleic acid consumption causes atherosclerosis." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCVD + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryFettke.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryFettke.elm new file mode 100755 index 0000000..14cdc31 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryFettke.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.GaryFettke exposing (cuckGaryFettke) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckGaryFettke : Cuck +cuckGaryFettke = + let + name : String + name = + "Gary Fettke" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/FructoseNo" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1460983496524980224" + , dodgeDescription = GhostedMe + , dodgeProposition = commonProps.propLinoleicAcid + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryTaubes.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryTaubes.elm new file mode 100755 index 0000000..678b651 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GaryTaubes.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.GaryTaubes exposing (cuckGaryTaubes) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckGaryTaubes : Cuck +cuckGaryTaubes = + let + name : String + name = + "Gary Taubes" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/garytaubes" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/garytaubes/status/1595180467552018432?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Carbohydrates cause starvation." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GeorgeMartin.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GeorgeMartin.elm new file mode 100755 index 0000000..f8c45bd --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GeorgeMartin.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.GeorgeMartin exposing (cuckGeorgeMartin) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckGeorgeMartin : Cuck +cuckGeorgeMartin = + let + name : String + name = + "George Martin" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/CarnismDebunked" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1815098730141651021" + , dodgeDescription = RanAway + , dodgeProposition = "Nick has killed more animals in his life than a mature bear." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just (SpecificFallacy "Appeal to Chatbots") + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GuyAustin.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GuyAustin.elm new file mode 100755 index 0000000..e14e5ba --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/GuyAustin.elm @@ -0,0 +1,47 @@ +module Config.Pages.Debate.Cuckery.Records.GuyAustin exposing (cuckGuyAustin) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + , noProposition + ) + + +cuckGuyAustin : Cuck +cuckGuyAustin = + let + name : String + name = + "Guy Austin" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/GuyNAustin" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1538607434176020480" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/GuyNAustin/status/1687530045101744128" + , dodgeDescription = PussiedOut + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/IvorCummins.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/IvorCummins.elm new file mode 100755 index 0000000..0300fa1 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/IvorCummins.elm @@ -0,0 +1,48 @@ +module Config.Pages.Debate.Cuckery.Records.IvorCummins exposing (cuckIvorCummins) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckIvorCummins : Cuck +cuckIvorCummins = + let + name : String + name = + "Ivor Cummins" + + propLDL = + "LDL does not cause coronary heart disease." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/FatEmperor" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1268600451693494273?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propLDL + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + , { dodgeLink = "https://x.com/FatEmperor/status/1636920650156724226?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = propLDL + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JaimieDrew.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JaimieDrew.elm new file mode 100755 index 0000000..00cbf1b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JaimieDrew.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.JaimieDrew exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckJaimieDrew : Cuck +cuckJaimieDrew = + let + name : String + name = + "Jaimie Drew" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/JDrewsyBC" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1411485364079009793" + , dodgeDescription = VagueGesture + , dodgeProposition = "Smoking one cigarette per day increases the risk of coronary heart disease to approximately the same degree as two tbsp of saturated fat." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "When both associations are meta-analyticallly summated, they have almost identical effect sizes." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JakeMey.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JakeMey.elm new file mode 100755 index 0000000..04e7953 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JakeMey.elm @@ -0,0 +1,55 @@ +module Config.Pages.Debate.Cuckery.Records.JakeMey exposing (cuckJakeMey) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckJakeMey : Cuck +cuckJakeMey = + let + name : String + name = + "Jake Mey" + + propReason = + "Vegan Fridays would only change childrens' diets by <1% annually, and, if anything, this is more likely a positive change than a negative one." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/CakeNutrition" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1490009495581298690?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Vegan Friday meals are unhealthy for children." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason propReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1490060813138280450?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Vegan Friday meals are unhealthy for children." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason propReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1495419256737091585?s=20" + , dodgeDescription = KillScreen + , dodgeProposition = "Vegan Friday meals are unhealthy for children." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason propReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JamesDiNicolantonio.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JamesDiNicolantonio.elm new file mode 100755 index 0000000..ae843a0 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JamesDiNicolantonio.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.JamesDiNicolantonio exposing (cuckJamesDiNicolantonio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckJamesDiNicolantonio : Cuck +cuckJamesDiNicolantonio = + let + name : String + name = + "James DiNicolantonio" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/drjamesdinic" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1460788569388171268?s=20" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propLinoleicAcid + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JosephEverett.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JosephEverett.elm new file mode 100755 index 0000000..280bc66 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JosephEverett.elm @@ -0,0 +1,49 @@ +module Config.Pages.Debate.Cuckery.Records.JosephEverett exposing (cuckJosephEverett) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckJosephEverett : Cuck +cuckJosephEverett = + let + name : String + name = + "Joseph Everett" + + propSeedOils : String + propSeedOils = + "Seed oils cause coronary heart disease and cancer." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/JEverettLearned" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1535334822825971712?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1555138038740680704?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JustinMares.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JustinMares.elm new file mode 100755 index 0000000..a109c72 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/JustinMares.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.JustinMares exposing (cuckJustinMares) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckJustinMares : Cuck +cuckJustinMares = + let + name : String + name = + "Justin Mares" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/jwmares" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1329266554089869312?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Vegetable oils drive inflammation and are causally linked to weight gain and diseases of inflammation." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KaitMalthaner.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KaitMalthaner.elm new file mode 100755 index 0000000..0c321be --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KaitMalthaner.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.KaitMalthaner exposing (cuckKaitMalthaner) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckKaitMalthaner : Cuck +cuckKaitMalthaner = + let + name : String + name = + "Kait Malthaner" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/healthcoachkait" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1503258756687306753?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Omega-6 is pro-inflammatory." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonInflammation + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KemMinnick.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KemMinnick.elm new file mode 100755 index 0000000..d9d3fe1 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KemMinnick.elm @@ -0,0 +1,54 @@ +module Config.Pages.Debate.Cuckery.Records.KemMinnick exposing (cuckKemMinnick) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckKemMinnick : Cuck +cuckKemMinnick = + let + name : String + name = + "Kem Minnick" + + prop : String + prop = + commonProps.propSeedOils + + reason : String + reason = + commonPropReasons.propSeedOilsReason + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/kemminnick" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/kemminnick/status/1469336100300726273?s=20" + , dodgeDescription = GhostedMe + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason reason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1476990862793986052?s=20" + , dodgeDescription = RanAway + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason reason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KenBerry.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KenBerry.elm new file mode 100755 index 0000000..af7f92b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KenBerry.elm @@ -0,0 +1,74 @@ +module Config.Pages.Debate.Cuckery.Records.KenBerry exposing (cuckKenBerry) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckKenBerry : Cuck +cuckKenBerry = + let + name : String + name = + "Ken Berry" + + propAnimalFat : String + propAnimalFat = + "Replacing animal fats with vegetable oils is dangerous." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/KenDBerryMD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1366524889067368449?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Type 2 Diabetes is chronic carbohydrate overdose." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1539720236701589504?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propAnimalFat + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1539721408372039680?s=20" + , dodgeDescription = NoReply + , dodgeProposition = propAnimalFat + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1813969807521300615" + , dodgeDescription = InTooDeep + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1971624652104778115" + , dodgeDescription = NoReply + , dodgeProposition = "The vegan diet is a silly meme." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The justification is a smattering of appeals to nature and nutrient density tropes— both of which are retarded." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KevinStock.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KevinStock.elm new file mode 100755 index 0000000..61d9c06 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KevinStock.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.KevinStock exposing (cuckKevinStock) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckKevinStock : Cuck +cuckKevinStock = + let + name : String + name = + "Kevin Stock" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/kevinstock12" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1530140722225102848?s=20" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1534927799911317509?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Saturated fat does not cause cardiovascular disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KyleMamounis.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KyleMamounis.elm new file mode 100755 index 0000000..15e4d67 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/KyleMamounis.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.KyleMamounis exposing (cuckKyleMamounis) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckKyleMamounis : Cuck +cuckKyleMamounis = + let + name : String + name = + "Kyle Mamounis" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Nutricrinology" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1389259133044477953?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Statins do not prevent cardiovascular events." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/LewisWhitfield.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/LewisWhitfield.elm new file mode 100755 index 0000000..8d583a1 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/LewisWhitfield.elm @@ -0,0 +1,45 @@ +module Config.Pages.Debate.Cuckery.Records.LewisWhitfield exposing (cuckLewisWhitfield) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckLewisWhitfield : Cuck +cuckLewisWhitfield = + let + name : String + name = + "Lewis Whitfield" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/whitfieldlewis6" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1976817995457741134" + , dodgeDescription = VagueGesture + , dodgeProposition = "Nick wants to destroy the natural world and destroy all carnivores." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Strawman + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The claims are only conditionally true under extreme hypothetical circumstances and do not represent what I advocate in practice, which is the non-violent displacement of violent ecosystems while providing vegan sanctuary to the affected animals. In actuality, I'd prefer a world with more nature and more animals (including carnivores), provided it was in a vegan context." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1977149660385952086" + , dodgeDescription = KillScreen + , dodgeProposition = "None of veganism makes sense." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "I'm not aware of a contracition on vegan ethics." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MacroFour.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MacroFour.elm new file mode 100755 index 0000000..807a90e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MacroFour.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.MacroFour exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckMacroFour : Cuck +cuckMacroFour = + let + name : String + name = + "Macro Four" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1277611651345203200" + , dodgeDescription = VagueGesture + , dodgeProposition = "People get the solution to diseases wrong when they forget biochemistry and look at observed associations." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "Speculation about punative mechanisms translates to real-world outcomes in <7% of cases according to best estimates, whereas epidemiological associations translate with far greater frequency." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarionHolman.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarionHolman.elm new file mode 100755 index 0000000..18ac6e0 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarionHolman.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.MarionHolman exposing (cuckMarionHolman) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMarionHolman : Cuck +cuckMarionHolman = + let + name : String + name = + "Marion Holman" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Marion436842126" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1911279351875633369" + , dodgeDescription = NoReply + , dodgeProposition = "Statins increase coronary artery calcium scores." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason "Even if the proposition were true it's not clear that accelerating the development of preexisting calcification is a bad thing, as it lowers the risk of plaque rupture." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkBski.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkBski.elm new file mode 100755 index 0000000..4c7998a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkBski.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.MarkBski exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMarkBski : Cuck +cuckMarkBski = + let + name : String + name = + "Mark Bski" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/MarkBski" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1538922143915835395" + , dodgeDescription = NoReply + , dodgeProposition = "There is no proof a vegan diet is ethical." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propTooVague + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkSisson.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkSisson.elm new file mode 100755 index 0000000..ceb02dd --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MarkSisson.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.MarkSisson exposing (cuckMarkSisson) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , noProposition + ) + + +cuckMarkSisson : Cuck +cuckMarkSisson = + let + name : String + name = + "Mark Sisson" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Mark_Sisson" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1488360227141419009?s=20" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MartyKendall.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MartyKendall.elm new file mode 100755 index 0000000..81638b9 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MartyKendall.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.MartyKendall exposing (cuckMartyKendall) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckMartyKendall : Cuck +cuckMartyKendall = + let + name : String + name = + "Marty Kendall" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/martykendall2" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://twitter.com/The_Nutrivore/status/1310548994804809729" + , dodgeDescription = RanAway + , dodgeProposition = "To access your body fat, you need to deplete both glucose and fat from the blood first." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The proposition suggests that before one can liberate their body fat, they must first experience a lethal physiological event." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MaxLugavere.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MaxLugavere.elm new file mode 100755 index 0000000..70639c6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MaxLugavere.elm @@ -0,0 +1,57 @@ +module Config.Pages.Debate.Cuckery.Records.MaxLugavere exposing (cuckMaxLugavere) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMaxLugavere : Cuck +cuckMaxLugavere = + let + name : String + name = + "Max Lugavere" + + prop : String + prop = + "seed oils consumption is associated with an increased risk of CVD and Alzheimer's disease." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/maxlugavere" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/maxlugavere/status/1517683567249149953?s=20" + , dodgeDescription = RanAway + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1518307089742848000?s=20" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + , { dodgeLink = "https://x.com/maxlugavere/status/1518367365683064833?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonChronicDisease + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelKummer.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelKummer.elm new file mode 100755 index 0000000..0d5bf53 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelKummer.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.MichaelKummer exposing (cuckMichaelKummer) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMichaelKummer : Cuck +cuckMichaelKummer = + let + name : String + name = + "Michael Kummer" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/mkummer82" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/mkummer82/status/1465755847917715464?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Polyunsaturated fats cause cell damage, inflammation and metabolic dysfunction." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonInflammation + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelManderville.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelManderville.elm new file mode 100755 index 0000000..e6bcc12 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MichaelManderville.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.MichaelManderville exposing (cuckMichaelManderville) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMichaelManderville : Cuck +cuckMichaelManderville = + let + name : String + name = + "Michael Manderville" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/MikeManderville" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1503036463306489856?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "A logically coherent position will have logically coherent answer to a logically coherent hypothetical." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propAnalyticalTruth + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MiguelEspejel.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MiguelEspejel.elm new file mode 100755 index 0000000..d6aece7 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MiguelEspejel.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.MiguelEspejel exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckMiguelEspejel : Cuck +cuckMiguelEspejel = + let + name : String + name = + "Miguel Espejel" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Mespejel29" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1382787616857231361?s=20" + , dodgeDescription = VagueGesture + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeMutzel.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeMutzel.elm new file mode 100755 index 0000000..1229c1e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeMutzel.elm @@ -0,0 +1,45 @@ +module Config.Pages.Debate.Cuckery.Records.MikeMutzel exposing (cuckMikeMutzel) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMikeMutzel : Cuck +cuckMikeMutzel = + let + name : String + name = + "Mike Mutzel" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/MikeMutzel" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1414457776982552576?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "COVID is nothing more than a cold to those that are healthy." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1584645853771616256?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "There is little to no association between saturated fat and cardiovascular disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeSweeney.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeSweeney.elm new file mode 100755 index 0000000..71b14f0 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/MikeSweeney.elm @@ -0,0 +1,53 @@ +module Config.Pages.Debate.Cuckery.Records.MikeSweeney exposing (cuckMikeSweeney) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckMikeSweeney : Cuck +cuckMikeSweeney = + let + name : String + name = + "Mike Sweeney" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/thelowcarb_rd" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1746962254052962552" + , dodgeDescription = PussiedOut + , dodgeProposition = "Vegan diets are nowhere near appropriate for the average person in society." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/thelowcarb_rd/status/1654182805964836865" + , dodgeDescription = GhostedMe + , dodgeProposition = "Statistical gymnastics don't inform on real world mechanisms and hard outcomes." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1776652108646821913?t=Pf4sfAC1Z0pAcxGfQFr7oQ" + , dodgeDescription = NoReply + , dodgeProposition = "Cheerios cause nausea, vomiting, seizures, irregular heartbeat, liver damage, and coma." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaimDisbelief + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NickEggleton.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NickEggleton.elm new file mode 100755 index 0000000..c36b93d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NickEggleton.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.NickEggleton exposing (cuckNickEggleton) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckNickEggleton : Cuck +cuckNickEggleton = + let + name : String + name = + "Nick Eggleton" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/NickEggleton" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1266626885703720961?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Polyunsaturated fats are poison." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NinaTeicholz.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NinaTeicholz.elm new file mode 100755 index 0000000..13bbda0 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NinaTeicholz.elm @@ -0,0 +1,61 @@ +module Config.Pages.Debate.Cuckery.Records.NinaTeicholz exposing (cuckNinaTeicholz) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckNinaTeicholz : Cuck +cuckNinaTeicholz = + let + name : String + name = + "Nina Teicholz" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/bigfatsurprise" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1556510529014882305?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "The science linking red meat to heart disease is very weak." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The aggregate of the data suggests red meat increases the risk of heart disease." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1467571763865210881?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "The available evidence supports limiting saturated fat intake for coronary heart disease risk reduction." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1538895943050878977?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Vegans pretend biology isn't real." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1903508058719797414" + , dodgeDescription = NoReply + , dodgeProposition = "Nutritional epidemiology tends to provide good causal estimates." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealFromIncredulity + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propNutritionalEpidemiology + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NoCarbsNation.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NoCarbsNation.elm new file mode 100755 index 0000000..4ae7939 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NoCarbsNation.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.NoCarbsNation exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckNoCarbsNation : Cuck +cuckNoCarbsNation = + let + name : String + name = + "No Carbs Nation" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/NoCarbsNation" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1412056652803543048" + , dodgeDescription = PussiedOut + , dodgeProposition = "Saturated fat is not the cause of heart disease" + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NorstrongChris.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NorstrongChris.elm new file mode 100755 index 0000000..592b7b6 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/NorstrongChris.elm @@ -0,0 +1,52 @@ +module Config.Pages.Debate.Cuckery.Records.NorstrongChris exposing (cuckNorstrongChris) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckNorstrongChris : Cuck +cuckNorstrongChris = + let + name : String + name = + "Norstrong Chris" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/northstrongwill" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/NorstrongHealth/status/1416939281973530626?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Government funded USDA data is untrustworthy." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1534573919562350594?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Nutrition science as a whole is shit." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1534614710196260865?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Nutrition science as a whole is shit." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulMason.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulMason.elm new file mode 100755 index 0000000..5699084 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulMason.elm @@ -0,0 +1,55 @@ +module Config.Pages.Debate.Cuckery.Records.PaulMason exposing (cuckPaulMason) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + , noProposition + ) + + +cuckPaulMason : Cuck +cuckPaulMason = + let + name : String + name = + "Paul Mason" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DrPaulMason" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/Tom_Babington1/status/1361644276866830337?s=20" + , dodgeDescription = NoReply + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/IdanOnTweeter/status/1373233980594618371?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Ancel Keys' Seven Countries Study was flawed." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1461361726943760391?s=20" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propLinoleicAcid + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulSaladino.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulSaladino.elm new file mode 100755 index 0000000..ee2e3a7 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PaulSaladino.elm @@ -0,0 +1,83 @@ +module Config.Pages.Debate.Cuckery.Records.PaulSaladino exposing (cuckPaulSaladino) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + , noProposition + ) + + +cuckPaulSaladino : Cuck +cuckPaulSaladino = + let + name : String + name = + "Paul Saladino" + + prop : String + prop = + "To exclude animal foods from the human diet is a nutritional catastrophe." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/paulsaladinomd" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1275912849999695872?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Subsidies for corn and soy are huge contributors to the chronic disease epidemic in the US." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + } + , { dodgeLink = "https://x.com/FoodFirst_Ty/status/1282847039596843009?s=20" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propSeedOils + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + } + , { dodgeLink = "https://x.com/FoodFirst_Ty/status/1283449495682904064?s=20" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1282851963902636032?s=20" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1469136550046814219?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Nutritional epidemiology generally provides good causal estimates." + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propNutritionalEpidemiology + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1633831762509045766?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Linoleic acid wreaks havoc in your body." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PeterFaber.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PeterFaber.elm new file mode 100755 index 0000000..e00e6c4 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PeterFaber.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.PeterFaber exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckPeterFaber : Cuck +cuckPeterFaber = + let + name : String + name = + "Peter Faber" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/PeterFaberSP" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1482517916201283584" + , dodgeDescription = NoReply + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilipOvadia.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilipOvadia.elm new file mode 100755 index 0000000..33d993d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilipOvadia.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.PhilipOvadia exposing (cuckPhilipOvadia) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckPhilipOvadia : Cuck +cuckPhilipOvadia = + let + name : String + name = + "Philip Ovadia" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/ifixhearts" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1557791520324890624?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Sugar is the problem and meat is the solution." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1558282337024180224?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "LDL doesn't cause coronary heart disease because it is just part of the arterial repair process." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propLDLCausality + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilippeStephenson.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilippeStephenson.elm new file mode 100755 index 0000000..3baaa49 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/PhilippeStephenson.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.PhilippeStephenson exposing (cuckPhilippeStephenson) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckPhilippeStephenson : Cuck +cuckPhilippeStephenson = + let + name : String + name = + "Philippe Stephenson" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/TotalCytopath" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1779587012120715433" + , dodgeDescription = NoReply + , dodgeProposition = "Seed oils save lives." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RalphNapolitano.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RalphNapolitano.elm new file mode 100755 index 0000000..adc6737 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RalphNapolitano.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.RalphNapolitano exposing (cuckRalphNapolitano) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckRalphNapolitano : Cuck +cuckRalphNapolitano = + let + name : String + name = + "Ralph Napolitano" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DrRalphNap" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1462794580848300034?s=20" + , dodgeDescription = NoReply + , dodgeProposition = "Oatmeal is one of the worst foods you can eat and has no health benefits." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The aggregate of the data suggests whole grains are beneficial for humans." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RaphaelSirtoli.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RaphaelSirtoli.elm new file mode 100755 index 0000000..c96e7da --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RaphaelSirtoli.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Cuckery.Records.RaphaelSirtoli exposing (cuckRaphaelSirtoli) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckRaphaelSirtoli : Cuck +cuckRaphaelSirtoli = + let + name : String + name = + "Raphael Sirtoli" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/raphaels7" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/raphaels7/status/1475767357188579329?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "The diet-heart hypothesis is false." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + , { dodgeLink = "https://x.com/raphaels7/status/1783541746015654072" + , dodgeDescription = KillScreen + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RealTruther.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RealTruther.elm new file mode 100755 index 0000000..e880214 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RealTruther.elm @@ -0,0 +1,53 @@ +module Config.Pages.Debate.Cuckery.Records.RealTruther exposing (cuckRealTruther) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckRealTruther : Cuck +cuckRealTruther = + let + name : String + name = + "The Real Truther" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/the_realtruther" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1976788681223758182" + , dodgeDescription = VagueGesture + , dodgeProposition = "Being not vegan isn't immoral." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "It's highly unlikely that this is actually inferrable from Truther's values, and it seems more likely that he's just confused about what he does and does not consider moral." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1978572062366003547" + , dodgeDescription = VagueGesture + , dodgeProposition = "Being not vegan isn't immoral." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "I believe Truther is still confused on this subject, but any attempt to invite him to discuss it has been met with unhinged rambling about tangential topics." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1978573671091376480" + , dodgeDescription = KillScreen + , dodgeProposition = "Being not vegan isn't immoral." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just SelfSealing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "Truther is still deeply confused on this subject, but apparently he has self-sealed his own victory despite no debate ever actually taking place. Perhaps he's actually just delusional." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobMeijer.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobMeijer.elm new file mode 100755 index 0000000..b299a25 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobMeijer.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.RobMeijer exposing (cuckRobMeijer) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , noProposition + ) + + +cuckRobMeijer : Cuck +cuckRobMeijer = + let + name : String + name = + "Rob Meijer" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/EngineerDiet" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1435850829051793408?s=20" + , dodgeDescription = RanAway + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobbWolf.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobbWolf.elm new file mode 100755 index 0000000..b652c4f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/RobbWolf.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.RobbWolf exposing (cuckRobbWolf) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckRobbWolf : Cuck +cuckRobbWolf = + let + name : String + name = + "Robb Wolf" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/robbwolf" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1601624559647875072?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Ancestral foods are more likely to be antagonistically pleiotropic than novel foods." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propAnalyticalTruth + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SamTsimikas.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SamTsimikas.elm new file mode 100755 index 0000000..4ed48f4 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SamTsimikas.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.SamTsimikas exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) +import Config.Pages.Debate.Gibberish.Types exposing (Explanation(..)) + + +cuckSamTsimikas : Cuck +cuckSamTsimikas = + let + name : String + name = + "Sam Tsimikas" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Lpa_Doc" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1481297803179708417" + , dodgeDescription = EmptyHanded + , dodgeProposition = "The 4E6 antibody assay makes poor distinctions between oxLDL and native LDL" + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "If 4E6 truly had low sensitivity, why is there no evidence of extreme multicollinearity in the results of the model used by Wu, et al, 2006? We'd expect to see evidence of equality in the results, but instead we see evidence of independence." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ScottPsysher.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ScottPsysher.elm new file mode 100755 index 0000000..2723e15 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ScottPsysher.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ScottPsysher exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckScottPsysher : Cuck +cuckScottPsysher = + let + name : String + name = + "Scott Psysher" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/LowcarbLiberty" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1521985009762004992" + , dodgeDescription = NoReply + , dodgeProposition = "Nick is a nutritional authoritarian with seed oil and plant-based ideology." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propTooVague + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SebastianRamirez.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SebastianRamirez.elm new file mode 100755 index 0000000..725e7ee --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SebastianRamirez.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.SebastianRamirez exposing (cuckSebastianRamirez) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckSebastianRamirez : Cuck +cuckSebastianRamirez = + let + name : String + name = + "Sebastian Ramirez" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/JS_RamirezMD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/JS_RamirezMD/status/1859378109306278377" + , dodgeDescription = RanAway + , dodgeProposition = "Vegans haven’t learnt how to live in a society." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = SpecificPropReason "It's not clear what the proposition means." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ShawnBaker.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ShawnBaker.elm new file mode 100755 index 0000000..88bf80f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ShawnBaker.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ShawnBaker exposing (cuckShawnBaker) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , noProposition + ) + + +cuckShawnBaker : Cuck +cuckShawnBaker = + let + name : String + name = + "Shawn Baker" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/SBakerMD" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1868037979807346738" + , dodgeDescription = GhostedMe + , dodgeProposition = noProposition + , dodgeReceipts = [] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SimonGoddek.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SimonGoddek.elm new file mode 100755 index 0000000..82b2544 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/SimonGoddek.elm @@ -0,0 +1,57 @@ +module Config.Pages.Debate.Cuckery.Records.SimonGoddek exposing (cuckSimonGoddek) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckSimonGoddek : Cuck +cuckSimonGoddek = + let + name : String + name = + "Simon Goddek" + + prop : String + prop = + "Vegetable oils increase the risk of heart disease." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/goddeketal" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1795673579931255233" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCVD + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1795885929678196951" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCVD + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1795674575315112396" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just MechanisticMasturbation + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonCVD + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenArena.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenArena.elm new file mode 100755 index 0000000..b4f108b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenArena.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Cuckery.Records.StevenArena exposing (..) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , commonProps + ) + + +cuckStevenArena : Cuck +cuckStevenArena = + let + name : String + name = + "Steven Arena" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/reallytanman" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1513517390050611200" + , dodgeDescription = VagueGesture + , dodgeProposition = commonProps.propSeedOils + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenBelknap.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenBelknap.elm new file mode 100755 index 0000000..2820ca9 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/StevenBelknap.elm @@ -0,0 +1,45 @@ +module Config.Pages.Debate.Cuckery.Records.StevenBelknap exposing (cuckStevenBelknap) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckStevenBelknap : Cuck +cuckStevenBelknap = + let + name : String + name = + "Steven Belknap" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/StevenMBelknap" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1956250236000604266" + , dodgeDescription = RanAway + , dodgeProposition = "The documentary, Animal, provides an historical account of Ancel Keys' career that is inaccurate." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "The White Paper, written by the True Health Initiative, provides a compendium of refutations of the exact talking points used in the documentary, Animal." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1973088775560425790" + , dodgeDescription = EmptyHanded + , dodgeProposition = "Weight gain when transitioning from a plant-based diet to an animal-based diet is expected, given current empirical data." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "The only rigorous test of the hypothesis in the literature showed that the animal-based diet group consumed ~700 kcal per day more than the plant-based diet group and had a more difficult time losing fat mass." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/Template.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/Template.elm new file mode 100755 index 0000000..2d80839 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/Template.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.Template exposing (cuck) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuck : Cuck +cuck = + let + name : String + name = + "" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "" + , dodgeDescription = NoReply + , dodgeProposition = "" + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just (SpecificFallacy "") + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TomDayspring.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TomDayspring.elm new file mode 100755 index 0000000..e9635a2 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TomDayspring.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.TomDayspring exposing (cuckTomDayspring) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckTomDayspring : Cuck +cuckTomDayspring = + let + name : String + name = + "Thomas Dayspring" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Drlipid" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1865200631209955669" + , dodgeDescription = EmptyHanded + , dodgeProposition = "Reducing cholesterol in diet has no cardiovascular effect outside of those who have significant hyperabsorption of cholesterol." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propEmpiricalClaim + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TravisStatham.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TravisStatham.elm new file mode 100755 index 0000000..2d00d0e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TravisStatham.elm @@ -0,0 +1,49 @@ +module Config.Pages.Debate.Cuckery.Records.TravisStatham exposing (cuckTravisStatham) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckTravisStatham : Cuck +cuckTravisStatham = + let + name : String + name = + "Travis Statham" + + prop : String + prop = + "Seed oils do not cause obesity." + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Travis_Statham" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1461428023207489542?s=20" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonObesity + } + , { dodgeLink = "https://www.reddit.com/r/StopEatingSeedOils/comments/v457tu/how_vegetable_oils_make_us_fat_zero_acre/ic9u7wu/?utm_source=share" + , dodgeDescription = NoReply + , dodgeProposition = prop + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSeedOilsReasonObesity + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TristanHaggard.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TristanHaggard.elm new file mode 100755 index 0000000..3c57631 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TristanHaggard.elm @@ -0,0 +1,36 @@ +module Config.Pages.Debate.Cuckery.Records.TristanHaggard exposing (cuckTristanHaggard) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckTristanHaggard : Cuck +cuckTristanHaggard = + let + name : String + name = + "Tristan Haggard" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/Trxstxn4" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1513596227052527621?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Seed oils are toxic." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just Vaguemongering + , dodgeNicksDoxasticState = Just Agnostic + , dodgeNicksDoxasticReason = VagueProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TroKalayjian.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TroKalayjian.elm new file mode 100755 index 0000000..761e17d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TroKalayjian.elm @@ -0,0 +1,44 @@ +module Config.Pages.Debate.Cuckery.Records.TroKalayjian exposing (cuckTroKalayjian) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) + + +cuckTroKalayjian : Cuck +cuckTroKalayjian = + let + name : String + name = + "Tro Kalayjian" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/DoctorTro" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1261351818430255104?s=20" + , dodgeDescription = RanAway + , dodgeProposition = "Dr. Tro engages in shitty behaviour that causes people to dislike him." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason "The proposition seems trivially true." + } + , { dodgeLink = "https://x.com/upRootNutrition/status/1865857839845232689" + , dodgeDescription = RanAway + , dodgeProposition = "Meat doesn’t cause cardiovascular disease" + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason "The aggregate of the data suggests that higher intakes of meat, particularly red meat, increases the risk of cardiovascular disease, especially when replacing plant-based protein sources." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TuckerGoodrich.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TuckerGoodrich.elm new file mode 100755 index 0000000..0a5a7fd --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/TuckerGoodrich.elm @@ -0,0 +1,62 @@ +module Config.Pages.Debate.Cuckery.Records.TuckerGoodrich exposing (cuckTuckerGoodrich) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + , noProposition + ) + + +cuckTuckerGoodrich : Cuck +cuckTuckerGoodrich = + let + name : String + name = + "Tucker Goodrich" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/TuckerGoodrich" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1276694117494358017?s=19" + , dodgeDescription = RanAway + , dodgeProposition = "Nutritional epidemiology is almost always wrong." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just RedHerring + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propNutritionalEpidemiology + } + , { dodgeLink = "https://x.com/TuckerGoodrich/status/1428062578668830720?s=20" + , dodgeDescription = RanAway + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/TuckerGoodrich/status/1469366622196359170?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + , { dodgeLink = "https://x.com/TuckerGoodrich/status/1470029816975872007?s=20" + , dodgeDescription = KillScreen + , dodgeProposition = noProposition + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Nothing + , dodgeNicksDoxasticReason = NoProp + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZoeHarcombe.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZoeHarcombe.elm new file mode 100755 index 0000000..31d8d21 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZoeHarcombe.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ZoeHarcombe exposing (cuckZoeHarcombe) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckZoeHarcombe : Cuck +cuckZoeHarcombe = + let + name : String + name = + "Zoe Harcombe" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/zoeharcombe" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1418263706178310149" + , dodgeDescription = NoReply + , dodgeProposition = "Saturated fat doesn't increase the risk of coronary heart disease." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Nothing + , dodgeNicksDoxasticState = Just Disbelief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propSaturatedFatReason + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZsofiaClemens.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZsofiaClemens.elm new file mode 100755 index 0000000..37539bb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Records/ZsofiaClemens.elm @@ -0,0 +1,37 @@ +module Config.Pages.Debate.Cuckery.Records.ZsofiaClemens exposing (cuckZsofiaClemens) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , commonPropReasons + ) + + +cuckZsofiaClemens : Cuck +cuckZsofiaClemens = + let + name : String + name = + "Zsófia Clemens" + in + { cuckImage = formatName name + , cuckName = name + , cuckSocial = "https://x.com/ClemensZsofia" + , isNewTabLink = True + , cuckDodges = + [ { dodgeLink = "https://x.com/upRootNutrition/status/1528377198180290561?s=20" + , dodgeDescription = PussiedOut + , dodgeProposition = "Well-planned, plant-based diets are healthy." + , dodgeReceipts = [ { receipt = "receipt1" } ] + , dodgeFallacy = Just AppealToNature + , dodgeNicksDoxasticState = Just Belief + , dodgeNicksDoxasticReason = SpecificPropReason commonPropReasons.propPlantBasedDiets + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Types.elm b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Types.elm new file mode 100755 index 0000000..febf022 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Cuckery/Types.elm @@ -0,0 +1,143 @@ +module Config.Pages.Debate.Cuckery.Types exposing + ( CommonProps + , Cuck + , Dodge + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + , PropReasons + , Receipts + , commonPropReasons + , commonProps + , multiplePropositions + , noProposition + ) + +import Config.Data.Hashtags.Types exposing (..) + + +type alias Cuck = + { cuckImage : String + , cuckName : String + , cuckSocial : String + , isNewTabLink : Bool + , cuckDodges : List Dodge + } + + +type alias Dodge = + { dodgeLink : String + , dodgeDescription : DodgeDescription + , dodgeProposition : String + , dodgeReceipts : List Receipts + , dodgeFallacy : Maybe DodgeFallacies + , dodgeNicksDoxasticState : Maybe DoxasticState + , dodgeNicksDoxasticReason : Evaluation + } + + +type alias Receipts = + { receipt : String + } + + +type DodgeDescription + = NoReply + | RanAway + | GhostedMe + | PussiedOut + | InTooDeep + | KillScreen + | VagueGesture + | EmptyHanded + + +type DodgeFallacies + = AppealToNature + | AppealFromIncredulity + | AppealToIgnorance + | AppealToTradition + | BeggingTheQuestion + | Equivocation + | GeneticFallacy + | MechanisticMasturbation + | MotteAndBailey + | RedHerring + | SelfSealing + | Strawman + | VagueHumanity + | Vaguemongering + | SpecificFallacy String + + +type DoxasticState + = Belief + | Disbelief + | Agnostic + + +type Evaluation + = NoProp + | VagueProp + | SpecificPropReason String + + +type alias CommonProps = + { propSeedOils : String + , propLinoleicAcid : String + } + + +type alias PropReasons = + { propSaturatedFatReason : String + , propSeedOilsReason : String + , propSeedOilsReasonCVD : String + , propSeedOilsReasonCancer : String + , propSeedOilsReasonInflammation : String + , propSeedOilsReasonObesity : String + , propSeedOilsReasonChronicDisease : String + , propLDLCausality : String + , propEmpiricalClaim : String + , propEmpiricalClaimDisbelief : String + , propAnalyticalTruth : String + , propNutritionalEpidemiology : String + , propPlantBasedDiets : String + , propTooVague : String + } + + +noProposition : String +noProposition = + "N/A" + + +multiplePropositions : String +multiplePropositions = + "Multiple propositions." + + +commonProps : CommonProps +commonProps = + { propSeedOils = "Seed oils are not a significant, independent risk factor for public health." + , propLinoleicAcid = "Dietary linoleic acid is not a significant, independent concern for the development of chronic diseases." + } + + +commonPropReasons : PropReasons +commonPropReasons = + { propSaturatedFatReason = "The aggregate of the data overwhelmingly supports the hypothesis that heart disease risk can be influenced by changes in blood lipids as a function of saturated fat intake." + , propSeedOilsReason = "The aggregate of the data suggests seed oils are beneficial for humans." + , propSeedOilsReasonCVD = "The aggregate of the data suggests seed oils decrease the risk of heart disease." + , propSeedOilsReasonCancer = "The aggregate of the data suggests seed oils decrease the risk of cancer." + , propSeedOilsReasonInflammation = "There's no persuasive evidence that seed oils reliably influence inflammation in either direction." + , propSeedOilsReasonObesity = "There's no persuasive evidence that seed oils reliably influence obesity in either direction." + , propSeedOilsReasonChronicDisease = "The aggregate of the data suggests seed oils decrease the risk of chronic disease." + , propLDLCausality = "The highest tiers of evidence show an overwhelmingly consistent linear and proportional relationship between the concentration of low-density lipoproteins in the blood and coronary heart disease, regardless of population characteristics." + , propEmpiricalClaim = "This is an empirical claim that requires empirical evidence, and none was provided." + , propEmpiricalClaimDisbelief = "No empirical evidence was provided for the claim, but I find it incredibly implausible." + , propAnalyticalTruth = "The proposition is simply a trivial analytical truth." + , propNutritionalEpidemiology = "With exposures matched, nutritional epidemiology agrees with nutritional randomized controlled trials approximately 91% of the time." + , propPlantBasedDiets = "The aggregate of the data suggests that appropriately supplemented plant-based diets decrease the risk of chronic disease compared to likewise meat-inclusive diets." + , propTooVague = "The proposition is too vague to evaluate and no clarification was provided." + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/List.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/List.elm new file mode 100755 index 0000000..7710d1a --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/List.elm @@ -0,0 +1,23 @@ +module Config.Pages.Debate.Gibberish.List exposing (gibberishList) + +import Config.Pages.Debate.Gibberish.Records.Epistemology exposing (epistemologyGibberish) +import Config.Pages.Debate.Gibberish.Records.Metaphysics exposing (metaphysicsGibberish) +import Config.Pages.Debate.Gibberish.Records.Normativity exposing (normativityGibberish) +import Config.Pages.Debate.Gibberish.Records.Ontology exposing (ontologyGibberish) +import Config.Pages.Debate.Gibberish.Records.PhilOfLanguage exposing (philOfLanguageGibberish) +import Config.Pages.Debate.Gibberish.Records.PhilOfMind exposing (philOfMindGibberish) +import Config.Pages.Debate.Gibberish.Records.Theology exposing (theologyGibberish) +import Config.Pages.Debate.Gibberish.Types exposing (..) + + +gibberishList : List Terms +gibberishList = + List.concat + [ epistemologyGibberish.gibberishTerms + , metaphysicsGibberish.gibberishTerms + , normativityGibberish.gibberishTerms + , ontologyGibberish.gibberishTerms + , philOfLanguageGibberish.gibberishTerms + , philOfMindGibberish.gibberishTerms + , theologyGibberish.gibberishTerms + ] diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Epistemology.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Epistemology.elm new file mode 100755 index 0000000..ea65b6d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Epistemology.elm @@ -0,0 +1,62 @@ +module Config.Pages.Debate.Gibberish.Records.Epistemology exposing (epistemologyGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +epistemologyGibberish : Gibberish +epistemologyGibberish = + let + name = + "Epistemology" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Epistemology" + , gibberishDescription = "Epistemology is a branch of philosophy that investigates the nature, origin, and limits of knowledge. It addresses fundamental questions about what knowledge is, how it is acquired, and the criteria for its validity. By exploring concepts such as belief, truth, and justification, epistemology seeks to understand how humans comprehend and interpret reality." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Abductive Arguments" + , strength = 3 + , explanation = SpecificExplanation "In a formal sense, I take an argument to be logical construct whereby the outputs consistently follow from an input, or set of inputs, according to a formal system of internally consistent rules or laws. Traditionally, abductive arguments are taken to fall outside this scope, so on my interpretation, the term \"abductive argument\" is probably gibberish." + } + , { term = "Content Internalism" + , strength = 5 + , explanation = NoClue + } + , { term = "Externalist Epistemology" + , strength = 0 + , explanation = SpecificExplanation "I don't take anything other than logic to be justification-giving. As such, any position that claims that justification can arrive through non-inferential means, such as mechanisms operating outside the mind, just sounds like gibberish." + } + , { term = "Inductive Arguments" + , strength = 3 + , explanation = SpecificExplanation "In a formal sense, I take an argument to be logical construct whereby the outputs consistently follow from an input, or set of inputs, according to a formal system of internally consistent rules or laws. Traditionally, inductive arguments are taken to fall outside this scope, so on my interpretation, the term \"inductive argument\" is probably gibberish." + } + , { term = "Non-entailing Explanations" + , strength = 2 + , explanation = SpecificExplanation "I take an explanation to be a set of premises that lead to a conclusion, so the term just sounds like some sort of contradiction." + } + , { term = "Non-inferential Justification" + , strength = 0 + , explanation = SpecificExplanation "I don't take anything other than logic to be justification-giving. As such, any position that claims that justification can arrive through non-inferential means just sounds like gibberish." + } + , { term = "Phenomenal Conservatism" + , strength = 0 + , explanation = SpecificExplanation "I don't take anything other than logic to be justification-giving. As such, any position that claims that justification can arrive through non-inferential means, such as merely having a seeming, just sounds like gibberish." + } + , { term = "Synthetic A Priori" + , strength = 0 + , explanation = SpecificExplanation "I take a priori arguments to be arguments based on principles or axioms and not based on experience, which would seem to place a priori outside the purview of syntheticity." + } + , { term = "Warrant" + , strength = 0 + , explanation = SpecificExplanation "This seems to be taken to be the thing that is justification-providing on phenomenal conservatism. I'm not sure what that thing is, but if it's non-inferential, then it's just gibberish." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Metaphysics.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Metaphysics.elm new file mode 100755 index 0000000..047098d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Metaphysics.elm @@ -0,0 +1,54 @@ +module Config.Pages.Debate.Gibberish.Records.Metaphysics exposing (metaphysicsGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +metaphysicsGibberish : Gibberish +metaphysicsGibberish = + let + name = + "Metaphysics" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Metaphysics" + , gibberishDescription = "Metaphysics is a branch of philosophy that explores the fundamental nature of reality, including concepts such as existence, being, causality, and the nature of objects and their properties. It seeks to answer profound questions about what exists and the structure of the world beyond empirical observation. Traditionally, metaphysics includes subfields like ontology, which specifically studies the nature of being." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Correspondence Theory of Truth" + , strength = 10 + , explanation = SpecificExplanation "While I do take there to be a world outside my perception, and I do believe that the correspondence between my perceptions and the world outside of my perceptions would be a good way to infer the relative truth value of a proposition, this doesn't seem to be in any way actionable or useful, as humans don't have access to the means of verifying truth under this model. This, to me, makes the correspondence theory of truth to be practically useless." + } + , { term = "Metaphysical Essence" + , strength = 5 + , explanation = NoClue + } + , { term = "Metaphysical Modality" + , strength = 0 + , explanation = SpecificExplanation "Any attempt at unpacking this that I've heard has more or less cashed out into a logical modality, but it seems to be taken as distinct from logical modality. As a non-logical modality, I have no idea what it's supposed to be." + } + , { term = "Non-Physical Mental Entities" + , strength = 5 + , explanation = NoClue + } + , { term = "Ontological Modality" + , strength = 0 + , explanation = SpecificExplanation "Any attempt at unpacking this that I've heard has more or less cashed out into a logical modality, but it seems to be taken as distinct from logical modality. As a non-logical modality, I have no idea what it's supposed to be." + } + , { term = "Subjective Idealism" + , strength = 5 + , explanation = NoClue + } + , { term = "Ultimate Grounding" + , strength = 2 + , explanation = SpecificExplanation "It's completely unclear what this theo-babble is meant to communicate. I assume it has something to do with the absence of antecedent conditions and/or irreducibility that provide some sort of \"best epistemology\" or something, but I can't be sure. It just sounds like gobbledy" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Normativity.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Normativity.elm new file mode 100755 index 0000000..eecc1fc --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Normativity.elm @@ -0,0 +1,38 @@ +module Config.Pages.Debate.Gibberish.Records.Normativity exposing (normativityGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +normativityGibberish : Gibberish +normativityGibberish = + let + name = + "Normativity" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Normativity" + , gibberishDescription = "Normativity refers to the phenomenon in human societies where certain actions or outcomes are designated as good, desirable, or permissible, while others are viewed as bad or undesirable. It encompasses the rules, standards, or norms that guide behaviors and judgments within a community, influencing what individuals ought to think and value. In philosophical contexts, normativity is often linked to moral and ethical considerations, shaping discussions about what is right or wrong." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Externalist Value" + , strength = 0 + , explanation = SpecificExplanation "I take value to be a concept that's indexed to the assessment of at least one agent, so a notion such as \"externalist value\" just sounds like a contradiction." + } + , { term = "Irreducible Normativity" + , strength = 5 + , explanation = SpecificExplanation "I typically don't really understand irreducibility language in philosophy. Most philosophers seem to just use it as a sort of profound-sounding placeholder for when their personal creativity for explanation runs dry. No idea what it's meant to mean here, though." + } + , { term = "Stance-Independent Normativity" + , strength = 0 + , explanation = SpecificExplanation "I take norms to be semantically interchangeable with preferences, and I take preferences to be stance-dependent. As such, the notion of a stance-independent norm just sounds like gobbledy." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Ontology.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Ontology.elm new file mode 100755 index 0000000..9c4c224 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Ontology.elm @@ -0,0 +1,34 @@ +module Config.Pages.Debate.Gibberish.Records.Ontology exposing (ontologyGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +ontologyGibberish : Gibberish +ontologyGibberish = + let + name = + "Ontology" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Ontology" + , gibberishDescription = "Ontology is the philosophical study of being and existence, focusing on the nature and categories of entities. It explores fundamental questions about what it means to exist and the relationships between different kinds of beings. Traditionally considered a branch of metaphysics, ontology also examines the properties and structures that define reality" + , isNewTabLink = True + , gibberishTerms = + [ { term = "Libertarian Free Will" + , strength = 0 + , explanation = SpecificExplanation "If libertarian free will is meant to refer to the ability to make decisions outside the constraints of determinism, then it would seem like this concept of free will purports to break causality by assuming decisions can be made without antecedent conditions. This just sounds like gibberish to me." + } + , { term = "Moral Particles" + , strength = 0 + , explanation = SpecificExplanation "This just sounds like a hallucination, honestly." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfLanguage.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfLanguage.elm new file mode 100755 index 0000000..e18593d --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfLanguage.elm @@ -0,0 +1,34 @@ +module Config.Pages.Debate.Gibberish.Records.PhilOfLanguage exposing (philOfLanguageGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +philOfLanguageGibberish : Gibberish +philOfLanguageGibberish = + let + name = + "Philosophy of Language" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Philosophy_of_language" + , gibberishDescription = "The philosophy of language is a branch of philosophy that investigates the nature, origins, and usage of language, focusing on how language relates to meaning, thought, and reality. It explores fundamental questions about the nature of words and sentences, how they convey complex meanings, and the relationship between language users and the world. Key topics include meaning, reference, intentionality, and the structure of language itself." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Direct Reference" + , strength = 2 + , explanation = SpecificExplanation "I don't understand the term usage as it's been used and unpacked in conversation. I don't understand what it means for a word to \"point to\" an object, and I also don't understand what semantic advantage or distinction this has to a mundane, ostensibly non-direct reference to an object in speech." + } + , { term = "Semantic Primitive" + , strength = 2 + , explanation = SpecificExplanation "I typically don't really understand irreducibility language like \"primitive\" in philosophy. Most philosophers seem to just use it as a sort of profound-sounding placeholder for when their personal creativity for explanation runs dry. No idea what it's meant to mean here, though." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfMind.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfMind.elm new file mode 100755 index 0000000..b1cc000 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/PhilOfMind.elm @@ -0,0 +1,50 @@ +module Config.Pages.Debate.Gibberish.Records.PhilOfMind exposing (philOfMindGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +philOfMindGibberish : Gibberish +philOfMindGibberish = + let + name = + "Philosophy of Mind" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Philosophy_of_mind" + , gibberishDescription = "The philosophy of mind is a branch of philosophy that explores the nature of the mind, consciousness, and mental phenomena, particularly their relationship to the body and the physical world. It addresses fundamental questions about how mental states such as thoughts, feelings, and perceptions relate to brain processes and the external environment. Key topics include consciousness, intentionality, and the mind-body problem, which examines how mental and physical states interact." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Eliminative Materialism" + , strength = 0 + , explanation = SpecificExplanation "If one affirms that they take this view, meaning they believe that it's true, that would entail a contradiction. They'd be affirming that it is and is not the case that beliefs exist. If they say they don't believe it's true, then I'm not sure what the point is." + } + , { term = "Epiphenomenalism" + , strength = 5 + , explanation = NoClue + } + , { term = "Mind-Heart Connection" + , strength = 5 + , explanation = NoClue + } + , { term = "Parallelism" + , strength = 5 + , explanation = NoClue + } + , { term = "Pre-Established Harmony" + , strength = 5 + , explanation = NoClue + } + , { term = "Private Language" + , strength = 5 + , explanation = SpecificExplanation "This seems to be taken to be describing terms that, ostensibly, refer only to internal mind-states and for which there supposedly \"can't\" be some sort of external reference upon which to base mutual understanding between agents. Supposedly, this renders such terms unintelligible to everyone else. Cool story. What in the world is meant by \"can't\", though?" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Theology.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Theology.elm new file mode 100755 index 0000000..56f1840 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Records/Theology.elm @@ -0,0 +1,46 @@ +module Config.Pages.Debate.Gibberish.Records.Theology exposing (theologyGibberish) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) + + +theologyGibberish : Gibberish +theologyGibberish = + let + name = + "Theology" + in + { gibberishTitle = name + , gibberishImage = formatName name + , gibberishLink = "https://en.wikipedia.org/wiki/Theology" + , gibberishDescription = "Theology is the study of religious beliefs and practices, focusing on the nature of divinity and the relationship between the divine and humanity. It encompasses various disciplines, including systematic theology, biblical theology, and practical theology, each exploring different aspects of faith and spirituality. Essentially, theology seeks to provide a coherent understanding of God and religious experience, guiding adherents in their beliefs and practices." + , isNewTabLink = True + , gibberishTerms = + [ { term = "Divine Simplicity" + , strength = 3 + , explanation = SpecificExplanation "This seems to be an assertion that God is somehow not made up of multiple parts. Allegedly, God is just a single part. This is sometimes used to avoid hilarious reductios applied to the fine-tuning argument for God, by claiming that God does not have a constitution that can be finely tuned. However, I don't see why constitution must entail multiple parts anyway. Additionally, even if we grant it, it's just an empirical claim that hasn't been substantiated." + } + , { term = "Equal Ultimacy" + , strength = 5 + , explanation = NoClue + } + , { term = "Theism" + , strength = 4 + , explanation = SpecificExplanation "I understand some God concepts, but most God concepts just sound like gibberish to me. For instance, most God concepts I've come across seem to suggest that God exists, but God exists outside the confines of what is (like physical reality) and simultaneously inhabits all space inside of what is. I have no idea how to interpret mumbo jumbo like that." + } + , { term = "Transcendental Oneness" + , strength = 0 + , explanation = SpecificExplanation "Just sounds like presuppositionalist theobabble. I don't think it means anything." + } + , { term = "Transcendental Realism" + , strength = 5 + , explanation = NoClue + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Types.elm b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Types.elm new file mode 100755 index 0000000..f575ec7 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Gibberish/Types.elm @@ -0,0 +1,29 @@ +module Config.Pages.Debate.Gibberish.Types exposing + ( Explanation(..) + , Gibberish + , Terms + ) + +import Config.Data.Hashtags.Types exposing (..) + + +type alias Gibberish = + { gibberishTitle : String + , gibberishImage : String + , gibberishLink : String + , isNewTabLink : Bool + , gibberishDescription : String + , gibberishTerms : List Terms + } + + +type alias Terms = + { term : String + , strength : Int + , explanation : Explanation + } + + +type Explanation + = NoClue + | SpecificExplanation String diff --git a/packages/website/frontend/src/Config/Pages/Debate/Types.elm b/packages/website/frontend/src/Config/Pages/Debate/Types.elm new file mode 100755 index 0000000..559725b --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Debate/Types.elm @@ -0,0 +1,11 @@ +module Config.Pages.Debate.Types exposing (Debate) + + +type alias Debate = + { debateTitle : String + , debateLink : String + , debateImage : String + , isNewTabLink : Bool + , debateCount : Int + , debateDescription : String + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/Cardano.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/Cardano.elm new file mode 100755 index 0000000..5510a08 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/Cardano.elm @@ -0,0 +1,53 @@ +module Config.Pages.Donate.Records.Cardano exposing (donateCardano) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateCardano : Donate +donateCardano = + let + name : String + name = + "Cardano" + in + { donateImage = formatName name + , donateLink = "https://handle.me/thenutrivore" + , donateName = name + , donateFees = "0.17 ADA" + , donatePreference = 6 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just False + , openSource = Just True + , fastPayments = Just True + , userFriendly = Just False + , anonymous = Just True + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Blockchain-based peer-to-peer donations." + } + , { pro = "Open source, state-of-the-art cryptocurrency." + } + , { pro = "Extremely fast transactions." + } + , { pro = "Extremely minimal gas fees per transaction." + } + , { pro = "Decentralized cryptocurrency platform." + } + ] + , donateCons = + [ { con = "Less accessible for non-crypto users." + } + , { con = "Requires cryptocurrency knowledge." + } + , { con = "Volatile cryptocurrency market." + } + , { con = "Additional steps needed (wallet, exchange)." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/KoFi.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/KoFi.elm new file mode 100755 index 0000000..a418152 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/KoFi.elm @@ -0,0 +1,45 @@ +module Config.Pages.Donate.Records.KoFi exposing (donateKoFi) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateKoFi : Donate +donateKoFi = + let + name : String + name = + "Ko-Fi" + in + { donateImage = formatName name + , donateLink = "https://ko-fi.com/uprootnutrition" + , donateName = name + , donateFees = "5%" + , donatePreference = 5 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just True + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Supports one-time and monthly donations." + } + , { pro = "Allows digital downloads and commissions." + } + , { pro = "Relatively simple platform." + } + ] + , donateCons = + [ { con = "Less feature-rich compared to other services." + } + , { con = "Smaller user base compared to more established platforms." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/LiberaPay.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/LiberaPay.elm new file mode 100755 index 0000000..5893529 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/LiberaPay.elm @@ -0,0 +1,49 @@ +module Config.Pages.Donate.Records.LiberaPay exposing (donateLiberaPay) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateLiberaPay : Donate +donateLiberaPay = + let + name : String + name = + "LiberaPay" + in + { donateImage = formatName name + , donateLink = "https://liberapay.com/TheNutrivore" + , donateName = name + , donateFees = "0%" + , donatePreference = 10 + , isNewTabLink = True + , donateFeatures = + [ { free = Just True + , subscriptions = Just True + , openSource = Just True + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just True + , rewardTiers = Just True + } + ] + , donatePros = + [ { pro = "Open-source platform." + } + , { pro = "Focuses on privacy and transparency." + } + , { pro = "Allows weekly recurring donations." + } + , { pro = "Creator-friendly with no platform charges." + } + ] + , donateCons = + [ { con = "Less mainstream compared to other platforms." + } + , { con = "Fewer features compared to more established platforms." + } + , { con = "Requires users to be comfortable with a less-known service." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/Merch.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/Merch.elm new file mode 100755 index 0000000..0fd4b27 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/Merch.elm @@ -0,0 +1,45 @@ +module Config.Pages.Donate.Records.Merch exposing (donateMerch) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateMerch : Donate +donateMerch = + let + name : String + name = + "Merchandise" + in + { donateImage = formatName name + , donateLink = "https://streamlabs.com/thenutrivore/merch" + , donateName = name + , donateFees = "~60%" + , donatePreference = 1 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just False + , openSource = Just False + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just False + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Allows supporters to get tangible goods." + } + , { pro = "Potential for creative design opportunities." + } + ] + , donateCons = + [ { con = "They gouge me pretty hard per sale." + } + , { con = "Potentially expensive for supporters." + } + , { con = "Limited design options through current provider." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/Patreon.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/Patreon.elm new file mode 100755 index 0000000..2e03f16 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/Patreon.elm @@ -0,0 +1,49 @@ +module Config.Pages.Donate.Records.Patreon exposing (donatePatreon) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donatePatreon : Donate +donatePatreon = + let + name : String + name = + "Patreon" + in + { donateImage = formatName name + , donateLink = "https://www.patreon.com/c/upRootNutrition" + , donateName = name + , donateFees = "8%" + , donatePreference = 6 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just False + , rewardTiers = Just True + } + ] + , donatePros = + [ { pro = "Established platform for creator support." + } + , { pro = "Tools for managing patron relationships." + } + , { pro = "Enables exclusive content and perks." + } + , { pro = "Wide recognition among content creators and supporters." + } + ] + , donateCons = + [ { con = "Can be complex to set up and manage." + } + , { con = "Potential for high competition among creators." + } + , { con = "Platform takes a notable cut of creator earnings." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/PayPal.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/PayPal.elm new file mode 100755 index 0000000..8306628 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/PayPal.elm @@ -0,0 +1,49 @@ +module Config.Pages.Donate.Records.PayPal exposing (donatePayPal) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donatePayPal : Donate +donatePayPal = + let + name : String + name = + "PayPal" + in + { donateImage = formatName name + , donateLink = "https://paypal.me/TheNutrivore" + , donateName = name + , donateFees = "1%" + , donatePreference = 8 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just True + , userFriendly = Just True + , anonymous = Just False + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Widely used and recognized globally" + } + , { pro = "Low 1% transaction fee" + } + , { pro = "Offers buyer and seller protections" + } + , { pro = "Easy to use for one-time and recurring donations" + } + , { pro = "Familiar to most internet users" + } + ] + , donateCons = + [ { con = "Can have complicated international transaction rules." + } + , { con = "Potential account limitations or freezes." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/Stripe.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/Stripe.elm new file mode 100755 index 0000000..51416e9 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/Stripe.elm @@ -0,0 +1,49 @@ +module Config.Pages.Donate.Records.Stripe exposing (donateStripe) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateStripe : Donate +donateStripe = + let + name : String + name = + "Stripe" + in + { donateImage = formatName name + , donateLink = "https://donate.stripe.com/aEUaFT3Vd9ta1oI144" + , donateName = name + , donateFees = "3%" + , donatePreference = 8 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just True + , userFriendly = Just True + , anonymous = Just True + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Widely used and recognized globally." + } + , { pro = "Lower 3% transaction fee." + } + , { pro = "Offers buyer and seller protections." + } + , { pro = "Easy to use for one-time donations." + } + , { pro = "Familiar to most internet users." + } + ] + , donateCons = + [ { con = "Can have complicated international transaction rules." + } + , { con = "Potential account limitations or freezes." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/Template.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/Template.elm new file mode 100755 index 0000000..659e72e --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/Template.elm @@ -0,0 +1,38 @@ +module Config.Pages.Donate.Records.Template exposing (donateTemplate) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateTemplate : Donate +donateTemplate = + let + name : String + name = + "" + in + { donateImage = formatName name + , donateLink = "" + , donateName = name + , donateFees = "" + , donatePreference = 1 + , isNewTabLink = True + , donateFeatures = + [ { free = Just True + , subscriptions = Just True + , openSource = Just True + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just True + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "" + } + ] + , donateCons = + [ { con = "" } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Records/YouTube.elm b/packages/website/frontend/src/Config/Pages/Donate/Records/YouTube.elm new file mode 100755 index 0000000..fba459f --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Records/YouTube.elm @@ -0,0 +1,51 @@ +module Config.Pages.Donate.Records.YouTube exposing (donateYouTube) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Donate.Types exposing (Donate) + + +donateYouTube : Donate +donateYouTube = + let + name : String + name = + "YouTube" + in + { donateImage = formatName name + , donateLink = "https://www.youtube.com/@upRootNutrition/membership" + , donateName = name + , donateFees = "45%" + , donatePreference = 3 + , isNewTabLink = True + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just False + , userFriendly = Just True + , anonymous = Just False + , rewardTiers = Just True + } + ] + , donatePros = + [ { pro = "Extremely familiar platform that most people use anyway." + } + , { pro = "Built-in monetization through ad revenue sharing." + } + ] + , donateCons = + [ { con = "Extremely high platform cut (45% of ad revenue)." + } + , { con = "Content can be demonetized arbitrarily." + } + , { con = "Complicated and often changing monetization policies." + } + , { con = "High competition and algorithm dependency." + } + , { con = "Limited creator control over content visibility." + } + , { con = "Creators are easily censored." + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Donate/Types.elm b/packages/website/frontend/src/Config/Pages/Donate/Types.elm new file mode 100755 index 0000000..fe093e5 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Donate/Types.elm @@ -0,0 +1,40 @@ +module Config.Pages.Donate.Types exposing + ( Cons + , Donate + , Features + , Pros + ) + + +type alias Donate = + { donateImage : String + , donateLink : String + , donateName : String + , donateFees : String + , donatePreference : Int + , donatePros : List Pros + , donateCons : List Cons + , isNewTabLink : Bool + , donateFeatures : List Features + } + + +type alias Features = + { free : Maybe Bool + , subscriptions : Maybe Bool + , openSource : Maybe Bool + , fastPayments : Maybe Bool + , userFriendly : Maybe Bool + , anonymous : Maybe Bool + , rewardTiers : Maybe Bool + } + + +type alias Pros = + { pro : String + } + + +type alias Cons = + { con : String + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/DrShawnBakerPodcast.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/DrShawnBakerPodcast.elm new file mode 100755 index 0000000..852e899 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/DrShawnBakerPodcast.elm @@ -0,0 +1,32 @@ +module Config.Pages.Interviews.Records.DrShawnBakerPodcast exposing (drShawnBakerPodcast) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +drShawnBakerPodcast : Interview +drShawnBakerPodcast = + let + name : String + name = + "Dr. Shawn Baker Podcast" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/SBakerMD" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "He, Wants Wildlife To Not Exist So They Don’t Eat Each Other" + , appearanceEpisode = "?" + , appearanceLink = "https://podcast.carnivore.diet/ethical-vegan-logical-he-wants-wildlife-to-not-exist-so-they-dont-eat-each-other-1-hr-waste" + , appearanceExperience = 0 + , appearanceYear = "November 30th, 2023" + , appearanceSubjects = + [ { subject = "Shawn contradicting himself." } + , { subject = "Shawn strawmanning me." } + , { subject = "Shawn just generally being a weak little bitch." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/FitAndFurious.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/FitAndFurious.elm new file mode 100755 index 0000000..69a6f74 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/FitAndFurious.elm @@ -0,0 +1,33 @@ +module Config.Pages.Interviews.Records.FitAndFurious exposing (fitAndFurious) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +fitAndFurious : Interview +fitAndFurious = + let + name : String + name = + "Fit and Furious" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/FitAndFuriousND" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Seed Oil Schooling!" + , appearanceEpisode = "51" + , appearanceLink = "https://www.youtube.com/watch?v=7I1IJSZIGm0" + , appearanceExperience = 7 + , appearanceYear = "January 14th, 2022" + , appearanceSubjects = + [ { subject = "The story behind the Nutri-Dex." } + , { subject = "Seed oil consumption and health." } + , { subject = "Natural diets versus artificial diets." } + , { subject = "Ethical veganism and Nick's diet." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/FoolproofMastery.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/FoolproofMastery.elm new file mode 100755 index 0000000..655ce43 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/FoolproofMastery.elm @@ -0,0 +1,47 @@ +module Config.Pages.Interviews.Records.FoolproofMastery exposing (foolproofMastery) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +foolproofMastery : Interview +foolproofMastery = + let + name : String + name = + "Foolproof Mastery" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/FoolproofMaster" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Seed Oils & Statistics" + , appearanceEpisode = "14" + , appearanceLink = "https://www.youtube.com/watch?v=3w0wvckA1Hw" + , appearanceExperience = 10 + , appearanceYear = "February 6th, 2023" + , appearanceSubjects = + [ { subject = "Vegetable oils & health outcomes." } + , { subject = "Lipid peroxidation." } + , { subject = "Lag time to LDL oxidation." } + , { subject = "Statistical analysis." } + , { subject = "Study design" } + ] + } + , { appearanceTitle = "Bizarre Nutrition Claims" + , appearanceEpisode = "15" + , appearanceLink = "https://www.youtube.com/watch?v=9k7COJgwCo4" + , appearanceExperience = 10 + , appearanceYear = "February 13th, 2023" + , appearanceSubjects = + [ { subject = "Meat eating in Hong Kong." } + , { subject = "Different eating patterns." } + , { subject = "Glycine methionine ratio." } + , { subject = "Oysters as a vegan food." } + , { subject = "Nick's supplements." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/KetogeeksPodcast.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/KetogeeksPodcast.elm new file mode 100755 index 0000000..e2a1282 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/KetogeeksPodcast.elm @@ -0,0 +1,35 @@ +module Config.Pages.Interviews.Records.KetogeeksPodcast exposing (ketoGeeksPodcast) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +ketoGeeksPodcast : Interview +ketoGeeksPodcast = + let + name : String + name = + "Ketogeek's Podcast" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/fmahmad88" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "In Defense of Seed Oils and Polyunsaturated Fats" + , appearanceEpisode = "78" + , appearanceLink = "https://ketogeek.libsyn.com/in-defense-of-seed-oils-and-polyunsaturated-fats-nick-hiebert" + , appearanceExperience = 10 + , appearanceYear = "March 18th, 2022" + , appearanceSubjects = + [ { subject = "How did you start getting into the seed oil debate?" } + , { subject = "What are some common claims made against seed oils?" } + , { subject = "Does PUFA cause chronic diseases like CVD and cancer?" } + , { subject = "Critique of the ancestral approach towards food and nutrition." } + , { subject = "Why and when epidemiology can be good evidence." } + , { subject = "Resources people can read regarding PUFA and health." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/LegendaryLifePodcast.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/LegendaryLifePodcast.elm new file mode 100755 index 0000000..b097604 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/LegendaryLifePodcast.elm @@ -0,0 +1,36 @@ +module Config.Pages.Interviews.Records.LegendaryLifePodcast exposing (legendaryLifePodcast) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +legendaryLifePodcast : Interview +legendaryLifePodcast = + let + name : String + name = + "Legendary Life Podcast" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/ted_ryce" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Common Food And Nutrition Myths Debunked" + , appearanceEpisode = "391" + , appearanceLink = "https://www.legendarylifepodcast.com/391-5-common-food-and-nutrition-myths-debunked-with-nick-hiebert/c" + , appearanceExperience = 9 + , appearanceYear = "March 9th, 2020" + , appearanceSubjects = + [ { subject = "The importance of identifying quality evidence." } + , { subject = "Salt doesn’t cost high blood pressure?" } + , { subject = "Foods that are high in potassium." } + , { subject = "Why eating processed foods might make you fat." } + , { subject = "Western Diet Culture Mentality." } + , { subject = "Are there good foods and bad foods." } + , { subject = "Nutrient Density: Guide and Tools." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/MarkBellsPowerProject.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/MarkBellsPowerProject.elm new file mode 100755 index 0000000..778c2f8 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/MarkBellsPowerProject.elm @@ -0,0 +1,35 @@ +module Config.Pages.Interviews.Records.MarkBellsPowerProject exposing (markBellsPowerProject) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +markBellsPowerProject : Interview +markBellsPowerProject = + let + name : String + name = + "Mark Bell's Power Project" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/MarkSmellyBell" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Seed Oils Aren’t as Bad as You May Think" + , appearanceEpisode = "670" + , appearanceLink = "https://www.youtube.com/watch?v=omzCi2CGoxo" + , appearanceExperience = 4 + , appearanceYear = "Feburary 1st, 2022" + , appearanceSubjects = + [ { subject = "Quick background on seed oils." } + , { subject = "How does red meat increase disease risk?" } + , { subject = "Exact health benefits of vegetable oils." } + , { subject = "Tucker Goodrich & Alan Flanagan debate review." } + , { subject = "Should you remove seed oils all together at once?" } + , { subject = "Maybe vegetable oils aren’t that important?" } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/MuscleMemoirsPodcast.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/MuscleMemoirsPodcast.elm new file mode 100755 index 0000000..6aae593 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/MuscleMemoirsPodcast.elm @@ -0,0 +1,48 @@ +module Config.Pages.Interviews.Records.MuscleMemoirsPodcast exposing (muscleMemoirsPodcast) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +muscleMemoirsPodcast : Interview +muscleMemoirsPodcast = + let + name : String + name = + "Muscle Memoirs Podcast" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/MikeMurrayRD" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "The Nutri-Dex, Misconceptions, and Optimizing Body Composition" + , appearanceEpisode = "11" + , appearanceLink = "https://www.youtube.com/watch?v=SF1BBOA5FAQ" + , appearanceExperience = 10 + , appearanceYear = "March 8th, 2020" + , appearanceSubjects = + [ { subject = "The story behind the Nutri-Dex." } + , { subject = "Misconceptions about nutrient density." } + , { subject = "Using the cheat sheet to optimize body composition." } + , { subject = "Top foods that are beneficial for bodybuilding." } + , { subject = "How are the most satiating foods determined?" } + , { subject = "Nick gives some of his tops foods" } + ] + } + , { appearanceTitle = "Seed Oils, Saturated Fat, and Cardiovascular Disease" + , appearanceEpisode = "82" + , appearanceLink = "https://www.youtube.com/watch?v=WfApzH4Dj3M" + , appearanceExperience = 10 + , appearanceYear = "May 21st, 2021" + , appearanceSubjects = + [ { subject = "Mechanistic arguments against seed oils." } + , { subject = "Linoleic acid consumption and heart disease." } + , { subject = "Are hunter-gatherer diets optimal for modern humans?" } + , { subject = "Saturated fat and blood lipids." } + , { subject = "Meta-analysis in nutrition." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/SigmaNutritionRadio.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/SigmaNutritionRadio.elm new file mode 100755 index 0000000..d21a885 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/SigmaNutritionRadio.elm @@ -0,0 +1,36 @@ +module Config.Pages.Interviews.Records.SigmaNutritionRadio exposing (sigmaNutritionRadio) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +sigmaNutritionRadio : Interview +sigmaNutritionRadio = + let + name : String + name = + "Sigma Nutrition Radio" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://x.com/NutritionDanny" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Micronutrients, Anti-nutrients, and Non-essential Nutrients" + , appearanceEpisode = "360" + , appearanceLink = "https://sigmanutrition.com/episode360/" + , appearanceExperience = 10 + , appearanceYear = "November 12th, 2020" + , appearanceSubjects = + [ { subject = "How best to measure nutrient density." } + , { subject = "The downsides of maximizing nutrient density." } + , { subject = "Anti-nutrients: how relevant are they?" } + , { subject = "Understanding the effect of phytate, oxalate, etc." } + , { subject = "Hard to get nutrients in typical diets." } + , { subject = "Synergistic and moderating effects of nutrients." } + , { subject = "Non-essential nutrients & importance for health." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/StrenuousLifePodcast.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/StrenuousLifePodcast.elm new file mode 100755 index 0000000..7dc9be3 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/StrenuousLifePodcast.elm @@ -0,0 +1,33 @@ +module Config.Pages.Interviews.Records.StrenuousLifePodcast exposing (strenuousLifePodcast) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +strenuousLifePodcast : Interview +strenuousLifePodcast = + let + name : String + name = + "Strenuous Life Podcast" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "https://www.threads.net/@stephan_kesting" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "Contrarian Thinking About Nutrition" + , appearanceEpisode = "244" + , appearanceLink = "https://www.grapplearts.com/contrarian-thinking-about-nutrition-with-nick-hiebert-strenuous-life-podcast-ep-244/" + , appearanceExperience = 9 + , appearanceYear = "December 2nd, 2019" + , appearanceSubjects = + [ { subject = "The nutrient density of different foods." } + , { subject = "The ten all time greatest, most nutrient dense foods." } + , { subject = "The ketogenic diet." } + , { subject = "Fats vs carbs vs proteins." } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Records/Template.elm b/packages/website/frontend/src/Config/Pages/Interviews/Records/Template.elm new file mode 100755 index 0000000..39d7d37 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Records/Template.elm @@ -0,0 +1,33 @@ +module Config.Pages.Interviews.Records.Template exposing (template) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Interviews.Types exposing (Interview) + + +template : Interview +template = + let + name : String + name = + "" + in + { interviewName = name + , interviewImage = formatName name + , interviewSocial = "" + , isNewTabLink = True + , interviewAppearances = + [ { appearanceTitle = "" + , appearanceEpisode = "" + , appearanceLink = "" + , appearanceExperience = 1 + , appearanceYear = "" + , appearanceSubjects = + [ { subject = "" } + , { subject = "" } + , { subject = "" } + , { subject = "" } + ] + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Interviews/Types.elm b/packages/website/frontend/src/Config/Pages/Interviews/Types.elm new file mode 100755 index 0000000..7e873ad --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Interviews/Types.elm @@ -0,0 +1,28 @@ +module Config.Pages.Interviews.Types exposing + ( Appearance + , Interview + , Subjects + ) + + +type alias Interview = + { interviewName : String + , interviewImage : String + , interviewSocial : String + , isNewTabLink : Bool + , interviewAppearances : List Appearance + } + + +type alias Appearance = + { appearanceEpisode : String + , appearanceLink : String + , appearanceTitle : String + , appearanceYear : String + , appearanceExperience : Int + , appearanceSubjects : List Subjects + } + + +type alias Subjects = + { subject : String } diff --git a/packages/website/frontend/src/Config/Pages/Products/Records/NutriDex.elm b/packages/website/frontend/src/Config/Pages/Products/Records/NutriDex.elm new file mode 100755 index 0000000..762f271 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Products/Records/NutriDex.elm @@ -0,0 +1,203 @@ +module Config.Pages.Products.Records.NutriDex exposing (productNutriDex) + +import Config.Pages.Products.Types exposing (NutriDex) + + +productNutriDex : NutriDex +productNutriDex = + { nutriDexTitle = "The NutriDex" + , nutriDexFeatures = + [ { feature = "Over 700 foods are ranked and adjusted for nutrient bioavailability, absorption capacity, and metabolic conversion rates!" + , featureTitle = "Nutrient Density Scoring: " + } + , { feature = "30 different nutrition scores that stratify foods by a number of different dietary goals!" + , featureTitle = "Specialized Nutrition Scoring: " + } + , { feature = "Use the included Custom Score tab to help create your own personal nutrition score to plan your own ideal diet!" + , featureTitle = "Custom Nutrition Scoring: " + } + , { feature = "Custom-tailor your diet with in-depth nutrition data, including antinutrients, glycemic effects, satiety, FODMAPs, and more!" + , featureTitle = "Diverse Nutrition Data: " + } + , { feature = "Avoid potential hazards from certain nutrients and other compounds with the included hazard profile data!" + , featureTitle = "Hazard Profiles: " + } + , { feature = "Use the included vegan-friendly categorization to help you navigate through the best vegan options!" + , featureTitle = "Vegan-Friendly Categorization: " + } + , { feature = "Use the included keto-friendly categorization to help you navigate through the best keto options!" + , featureTitle = "Keto-Friendly Categorization: " + } + , { feature = "Keep expenses in check with an interactive grocery list that can intelligently estimate the cost of your grocery trip. " + , featureTitle = "Grocery List: " + } + , { feature = "Quantify the nutrient content of your food selection, and minimize anti-nutrients, hunger, calories, sugar, and more!" + , featureTitle = "Nutrition Analyser: " + } + , { feature = "Schedule your meals and workouts, as well as calculate your calorie and macro requirements based on your goals and body composition!" + , featureTitle = "Meal Schedule: " + } + ] + , nutriDexReference = + let + instituteOfMedicinePub = + "Standing Committee on the Scientific Evaluation of Dietary Reference Intakes and its Panel on Folate, Other B Vitamins, and Choline. " + + instituteOfMedicineTitle = + "Institute of Medicine. " + + nationalAcademiesPress = + "National Academies Press. " + in + [ { author = instituteOfMedicineTitle + , year = "1998" + , title = instituteOfMedicinePub ++ "Thiamine. " + , journal = nationalAcademiesPress + , link = "https://www.ncbi.nlm.nih.gov/books/NBK114331/" + } + , { author = instituteOfMedicineTitle + , year = "1998" + , title = instituteOfMedicinePub ++ "Riboflavin. " + , journal = nationalAcademiesPress + , link = "https://www.ncbi.nlm.nih.gov/books/NBK114322/" + } + , { author = instituteOfMedicineTitle + , year = "1998" + , title = instituteOfMedicinePub ++ "Niacin. " + , journal = nationalAcademiesPress + , link = "https://www.ncbi.nlm.nih.gov/books/NBK114304/" + } + , { author = instituteOfMedicineTitle + , year = "2011" + , title = "Dietary Reference Intakes for Calcium and Vitamin D. National Academies Press. " + , journal = nationalAcademiesPress + , link = "https://www.ncbi.nlm.nih.gov/books/NBK56056/" + } + , { author = instituteOfMedicineTitle + , year = "2006" + , title = "Dietary Reference Intakes: The Essential Guide to Nutrient Requirements. " + , journal = "Manganese. Chapter 39, page 352. " + , link = "https://www.nap.edu/read/11537/chapter/39" + } + , { author = instituteOfMedicineTitle + , year = "2006" + , title = "Dietary Reference Intakes: The Essential Guide to Nutrient Requirements. " + , journal = "Phosphorus. Chapter 41, page 364. " + , link = "https://www.nap.edu/read/11537/chapter/41" + } + , { author = instituteOfMedicineTitle + , year = "2006" + , title = "Dietary Reference Intakes: The Essential Guide to Nutrient Requirements. " + , journal = "Potassium. Chapter 41, page 372. " + , link = "https://www.nap.edu/read/11537/chapter/42" + } + , { author = instituteOfMedicineTitle + , year = "1998" + , title = instituteOfMedicinePub ++ "Panthotheic Acid. " + , journal = nationalAcademiesPress + , link = "https://www.ncbi.nlm.nih.gov/books/NBK114311/" + } + , { author = "Reynolds RD. " + , year = "September 1988" + , title = "Bioavailability of vitamin B-6 from plant foods. " + , journal = "Am J Clin Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/2843032" + } + , { author = "Shibata, Keiko, Yasuyo Yasuhara, and Kazuto Yasuda" + , year = "2001" + , title = "Effects of Cooking Methods on the Retention of Vitamin B6 in Foods, and the Approximate Cooking Loss in Daily Meals. " + , journal = "J. Home Econ. Jpn. " + , link = "https://www.semanticscholar.org/paper/Effects-of-Cooking-Methods-on-the-Retention-of-B6-Shibata-Yasuhara/b8445e60d87753144ef856e0ae207b551aa75b9c" + } + , { author = "Carmel, R. " + , year = "2008" + , title = "How I treat cobalamin (vitamin B12) deficiency. " + , journal = "Blood" + , link = "https://www.ncbi.nlm.nih.gov/pubmed/18606874" + } + , { author = "Ohrvik, Veronica E. and Cornelia M. Witthoft" + , year = "2011" + , title = "Human Folate Bioavailability. " + , journal = "Nutrients" + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3257685/" + } + , { author = "Novotny, Janet A., et al. " + , year = "2010" + , title = "β-Carotene Conversion to Vitamin A Decreases As the Dietary Dose Increases in Humans. " + , journal = "J Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855261/" + } + , { author = "Gijsbers, B.L., Jie, K.S., and Vermeer, C. " + , year = "1996" + , title = "Effect of food composition on vitamin K absorption in human volunteers. " + , journal = "Br J Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/8813897" + } + , { author = "Jacob, R.A., and Sotoudeh, G. " + , year = "2002" + , title = "Vitamin C function and status in chronic disease. " + , journal = "Nutr Clin Care. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/12134712" + } + , { author = "Reboul, Emmanuelle" + , year = "2017" + , title = "Vitamin E Bioavailability: Mechanisms of Intestinal Absorption in the Spotlight. " + , journal = "Antioxidants (Basel). " + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5745505/" + } + , { author = "Zhang, Zhiying, et al. " + , year = "2018" + , title = "Dietary Intakes of EPA and DHA Omega-3 Fatty Acids among US Childbearing-Age and Pregnant Women: An Analysis of NHANES 2001–2014. " + , journal = "Nutrients. " + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5946201/" + } + , { author = "Sioen, Isabelle, et al. " + , year = "2017" + , title = "Systematic Review on N-3 and N-6 Polyunsaturated Fatty Acid Intake in European Countries in Light of the Current Recommendations – Focus on Specific Population Groups. " + , journal = "Ann Nutr Metab. " + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5452278/" + } + , { author = "Burdge, G.C., and Wootton, S.A. " + , year = "2002" + , title = "Conversion of alpha-linolenic acid to eicosapentaenoic, docosapentaenoic and docosahexaenoic acids in young women. " + , journal = "Br J Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/12323090" + } + , { author = "Rett, Brian S., and Whelan, Jay" + , year = "2011" + , title = "Increasing dietary linoleic acid does not increase tissue arachidonic acid content in adults consuming Western-type diets: a systematic review. " + , journal = "Nutr Metab (Lond). " + , link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3132704/" + } + , { author = "Lönnerdal, B. " + , year = "1996" + , title = "Bioavailability of copper. " + , journal = "Am J Clin Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/8615369" + } + , { author = "Fine, K.D., et al. " + , year = "1991" + , title = "Intestinal absorption of magnesium from food and supplements. " + , journal = "J Clin Invest. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/1864954" + } + , { author = "Fairweather-Tait, S.J., Collings, R., and Hurst, R. " + , year = "2010" + , title = "Selenium bioavailability: current knowledge and future research requirements. " + , journal = "Am J Clin Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/20200264" + } + , { author = "Lönnerdal, B. " + , year = "2000" + , title = "Dietary factors influencing zinc absorption. " + , journal = "J Nutr. " + , link = "https://www.ncbi.nlm.nih.gov/pubmed/10801947" + } + , { author = "PDCAAS Wikipedia article" + , year = "" + , title = "Protein Digestibility Corrected Amino Acid Score" + , journal = "" + , link = "https://en.wikipedia.org/wiki/Protein_Digestibility_Corrected_Amino_Acid_Score" + } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Products/Types.elm b/packages/website/frontend/src/Config/Pages/Products/Types.elm new file mode 100755 index 0000000..3977598 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Products/Types.elm @@ -0,0 +1,19 @@ +module Config.Pages.Products.Types exposing + ( Features + , NutriDex + ) + +import Config.Helpers.Articles.Types exposing (References) + + +type alias NutriDex = + { nutriDexTitle : String + , nutriDexFeatures : List Features + , nutriDexReference : List References + } + + +type alias Features = + { feature : String + , featureTitle : String + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Records/DebateAnalysis.elm b/packages/website/frontend/src/Config/Pages/Services/Records/DebateAnalysis.elm new file mode 100755 index 0000000..5fd2609 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Records/DebateAnalysis.elm @@ -0,0 +1,28 @@ +module Config.Pages.Services.Records.DebateAnalysis exposing (servicesDebateAnalysis) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Services.Types exposing (Service) +import Route.Path as Path + + +servicesDebateAnalysis : Service +servicesDebateAnalysis = + let + name : String + name = + "Debate Analysis" + in + { serviceImage = formatName name + , serviceLink = Path.toString Path.Services_Analysis + , serviceName = name + , isNewTabLink = False + , serviceRate = "$80/hr" + , serviceBlurb = "" + , serviceDescription = + [ { point = "Have your own debates analyzed for constructive feedback." } + , { point = "Receive advice to improve your debate and public speaking skills." } + , { point = "Gain valuable insights that help you become a stronger reasoner." } + , { point = "Gain comfort with debate and verbal confrontation." } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Records/DebateCoaching.elm b/packages/website/frontend/src/Config/Pages/Services/Records/DebateCoaching.elm new file mode 100755 index 0000000..c0b9949 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Records/DebateCoaching.elm @@ -0,0 +1,28 @@ +module Config.Pages.Services.Records.DebateCoaching exposing (servicesDebateCoaching) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Services.Types exposing (Service) +import Route.Path as Path + + +servicesDebateCoaching : Service +servicesDebateCoaching = + let + name : String + name = + "Debate Coaching" + in + { serviceImage = formatName name + , serviceLink = Path.toString Path.Services_Coaching + , serviceName = name + , serviceRate = "$60/hr" + , isNewTabLink = False + , serviceBlurb = "" + , serviceDescription = + [ { point = "Participate in a structured course with five one-hour modules." } + , { point = "Learn critical thinking, debate strategy, formal logic, and more" } + , { point = "Receive personalized and generalizable advice." } + , { point = "Improve debate understanding and performance." } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Records/ElmBuilds.elm b/packages/website/frontend/src/Config/Pages/Services/Records/ElmBuilds.elm new file mode 100755 index 0000000..3863d77 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Records/ElmBuilds.elm @@ -0,0 +1,28 @@ +module Config.Pages.Services.Records.ElmBuilds exposing (servicesElmBuilds) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Services.Types exposing (Service) +import Route.Path as Path + + +servicesElmBuilds : Service +servicesElmBuilds = + let + name : String + name = + "Custom Elm Sites" + in + { serviceImage = formatName name + , serviceLink = Path.toString Path.Services_Elm + , serviceName = name + , serviceRate = "$50/hr (or by deliverable)" + , isNewTabLink = False + , serviceBlurb = "" + , serviceDescription = + [ { point = "Receive a custom website frontend written in Elm." } + , { point = "Tailored solutions based on user needs." } + , { point = "Assistance with server integration." } + , { point = "Receive unlimited revisions before finalization." } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Records/NixBuilds.elm b/packages/website/frontend/src/Config/Pages/Services/Records/NixBuilds.elm new file mode 100755 index 0000000..26cd2bb --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Records/NixBuilds.elm @@ -0,0 +1,28 @@ +module Config.Pages.Services.Records.NixBuilds exposing (servicesNixBuilds) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Services.Types exposing (Service) +import Route.Path as Path + + +servicesNixBuilds : Service +servicesNixBuilds = + let + name : String + name = + "Custom Nix Configs" + in + { serviceImage = formatName name + , serviceLink = Path.toString Path.Services_Nix + , serviceName = name + , serviceRate = "$50/hr (or by deliverable)" + , isNewTabLink = False + , serviceBlurb = "" + , serviceDescription = + [ { point = "Receive a custom NixOS configuration." } + , { point = "Help with transitioning from other operating systems to NixOS." } + , { point = "Assistance with the Nix programming language." } + , { point = "Receive unlimited revisions before finalization." } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Records/NutritionScience.elm b/packages/website/frontend/src/Config/Pages/Services/Records/NutritionScience.elm new file mode 100755 index 0000000..a45ebc4 --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Records/NutritionScience.elm @@ -0,0 +1,28 @@ +module Config.Pages.Services.Records.NutritionScience exposing (servicesNutritionScience) + +import Config.Data.Hashtags.Types exposing (Hashtags(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Pages.Services.Types exposing (Service) +import Route.Path as Path + + +servicesNutritionScience : Service +servicesNutritionScience = + let + name : String + name = + "Nutrition Science" + in + { serviceImage = formatName name + , serviceLink = Path.toString Path.Services_Nutrition + , serviceName = name + , serviceRate = "$50/hr" + , isNewTabLink = False + , serviceBlurb = "" + , serviceDescription = + [ { point = "Participate in a focused, one-hour Q&A session on nutrition science." } + , { point = "Inquire about methodology, epistemology, and study interpretation." } + , { point = "Gain access to nutrition science interpretation cheat sheets." } + , { point = "Simplify and streamline the research appraisal process." } + ] + } diff --git a/packages/website/frontend/src/Config/Pages/Services/Types.elm b/packages/website/frontend/src/Config/Pages/Services/Types.elm new file mode 100755 index 0000000..56348da --- /dev/null +++ b/packages/website/frontend/src/Config/Pages/Services/Types.elm @@ -0,0 +1,20 @@ +module Config.Pages.Services.Types exposing + ( Description + , Service + ) + + +type alias Service = + { serviceImage : String + , serviceLink : String + , serviceName : String + , serviceRate : String + , isNewTabLink : Bool + , serviceBlurb : String + , serviceDescription : List Description + } + + +type alias Description = + { point : String + } diff --git a/packages/website/frontend/src/Config/Style/Colour/Helpers.elm b/packages/website/frontend/src/Config/Style/Colour/Helpers.elm new file mode 100755 index 0000000..f87604d --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Colour/Helpers.elm @@ -0,0 +1,118 @@ +module Config.Style.Colour.Helpers exposing + ( ThemeColor(..) + , colourTheme + , getThemeColor + , syntaxTheme + ) + +import Config.Style.Colour.Types + exposing + ( SyntaxColors + , Theme + ) +import Element as E + exposing + ( Color + , rgb255 + , rgba + ) +import Element.Font as F exposing (color) + + +colourTheme : Theme +colourTheme = + { textLightGrey = rgb255 212 212 212 + , textDarkGrey = rgb255 126 126 126 + , textLightOrange = rgb255 204 102 0 + , textDarkOrange = rgb255 120 60 0 + , textDeepDarkOrange = rgb255 60 30 0 + , backgroundLightGrey = rgb255 40 40 40 + , backgroundDarkGrey = rgb255 30 30 30 + , backgroundDeepDarkGrey = rgb255 20 20 20 + , backgroundSpreadsheet = rgb255 36 36 36 + , backgroundSpreadsheetDark = rgb255 26 26 26 + , shadow = rgb255 10 10 10 + , barGreen = rgb255 0 102 0 + , barRed = rgb255 102 0 0 + , debugColour = rgb255 227 28 121 + , transparent = rgba 1 1 1 0 + } + + +syntaxTheme : SyntaxColors +syntaxTheme = + { punctuation = rgb255 202 158 230 + , key = rgb255 138 173 244 + , string = rgb255 166 218 149 + , keyword = rgb255 245 169 127 + , operator = rgb255 178 185 194 + , background = rgb255 36 39 58 + , text = rgb255 202 211 245 + } + + +type ThemeColor + = TextLightGrey + | TextDarkGrey + | TextLightOrange + | TextDarkOrange + | TextDeepDarkOrange + | BackgroundLightGrey + | BackgroundDarkGrey + | BackgroundDeepDarkGrey + | BackgroundSpreadsheet + | BackgroundSpreadsheetDark + | Shadow + | BarGreen + | BarRed + | DebugColour + | Transparent + + +getThemeColor : ThemeColor -> Color +getThemeColor color = + case color of + TextLightGrey -> + colourTheme.textLightGrey + + TextDarkGrey -> + colourTheme.textDarkGrey + + TextLightOrange -> + colourTheme.textLightOrange + + TextDarkOrange -> + colourTheme.textDarkOrange + + TextDeepDarkOrange -> + colourTheme.textDeepDarkOrange + + BackgroundLightGrey -> + colourTheme.backgroundLightGrey + + BackgroundDarkGrey -> + colourTheme.backgroundDarkGrey + + BackgroundDeepDarkGrey -> + colourTheme.backgroundDeepDarkGrey + + BackgroundSpreadsheet -> + colourTheme.backgroundSpreadsheet + + BackgroundSpreadsheetDark -> + colourTheme.backgroundSpreadsheetDark + + Shadow -> + colourTheme.shadow + + BarGreen -> + colourTheme.barGreen + + BarRed -> + colourTheme.barRed + + DebugColour -> + colourTheme.debugColour + + Transparent -> + colourTheme.transparent diff --git a/packages/website/frontend/src/Config/Style/Colour/Types.elm b/packages/website/frontend/src/Config/Style/Colour/Types.elm new file mode 100755 index 0000000..dc316ce --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Colour/Types.elm @@ -0,0 +1,36 @@ +module Config.Style.Colour.Types exposing + ( SyntaxColors + , Theme + ) + +import Element exposing (Color) + + +type alias Theme = + { textLightGrey : Color + , textDarkGrey : Color + , textLightOrange : Color + , textDarkOrange : Color + , textDeepDarkOrange : Color + , backgroundLightGrey : Color + , backgroundDarkGrey : Color + , backgroundDeepDarkGrey : Color + , backgroundSpreadsheet : Color + , backgroundSpreadsheetDark : Color + , shadow : Color + , barGreen : Color + , barRed : Color + , debugColour : Color + , transparent : Color + } + + +type alias SyntaxColors = + { punctuation : Color + , key : Color + , string : Color + , keyword : Color + , operator : Color + , background : Color + , text : Color + } diff --git a/packages/website/frontend/src/Config/Style/Fonts.elm b/packages/website/frontend/src/Config/Style/Fonts.elm new file mode 100755 index 0000000..ffe9d4f --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Fonts.elm @@ -0,0 +1,50 @@ +module Config.Style.Fonts exposing + ( defaultFontSize + , headerFontSizeBig + , headerFontSizeMedium + , paragraphSpacing + , smallTextFontSize + , spartanFont + ) + +import Element + exposing + ( Attr + , Attribute + , spacing + ) +import Element.Font as F + exposing + ( size + , typeface + ) + + +spartanFont : F.Font +spartanFont = + F.typeface "League Spartan" + + +paragraphSpacing : Attribute msg +paragraphSpacing = + spacing 0 + + +headerFontSizeBig : Attr decorative msg +headerFontSizeBig = + F.size 23 + + +headerFontSizeMedium : Attr decorative msg +headerFontSizeMedium = + F.size 20 + + +defaultFontSize : Attr decorative msg +defaultFontSize = + F.size 18 + + +smallTextFontSize : Attr decorative msg +smallTextFontSize = + F.size 16 diff --git a/packages/website/frontend/src/Config/Style/Glow.elm b/packages/website/frontend/src/Config/Style/Glow.elm new file mode 100755 index 0000000..0a5a809 --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Glow.elm @@ -0,0 +1,24 @@ +module Config.Style.Glow exposing + ( glowDeepDarkGrey + , glowDeepDarkGreyNavbar + , glowDeepDarkOrange + ) + +import Config.Style.Colour.Helpers exposing (ThemeColor(..), colourTheme, getThemeColor) +import Element exposing (Attr) +import Element.Border as D exposing (glow) + + +glowDeepDarkGrey : Attr decorative msg +glowDeepDarkGrey = + D.glow (getThemeColor Shadow) 4 + + +glowDeepDarkOrange : Attr decorative msg +glowDeepDarkOrange = + D.glow (getThemeColor TextDeepDarkOrange) 4 + + +glowDeepDarkGreyNavbar : Attr decorative msg +glowDeepDarkGreyNavbar = + D.glow (getThemeColor Shadow) 10 diff --git a/packages/website/frontend/src/Config/Style/Icons/Helpers.elm b/packages/website/frontend/src/Config/Style/Icons/Helpers.elm new file mode 100755 index 0000000..b6ebcef --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Icons/Helpers.elm @@ -0,0 +1,32 @@ +module Config.Style.Icons.Helpers exposing (buildSvg) + +import Config.Style.Icons.Types as SvgTypes + exposing + ( InnerPart + , OuterPart + ) +import Element as E + exposing + ( Element + , el + , html + ) +import Svg exposing (svg) + + + +{- buildSvg consumes an inner record to construct most of an SVG, and an outer record to supply + any potentially varying TypedSvg.Core.Attribute msgs and wrap it in an Element.el so it can be + used by elm-ui. It provides a consistent interface for inserting SVGs into elm-ui code. +-} + + +buildSvg : SvgTypes.OuterPart msg -> SvgTypes.InnerPart msg -> Element msg +buildSvg outer inner = + el + outer.elementAttributes + <| + html <| + Svg.svg + (outer.svgAttributes ++ inner.svgAttributes) + inner.svg diff --git a/packages/website/frontend/src/Config/Style/Icons/Icons.elm b/packages/website/frontend/src/Config/Style/Icons/Icons.elm new file mode 100755 index 0000000..bc7b25c --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Icons/Icons.elm @@ -0,0 +1,1057 @@ +module Config.Style.Icons.Icons exposing + ( circleDots + , circleX + , code + , construction + , contact + , copyLink + , debate + , discord + , donate + , gitlab + , home + , hyperBlog + , interviews + , journal + , leaving + , line + , lock + , mastodon + , nutriDex + , nutriDexLogo + , services + , source + , thumbsDown + , thumbsUp + , twitter + , upRootLarge + , upRootMedium + , upRootSmall + , video + ) + +import Config.Style.Icons.Helpers as HeSvg exposing (buildSvg) +import Config.Style.Icons.Types as SvgTypes + exposing + ( InnerPart + , OuterPart + ) +import Element as E exposing (Element) +import Html exposing (Html) +import Svg + exposing + ( path + , svg + ) +import Svg.Attributes as SvgAttr + + +upRootSmall : Html msg +upRootSmall = + svg + [ SvgAttr.width "100%" + , SvgAttr.height "100%" + , SvgAttr.viewBox "0 0 286 203" + , SvgAttr.version "1.1" + , SvgAttr.xmlSpace "preserve" + , SvgAttr.style "fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,-1702.49,-2847.36)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,1072.22,2290.29)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,373.077,489.488)" + ] + [ path + [ SvgAttr.d "M410,379.833C410,379.833 410.056,260.455 410.09,188.088C410.095,176.87 404.503,163.127 395.402,151.992C386.302,140.858 375.063,134.008 365.884,134.002C358.352,133.997 351.428,133.992 346.641,133.989C345.213,133.988 343.47,132.952 342.03,131.25C340.591,129.547 339.658,127.419 339.564,125.619C338.962,114.141 337.955,94.916 337.955,94.916L397.955,94.916C397.955,94.916 537.356,266.295 570.787,307.394C575.207,312.828 580.681,316.175 585.149,316.175C597.174,316.175 620,316.175 620,316.175L620,379.833L560.605,379.833C553.617,379.833 545.056,374.614 538.129,366.13C524.324,349.222 491.306,308.782 480.375,295.394C476.268,290.363 471.189,287.278 467.055,287.302C462.921,287.326 460.361,290.456 460.34,295.511C460.211,327.614 460,379.833 460,379.833L410,379.833Z" + , SvgAttr.style "fill:rgb(212,212,212);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,345.028,514.865)" + ] + [ path + [ SvgAttr.d "M600,253.872C600,256.824 598.525,258.666 596.128,258.709C593.731,258.751 590.774,256.987 588.364,254.078C577.294,240.715 561.273,221.376 553.937,212.52C551.503,209.583 550,205.927 550,202.947C550,184.124 550,116.624 550,116.624L600,116.624L600,253.872Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.70645,0,-0.149774,1.77773,-440.616,-481.127)" + ] + [ path + [ SvgAttr.d "M781.333,624.54L849.897,624.185L836.011,584L781.333,624.54Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + ] + ] + ] + + +upRootMedium : Html msg +upRootMedium = + svg + [ SvgAttr.width "100%" + , SvgAttr.height "100%" + , SvgAttr.viewBox "0 0 718 236" + , SvgAttr.version "1.1" + , SvgAttr.xmlSpace "preserve" + , SvgAttr.style "fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,-945.584,-3365.22)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,744.72,2810.42)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,338.58,489.488)" + ] + [ path + [ SvgAttr.d "M372.344,360.399C372.693,355.91 371.866,349.371 368.149,340.13C364.701,331.561 359.604,323.609 353.731,317.061L310.917,264.032C300.938,251.338 287.91,242.703 276.931,242.703C265.89,242.703 259.803,251.436 260.112,264.249L260.074,290L260,290L260,317.487C259.859,319.273 259.857,321.16 260,323.133L260,380L209.998,380.001L209.998,178.068C209.998,166.904 215.643,160 224.772,159.998L406.092,159.962C409.529,159.961 413.739,162.524 417.149,166.694C420.559,170.863 422.656,176.011 422.656,180.214L422.656,213.468C422.656,219.626 420.947,224.62 417.745,227.822L379.172,266.395C377.289,268.278 376.609,271.556 377.281,275.51C377.953,279.463 379.922,283.767 382.755,287.474L413.545,327.767C419.235,335.214 422.656,344.061 422.656,351.333L422.656,422.862L366.923,422.869L371.072,375.058L372.305,360.848C372.319,360.699 372.332,360.55 372.344,360.399ZM360.277,196.701L314.978,197.291C311.426,197.337 309.303,200.157 309.462,204.615C309.622,209.073 312.038,214.436 315.738,218.543L329.196,233.485C333.595,238.369 338.865,240.179 341.813,237.82L370.371,214.965C372.613,213.171 372.463,208.69 370.012,204.255C367.56,199.819 363.488,196.659 360.277,196.701Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,25.2846,-499.837)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,2.10134,-540.366)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,-21.0054,-499.837)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,746.985,2808.15)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,373.077,489.488)" + ] + [ path + [ SvgAttr.d "M410,379.833C410,379.833 410.056,260.455 410.09,188.088C410.095,176.87 404.503,163.127 395.402,151.992C386.302,140.858 375.063,134.008 365.884,134.002C358.352,133.997 351.428,133.992 346.641,133.989C345.213,133.988 343.47,132.952 342.03,131.25C340.591,129.547 339.658,127.419 339.564,125.619C338.962,114.141 337.955,94.916 337.955,94.916L397.955,94.916C397.955,94.916 537.356,266.295 570.787,307.394C575.207,312.828 580.681,316.175 585.149,316.175C597.174,316.175 620,316.175 620,316.175L620,379.833L560.605,379.833C553.617,379.833 545.056,374.614 538.129,366.13C524.324,349.222 491.306,308.782 480.375,295.394C476.268,290.363 471.189,287.278 467.055,287.302C462.921,287.326 460.361,290.456 460.34,295.511C460.211,327.614 460,379.833 460,379.833L410,379.833Z" + , SvgAttr.style "fill:rgb(212,212,212);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,345.028,514.865)" + ] + [ path + [ SvgAttr.d "M600,253.872C600,256.824 598.525,258.666 596.128,258.709C593.731,258.751 590.774,256.987 588.364,254.078C577.294,240.715 561.273,221.376 553.937,212.52C551.503,209.583 550,205.927 550,202.947C550,184.124 550,116.624 550,116.624L600,116.624L600,253.872Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.70645,0,-0.149774,1.77773,-440.616,-481.127)" + ] + [ path + [ SvgAttr.d "M781.333,624.54L849.897,624.185L836.011,584L781.333,624.54Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,1092.58,3267.29)" + ] + [ path + [ SvgAttr.d "M128.358,409.275C128.368,417.539 124.19,422.646 117.431,422.632C95.856,422.586 49.907,422.489 49.907,422.489C40.439,422.47 28.16,415.401 18.78,403.921C9.4,392.44 4.327,378.273 4.326,366.706L4.323,260.755L74.344,260.755L74.37,336.128L134.449,336.195C144.333,336.206 150.426,328.705 150.373,316.592L150.031,260.746L200.055,260.862L200.446,422.931C200.446,422.931 176.719,422.875 162.366,422.84C160.154,422.835 157.446,421.179 155.258,418.492C153.07,415.805 151.732,412.494 151.745,409.8C151.808,397.197 151.895,379.981 151.895,379.981C151.895,379.981 145.967,379.997 140.056,380.013C132.805,380.032 128.329,385.536 128.34,394.419C128.346,399.221 128.352,404.551 128.358,409.275Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + ] + ] + + +upRootLarge : Html msg +upRootLarge = + svg + [ SvgAttr.width "100%" + , SvgAttr.height "100%" + , SvgAttr.viewBox "0 0 2093 261" + , SvgAttr.version "1.1" + , SvgAttr.xmlSpace "preserve" + , SvgAttr.style "fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,-1020.41,-1366.12)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,1358.72,809.046)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,373.077,489.488)" + ] + [ path + [ SvgAttr.d "M410,379.833C410,379.833 410.056,260.455 410.09,188.088C410.095,176.87 404.503,163.127 395.402,151.992C386.302,140.858 375.063,134.008 365.884,134.002C358.352,133.997 351.428,133.992 346.641,133.989C345.213,133.988 343.47,132.952 342.03,131.25C340.591,129.547 339.658,127.419 339.564,125.619C338.962,114.141 337.955,94.916 337.955,94.916L397.955,94.916C397.955,94.916 537.356,266.295 570.787,307.394C575.207,312.828 580.681,316.175 585.149,316.175C597.174,316.175 620,316.175 620,316.175L620,379.833L560.605,379.833C553.617,379.833 545.056,374.614 538.129,366.13C524.324,349.222 491.306,308.782 480.375,295.394C476.268,290.363 471.189,287.278 467.055,287.302C462.921,287.326 460.361,290.456 460.34,295.511C460.211,327.614 460,379.833 460,379.833L410,379.833Z" + , SvgAttr.style "fill:rgb(212,212,212);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,345.028,514.865)" + ] + [ path + [ SvgAttr.d "M600,253.872C600,256.824 598.525,258.666 596.128,258.709C593.731,258.751 590.774,256.987 588.364,254.078C577.294,240.715 561.273,221.376 553.937,212.52C551.503,209.583 550,205.927 550,202.947C550,184.124 550,116.624 550,116.624L600,116.624L600,253.872Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.70645,0,-0.149774,1.77773,-440.616,-481.127)" + ] + [ path + [ SvgAttr.d "M781.333,624.54L849.897,624.185L836.011,584L781.333,624.54Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,975.131,809.281)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,338.58,489.488)" + ] + [ path + [ SvgAttr.d "M372.344,360.399C372.693,355.91 371.866,349.371 368.149,340.13C364.701,331.561 359.604,323.609 353.731,317.061L310.917,264.032C300.938,251.338 287.91,242.703 276.931,242.703C265.89,242.703 259.803,251.436 260.112,264.249L260.074,290L260,290L260,317.487C259.859,319.273 259.857,321.16 260,323.133L260,380L209.998,380.001L209.998,178.068C209.998,166.904 215.643,160 224.772,159.998L406.092,159.962C409.529,159.961 413.739,162.524 417.149,166.694C420.559,170.863 422.656,176.011 422.656,180.214L422.656,213.468C422.656,219.626 420.947,224.62 417.745,227.822L379.172,266.395C377.289,268.278 376.609,271.556 377.281,275.51C377.953,279.463 379.922,283.767 382.755,287.474L413.545,327.767C419.235,335.214 422.656,344.061 422.656,351.333L422.656,422.862C410.757,423.856 366.923,422.869 366.923,422.869L371.072,375.058L372.305,360.848C372.319,360.699 372.332,360.55 372.344,360.399ZM360.277,196.701L314.978,197.291C311.426,197.337 309.303,200.157 309.462,204.615C309.622,209.073 312.038,214.436 315.738,218.543L329.196,233.485C333.595,238.369 338.865,240.179 341.813,237.82L370.371,214.965C372.613,213.171 372.463,208.69 370.012,204.255C367.56,199.819 363.488,196.659 360.277,196.701Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,25.2846,-499.837)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,2.10134,-540.366)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.39385,0,0,1.39385,-21.0054,-499.837)" + ] + [ Svg.circle + [ SvgAttr.cx "370.033" + , SvgAttr.cy "883.522" + , SvgAttr.r "12.565" + , SvgAttr.style "fill:rgb(126,126,126);" + ] + [] + ] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,1167.41,1268.19)" + ] + [ path + [ SvgAttr.d "M128.358,409.275C128.368,417.539 124.19,422.646 117.431,422.632C95.856,422.586 49.907,422.489 49.907,422.489C40.439,422.47 28.16,415.401 18.78,403.921C9.4,392.44 4.327,378.273 4.326,366.706L4.323,260.755L74.344,260.755L74.37,336.128L134.449,336.195C144.333,336.206 150.426,328.705 150.373,316.592L150.031,260.746L200.055,260.862L200.446,422.931C200.446,422.931 176.719,422.875 162.366,422.84C160.154,422.835 157.446,421.179 155.258,418.492C153.07,415.805 151.732,412.494 151.745,409.8C151.808,397.197 151.895,379.981 151.895,379.981C151.895,379.981 145.967,379.997 140.056,380.013C132.805,380.032 128.329,385.536 128.34,394.419C128.346,399.221 128.352,404.551 128.358,409.275Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.981895,0,-0.581998,0.981895,739.791,1296.26)" + ] + [ path + [ SvgAttr.d "M773.523,268.073C773.523,273.29 771.24,277.482 766.676,280.649C762.577,283.537 757.825,284.981 752.422,284.981L697.086,284.981L697.086,319.077C697.086,324.294 694.804,328.486 690.239,331.654C686.14,334.542 681.389,335.985 675.986,335.985C670.582,335.985 665.831,334.542 661.732,331.654C657.074,328.486 654.745,324.294 654.745,319.077L654.745,174.868C654.745,169.558 657.028,165.319 661.593,162.151C665.692,159.357 670.489,157.959 675.986,157.959L752.422,157.959C757.919,157.959 762.67,159.357 766.676,162.151C771.24,165.319 773.523,169.558 773.523,174.868L773.523,268.073ZM731.182,259.549L731.182,183.112L697.086,183.112L697.086,259.549L731.182,259.549Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.981895,0,-0.581998,0.981895,1206.2,1171.92)" + ] + [ path + [ SvgAttr.d "M760.603,385.172C760.603,390.389 758.321,394.581 753.756,397.748C749.657,400.636 744.906,402.08 739.503,402.08L663.066,402.08C657.663,402.08 652.912,400.636 648.813,397.748C644.155,394.581 641.826,390.389 641.826,385.172L641.826,291.967C641.826,286.657 644.108,282.418 648.673,279.251C652.772,276.456 657.57,275.058 663.066,275.058L739.503,275.058C744.999,275.058 749.75,276.456 753.756,279.251C758.321,282.418 760.603,286.657 760.603,291.967L760.603,385.172ZM718.263,376.648L718.263,300.211L684.167,300.211L684.167,376.648L718.263,376.648Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M901.18,385.172C901.18,390.389 898.897,394.581 894.333,397.748C890.234,400.636 885.482,402.08 880.079,402.08L803.643,402.08C798.239,402.08 793.488,400.636 789.389,397.748C784.731,394.581 782.402,390.389 782.402,385.172L782.402,291.967C782.402,286.657 784.685,282.418 789.25,279.251C793.349,276.456 798.146,275.058 803.643,275.058L880.079,275.058C885.576,275.058 890.327,276.456 894.333,279.251C898.897,282.418 901.18,286.657 901.18,291.967L901.18,385.172ZM858.839,376.648L858.839,300.211L824.743,300.211L824.743,376.648L858.839,376.648Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1003.75,287.775C1003.75,279.297 999.415,275.058 990.752,275.058L965.739,275.058L965.739,249.486C965.739,244.27 963.41,240.031 958.752,236.77C954.746,233.882 949.855,232.438 944.079,232.438C938.49,232.438 933.692,233.882 929.686,236.77C925.308,240.031 923.119,244.27 923.119,249.486L923.119,385.032C923.119,390.435 925.401,394.674 929.966,397.748C934.065,400.636 938.769,402.08 944.079,402.08C949.669,402.08 954.466,400.636 958.472,397.748C963.317,394.674 965.739,390.435 965.739,385.032L965.739,300.072L990.752,300.072C999.415,300.072 1003.75,295.973 1003.75,287.775Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.981895,0,-0.581998,0.981895,1371.86,1363.66)" + ] + [ path + [ SvgAttr.d "M1109.66,193.253C1109.66,198.469 1107.38,202.662 1102.82,205.829C1098.72,208.717 1093.97,210.161 1088.56,210.161L1012.13,210.161C1006.73,210.161 1001.97,208.717 997.874,205.829C993.217,202.662 990.888,198.469 990.888,193.253L990.888,100.047C990.888,94.737 993.17,90.499 997.735,87.331C1001.83,84.536 1006.63,83.139 1012.13,83.139C1017.62,83.139 1022.38,84.536 1026.38,87.331C1030.95,90.499 1033.23,94.737 1033.23,100.047L1033.23,184.729L1067.32,184.729L1067.32,100.047C1067.32,94.737 1069.61,90.499 1074.17,87.331C1078.18,84.536 1082.97,83.139 1088.56,83.139C1094.06,83.139 1098.81,84.536 1102.82,87.331C1107.38,90.499 1109.66,94.737 1109.66,100.047L1109.66,193.253Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1212.23,95.855C1212.23,87.378 1207.9,83.139 1199.24,83.139L1174.22,83.139L1174.22,57.567C1174.22,52.35 1171.89,48.111 1167.24,44.851C1163.23,41.963 1158.34,40.519 1152.56,40.519C1146.98,40.519 1142.18,41.963 1138.17,44.851C1133.79,48.111 1131.6,52.35 1131.6,57.567L1131.6,193.113C1131.6,198.516 1133.89,202.755 1138.45,205.829C1142.55,208.717 1147.25,210.161 1152.56,210.161C1158.15,210.161 1162.95,208.717 1166.96,205.829C1171.8,202.755 1174.22,198.516 1174.22,193.113L1174.22,108.152L1199.24,108.152C1207.9,108.152 1212.23,104.053 1212.23,95.855Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1336.46,100.047C1336.46,105.264 1334.13,109.456 1329.47,112.624C1325.47,115.418 1320.72,116.816 1315.22,116.816C1307.21,116.816 1301.11,113.975 1296.91,108.292L1268.55,108.292L1268.55,193.253C1268.55,198.469 1266.27,202.662 1261.7,205.829C1257.6,208.717 1252.85,210.161 1247.45,210.161C1242.04,210.161 1237.29,208.717 1233.19,205.829C1228.54,202.662 1226.21,198.469 1226.21,193.253L1226.21,100.047C1226.21,94.737 1228.49,90.499 1233.05,87.331C1237.15,84.536 1241.95,83.139 1247.45,83.139L1315.22,83.139C1320.72,83.139 1325.51,84.536 1329.61,87.331C1334.18,90.499 1336.46,94.737 1336.46,100.047Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1389.42,57.567C1389.42,62.877 1387.14,67.116 1382.57,70.283C1378.57,73.078 1373.82,74.475 1368.32,74.475C1362.82,74.475 1358.03,73.078 1353.93,70.283C1349.36,67.116 1347.08,62.877 1347.08,57.567C1347.08,52.35 1349.36,48.111 1353.93,44.851C1357.93,41.963 1362.73,40.519 1368.32,40.519C1373.82,40.519 1378.57,41.963 1382.57,44.851C1387.14,48.111 1389.42,52.35 1389.42,57.567ZM1389.42,193.253C1389.42,198.469 1387.14,202.662 1382.57,205.829C1378.47,208.717 1373.72,210.161 1368.32,210.161C1362.92,210.161 1358.17,208.717 1354.07,205.829C1349.41,202.662 1347.08,198.469 1347.08,193.253L1347.08,100.047C1347.08,94.737 1349.36,90.499 1353.93,87.331C1358.03,84.536 1362.82,83.139 1368.32,83.139C1373.82,83.139 1378.57,84.536 1382.57,87.331C1387.14,90.499 1389.42,94.737 1389.42,100.047L1389.42,193.253Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1491.99,95.855C1491.99,87.378 1487.66,83.139 1478.99,83.139L1453.98,83.139L1453.98,57.567C1453.98,52.35 1451.65,48.111 1446.99,44.851C1442.99,41.963 1438.1,40.519 1432.32,40.519C1426.73,40.519 1421.93,41.963 1417.93,44.851C1413.55,48.111 1411.36,52.35 1411.36,57.567L1411.36,193.113C1411.36,198.516 1413.64,202.755 1418.21,205.829C1422.31,208.717 1427.01,210.161 1432.32,210.161C1437.91,210.161 1442.71,208.717 1446.71,205.829C1451.56,202.755 1453.98,198.516 1453.98,193.113L1453.98,108.152L1478.99,108.152C1487.66,108.152 1491.99,104.053 1491.99,95.855Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1548.3,57.567C1548.3,62.877 1546.02,67.116 1541.45,70.283C1537.45,73.078 1532.7,74.475 1527.2,74.475C1521.71,74.475 1516.91,73.078 1512.81,70.283C1508.24,67.116 1505.96,62.877 1505.96,57.567C1505.96,52.35 1508.24,48.111 1512.81,44.851C1516.82,41.963 1521.61,40.519 1527.2,40.519C1532.7,40.519 1537.45,41.963 1541.45,44.851C1546.02,48.111 1548.3,52.35 1548.3,57.567ZM1548.3,193.253C1548.3,198.469 1546.02,202.662 1541.45,205.829C1537.36,208.717 1532.61,210.161 1527.2,210.161C1521.8,210.161 1517.05,208.717 1512.95,205.829C1508.29,202.662 1505.96,198.469 1505.96,193.253L1505.96,100.047C1505.96,94.737 1508.24,90.499 1512.81,87.331C1516.91,84.536 1521.71,83.139 1527.2,83.139C1532.7,83.139 1537.45,84.536 1541.45,87.331C1546.02,90.499 1548.3,94.737 1548.3,100.047L1548.3,193.253Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1688.88,193.253C1688.88,198.469 1686.6,202.662 1682.03,205.829C1677.93,208.717 1673.18,210.161 1667.78,210.161L1591.34,210.161C1585.94,210.161 1581.19,208.717 1577.09,205.829C1572.43,202.662 1570.1,198.469 1570.1,193.253L1570.1,100.047C1570.1,94.737 1572.38,90.499 1576.95,87.331C1581.05,84.536 1585.85,83.139 1591.34,83.139L1667.78,83.139C1673.28,83.139 1678.03,84.536 1682.03,87.331C1686.6,90.499 1688.88,94.737 1688.88,100.047L1688.88,193.253ZM1646.54,184.729L1646.54,108.292L1612.44,108.292L1612.44,184.729L1646.54,184.729Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + , path + [ SvgAttr.d "M1829.45,193.253C1829.45,198.469 1827.17,202.662 1822.61,205.829C1818.51,208.717 1813.76,210.161 1808.36,210.161C1802.86,210.161 1798.06,208.763 1793.96,205.969C1789.4,202.708 1787.12,198.469 1787.12,193.253L1787.12,108.292L1753.02,108.292L1753.02,193.253C1753.02,198.469 1750.74,202.662 1746.17,205.829C1742.07,208.717 1737.32,210.161 1731.92,210.161C1726.52,210.161 1721.76,208.717 1717.66,205.829C1713.01,202.662 1710.68,198.469 1710.68,193.253L1710.68,100.047C1710.68,94.737 1712.96,90.499 1717.53,87.331C1721.62,84.536 1726.42,83.139 1731.92,83.139L1808.36,83.139C1813.85,83.139 1818.6,84.536 1822.61,87.331C1827.17,90.499 1829.45,94.737 1829.45,100.047L1829.45,193.253Z" + , SvgAttr.style "fill:rgb(204,102,0);fill-rule:nonzero;" + ] + [] + ] + ] + ] + + +nutriDexLogo : Html msg +nutriDexLogo = + svg + [ SvgAttr.width "100%" + , SvgAttr.height "100%" + , SvgAttr.viewBox "0 0 269 254" + , SvgAttr.version "1.1" + , SvgAttr.xmlSpace "preserve" + , SvgAttr.style "fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;" + ] + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,-3230.36,-2630.73)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(-0.305281,-0.528763,-0.528763,0.305281,4494.3,3752.71)" + ] + [ path + [ SvgAttr.d "M2438.06,573.79L2421.04,607.88" + , SvgAttr.style "fill:none;stroke:rgb(120,60,0);stroke-width:26.21px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(-0.520336,-0.901248,-0.901248,0.520336,5232.34,4537.46)" + ] + [ path + [ SvgAttr.d "M2384.94,593.791L2428.07,593.791" + , SvgAttr.style "fill:none;stroke:rgb(120,60,0);stroke-width:15.37px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(-1.46201,0,0,1.46201,6999.63,1413.74)" + ] + [ path + [ SvgAttr.d "M2439.01,851.153L2458.28,851.153" + , SvgAttr.style "fill:none;stroke:rgb(120,60,0);stroke-width:10.94px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.520336,-0.901248,0.901248,0.520336,1631.94,4537.46)" + ] + [ path + [ SvgAttr.d "M2319.68,627.395C2323.07,629.57 2324.23,634.05 2322.24,637.617L2299.1,678.996C2298.35,680.341 2297.25,681.373 2295.98,682.042L2292.05,675.243L2319.68,627.395Z" + , SvgAttr.style "fill:rgb(120,60,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.520336,-0.901248,0.901248,0.520336,1631.94,4537.46)" + ] + [ path + [ SvgAttr.d "M2344.65,603.881L2362.65,634.203L2338.66,673.941L2384.94,673.941" + , SvgAttr.style "fill:none;stroke:rgb(120,60,0);stroke-width:15.37px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.46201,0,0,1.46201,-135.345,1413.74)" + ] + [ path + [ SvgAttr.d "M2423.66,877.745L2456.6,877.745" + , SvgAttr.style "fill:none;stroke:rgb(120,60,0);stroke-width:10.94px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1671.21,4250.37)" + ] + [ path + [ SvgAttr.d "M2484.47,812.271C2487.52,814.103 2490.15,816.709 2492.05,820.001C2498.05,830.377 2494.49,843.663 2484.11,849.654C2477.29,853.592 2469.21,853.402 2462.77,849.863L2484.47,812.271ZM2456.98,859.904C2463.26,863.709 2467.46,870.611 2467.46,878.486C2467.46,890.467 2457.74,900.193 2445.76,900.193C2441.96,900.193 2438.38,899.215 2435.28,897.496L2456.98,859.904ZM2429.48,907.537C2435.76,911.342 2439.96,918.243 2439.96,926.117C2439.96,934.544 2435.15,941.856 2428.13,945.452L2417.86,927.666L2429.48,907.537ZM2451.62,832.633C2450.96,824.532 2454.9,816.387 2462.4,812.056C2462.92,811.757 2463.45,811.482 2463.97,811.231L2451.62,832.633ZM2406.34,944.257C2400.44,940.374 2396.55,933.697 2396.55,926.117C2396.55,917.453 2401.64,909.968 2408.98,906.488L2400.88,920.526C2398.33,924.945 2398.33,930.389 2400.88,934.807L2406.34,944.257ZM2424.12,880.266C2424.07,879.679 2424.05,879.086 2424.05,878.486C2424.05,869.824 2429.13,862.34 2436.48,858.859L2424.12,880.266Z" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1719.37,4166.96)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,0.75827,-0.75827,0.437787,3003.47,457.873)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1695.29,4208.67)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1743.45,4208.67)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1719.37,4250.37)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.style "fill:rgb(204,102,0);" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,2973.17,2613.98)" + ] + [ path + [ SvgAttr.d "M410,379.833C410,379.833 410.056,260.455 410.09,188.088C410.095,176.87 404.503,163.127 395.402,151.992C386.302,140.858 375.063,134.008 365.884,134.002C358.352,133.997 351.428,133.992 346.641,133.989C345.213,133.988 343.47,132.952 342.03,131.25C340.591,129.547 339.658,127.419 339.564,125.619C338.962,114.141 337.955,94.916 337.955,94.916L397.955,94.916C397.955,94.916 537.356,266.295 570.787,307.394C575.207,312.828 580.681,316.175 585.149,316.175C597.174,316.175 620,316.175 620,316.175L620,379.833L560.605,379.833C553.617,379.833 545.056,374.614 538.129,366.13C524.324,349.222 491.306,308.782 480.375,295.394C476.268,290.363 471.189,287.278 467.055,287.302C462.921,287.326 460.361,290.456 460.34,295.511C460.211,327.614 460,379.833 460,379.833L410,379.833Z" + , SvgAttr.style "fill:rgb(212,212,212);" + ] + [] + ] + ] + ] + + +home : SvgTypes.OuterPart msg -> Element msg +home inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 576 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z" + ] + [] + ] + } + + +services : SvgTypes.OuterPart msg -> Element msg +services inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4l54.1 0 109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109 0-54.1c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7L352 176c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z" + ] + [] + ] + } + + +hyperBlog : SvgTypes.OuterPart msg -> Element msg +hyperBlog inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56s56-25.1 56-56c0-22.3-13.1-41.6-32-50.6l0-98.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-1.6 20.8 8.6 41.6 27.8 52.8c26.8 15.5 61 6.3 76.5-20.5s6.3-61-20.5-76.5c-1.3-.8-2.7-1.5-4-2.1l0-90.8c1.4-.6 2.7-1.3 4-2.1c26.8-15.5 36-49.7 20.5-76.5S390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c2.6 1.8 5.2 3.3 8 4.7l0 90.8c-2.8 1.3-5.5 2.9-8 4.6l-80.1-45.8c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8z" + ] + [] + ] + } + + +video : SvgTypes.OuterPart msg -> Element msg +video inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM48 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L64 96c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM160 128l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L192 96c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0z" + ] + [] + ] + } + + +journal : SvgTypes.OuterPart msg -> Element msg +journal inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M352 0c41 0 80.3 16.3 109.2 45.2l5.5 5.5c29 29 45.3 68.3 45.3 109.2 0 24.1-5.7 47.6-16.2 68.8-1.9 3.7-5.3 6.5-9.3 7.7L374.5 270c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2l32.2 0c14.3 0 21.4 17.2 11.3 27.3l-22.4 22.4c-1.9 1.9-4.2 3.2-6.7 4l-81 24.3c-3.9 1.2-6.5 4.7-6.5 8.8 0 5.1 4.1 9.2 9.2 9.2 13.2 0 18.9 15.7 7.8 22.9-41.1 26.6-89.3 41.1-139 41.1l-86 0-48 48c-8.8 8.8-23.2 8.8-32 0s-8.8-23.2 0-32L256 224c8.8-8.8 8.8-23.2 0-32s-23.2-8.8-32 0L79.5 336.5c-5.7 5.7-15.5 1.7-15.5-6.4 0-67.9 27-133 75-181L242.8 45.2C271.7 16.3 311 0 352 0z" + ] + [] + ] + } + + +source : SvgTypes.OuterPart msg -> Element msg +source inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 87.8c18.8-10.9 40.7-17.1 64-17.1l96 0c35.3 0 64-28.7 64-64l0-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 6.7c0 70.7-57.3 128-128 128l-96 0c-35.3 0-64 28.7-64 64l0 6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-6.7 0-198.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z" + ] + [] + ] + } + + +debate : SvgTypes.OuterPart msg -> Element msg +debate inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z" + ] + [] + ] + } + + +nutriDex : SvgTypes.OuterPart msg -> Element msg +nutriDex inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 269 254" + , SvgAttr.fill "currentColor" + + -- , SvgAttr.width "100%" + -- , SvgAttr.height "100%" + , SvgAttr.viewBox "0 0 269 254" + , SvgAttr.version "1.1" + , SvgAttr.xmlSpace "preserve" + , SvgAttr.style "fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;" + ] + , svg = + [ Svg.g + [ SvgAttr.transform "matrix(1,0,0,1,-3213.08,-2929.6)" + ] + [ Svg.g + [ SvgAttr.transform "matrix(-0.305281,-0.528763,-0.528763,0.305281,4477.01,4051.59)" + ] + [ path + [ SvgAttr.d "M2438.06,573.79L2421.04,607.88" + , SvgAttr.stroke "currentColor" + , SvgAttr.fill "none" + , SvgAttr.style "stroke-width:26.21px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(-0.520336,-0.901248,-0.901248,0.520336,5215.05,4836.33)" + ] + [ path + [ SvgAttr.d "M2384.94,593.791L2428.07,593.791" + , SvgAttr.fill "none" + , SvgAttr.stroke "currentColor" + , SvgAttr.style "stroke-width:15.37px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(-1.46201,0,0,1.46201,6982.34,1712.61)" + ] + [ path + [ SvgAttr.d "M2439.01,851.153L2458.28,851.153" + , SvgAttr.fill "none" + , SvgAttr.stroke "currentColor" + , SvgAttr.style "stroke-width:10.94px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.520336,-0.901248,0.901248,0.520336,1614.66,4836.33)" + ] + [ path + [ SvgAttr.d "M2319.68,627.395C2323.07,629.57 2324.23,634.05 2322.24,637.617L2299.1,678.996C2298.35,680.341 2297.25,681.373 2295.98,682.042L2292.05,675.243L2319.68,627.395Z" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.520336,-0.901248,0.901248,0.520336,1614.66,4836.33)" + ] + [ path + [ SvgAttr.d "M2344.65,603.881L2362.65,634.203L2338.66,673.941L2384.94,673.941" + , SvgAttr.fill "none" + , SvgAttr.stroke "currentColor" + , SvgAttr.style "stroke-width:15.37px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1.46201,0,0,1.46201,-152.629,1712.61)" + ] + [ path + [ SvgAttr.d "M2423.66,877.745L2456.6,877.745" + , SvgAttr.fill "none" + , SvgAttr.stroke "currentColor" + , SvgAttr.style "stroke-width:10.94px;" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1653.93,4549.24)" + ] + [ path + [ SvgAttr.d "M2484.47,812.271C2487.52,814.103 2490.15,816.709 2492.05,820.001C2498.05,830.377 2494.49,843.663 2484.11,849.654C2477.29,853.592 2469.21,853.402 2462.77,849.863L2484.47,812.271ZM2456.98,859.904C2463.26,863.709 2467.46,870.611 2467.46,878.486C2467.46,890.467 2457.74,900.193 2445.76,900.193C2441.96,900.193 2438.38,899.215 2435.28,897.496L2456.98,859.904ZM2429.48,907.537C2435.76,911.342 2439.96,918.243 2439.96,926.117C2439.96,934.544 2435.15,941.856 2428.13,945.452L2417.86,927.666L2429.48,907.537ZM2451.62,832.633C2450.96,824.532 2454.9,816.387 2462.4,812.056C2462.92,811.757 2463.45,811.482 2463.97,811.231L2451.62,832.633ZM2406.34,944.257C2400.44,940.374 2396.55,933.697 2396.55,926.117C2396.55,917.453 2401.64,909.968 2408.98,906.488L2400.88,920.526C2398.33,924.945 2398.33,930.389 2400.88,934.807L2406.34,944.257ZM2424.12,880.266C2424.07,879.679 2424.05,879.086 2424.05,878.486C2424.05,869.824 2429.13,862.34 2436.48,858.859L2424.12,880.266Z" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1702.08,4465.83)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,0.75827,-0.75827,0.437787,2986.19,756.746)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1678.01,4507.54)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1726.16,4507.54)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(0.437787,-0.75827,0.75827,0.437787,1702.08,4549.24)" + ] + [ Svg.circle + [ SvgAttr.cx "2445.76" + , SvgAttr.cy "878.486" + , SvgAttr.r "21.707" + , SvgAttr.fill "currentColor" + ] + [] + ] + , Svg.g + [ SvgAttr.transform "matrix(1,0,-0.402297,0.712005,2955.89,2912.86)" + ] + [ path + [ SvgAttr.d "M410,379.833C410,379.833 410.056,260.455 410.09,188.088C410.095,176.87 404.503,163.127 395.402,151.992C386.302,140.858 375.063,134.008 365.884,134.002C358.352,133.997 351.428,133.992 346.641,133.989C345.213,133.988 343.47,132.952 342.03,131.25C340.591,129.547 339.658,127.419 339.564,125.619C338.962,114.141 337.955,94.916 337.955,94.916L397.955,94.916C397.955,94.916 537.356,266.295 570.787,307.394C575.207,312.828 580.681,316.175 585.149,316.175C597.174,316.175 620,316.175 620,316.175L620,379.833L560.605,379.833C553.617,379.833 545.056,374.614 538.129,366.13C524.324,349.222 491.306,308.782 480.375,295.394C476.268,290.363 471.189,287.278 467.055,287.302C462.921,287.326 460.361,290.456 460.34,295.511C460.211,327.614 460,379.833 460,379.833L410,379.833Z" + , SvgAttr.fill "currentColor" + ] + [] + ] + ] + ] + } + + +interviews : SvgTypes.OuterPart msg -> Element msg +interviews inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 640 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2s0 0 0 0s0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.2-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9c0 0 0 0 0 0s0 0 0 0l-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z" + ] + [] + ] + } + + +donate : SvgTypes.OuterPart msg -> Element msg +donate inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 576 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M64 32C28.7 32 0 60.7 0 96l0 32 576 0 0-32c0-35.3-28.7-64-64-64L64 32zM576 224L0 224 0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-192zM112 352l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z" + ] + [] + ] + } + + +contact : SvgTypes.OuterPart msg -> Element msg +contact inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M215.4 96L144 96l-36.2 0L96 96l0 8.8L96 144l0 40.4 0 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3 48 96c0-26.5 21.5-48 48-48l76.6 0 49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48 416 48c26.5 0 48 21.5 48 48l0 44.3 22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4l0-89 0-40.4 0-39.2 0-8.8-11.8 0L368 96l-71.4 0-81.3 0zM0 448L0 242.1 217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1 512 448s0 0 0 0c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64c0 0 0 0 0 0zM176 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z" + ] + [] + ] + } + + +gitlab : SvgTypes.OuterPart msg -> Element msg +gitlab inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M503.5 204.6L502.8 202.8L433.1 21C431.7 17.5 429.2 14.4 425.9 12.4C423.5 10.8 420.8 9.9 417.9 9.6C415 9.3 412.2 9.7 409.5 10.7C406.8 11.7 404.4 13.3 402.4 15.5C400.5 17.6 399.1 20.1 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.1 111.5 17.6 109.6 15.5C107.6 13.4 105.2 11.7 102.5 10.7C99.9 9.7 97 9.3 94.1 9.6C91.3 9.9 88.5 10.8 86.1 12.4C82.8 14.4 80.3 17.5 78.9 21L9.3 202.8L8.5 204.6C-1.5 230.8-2.7 259.6 5 286.6C12.8 313.5 29.1 337.3 51.5 354.2L51.7 354.4L52.3 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z" + ] + [] + ] + } + + +twitter : SvgTypes.OuterPart msg -> Element msg +twitter inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z" + ] + [] + ] + } + + +mastodon : SvgTypes.OuterPart msg -> Element msg +mastodon inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5 0 0 1 -.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z" + ] + [] + ] + } + + +discord : SvgTypes.OuterPart msg -> Element msg +discord inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 640 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z" + ] + [] + ] + } + + +lock : SvgTypes.OuterPart msg -> Element msg +lock inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M144 144l0 48 160 0 0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192l0-48C80 64.5 144.5 0 224 0s144 64.5 144 144l0 48 16 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0z" + ] + [] + ] + } + + +circleX : SvgTypes.OuterPart msg -> Element msg +circleX inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z" + ] + [] + ] + } + + +line : SvgTypes.OuterPart msg -> Element msg +line inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z" + ] + [] + ] + } + + +circleDots : SvgTypes.OuterPart msg -> Element msg +circleDots inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 448 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z" + ] + [] + ] + } + + +construction : Html msg +construction = + svg + [ SvgAttr.viewBox "0 0 576 512" + , SvgAttr.fill "currentColor" + ] + [ path + [ SvgAttr.d "M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2l-256 0c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7l32 0 22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-74.9-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z" + ] + [] + ] + + +leaving : SvgTypes.OuterPart msg -> Element msg +leaving inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 576 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z" + ] + [] + ] + } + + +copyLink : SvgTypes.OuterPart msg -> Element msg +copyLink inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 640 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z" + ] + [] + ] + } + + +code : SvgTypes.OuterPart msg -> Element msg +code inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 640 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z" + ] + [] + ] + } + + +thumbsUp : SvgTypes.OuterPart msg -> Element msg +thumbsUp inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 512 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M323.8 34.8c-38.2-10.9-78.1 11.2-89 49.4l-5.7 20c-3.7 13-10.4 25-19.5 35l-51.3 56.4c-8.9 9.8-8.2 25 1.6 33.9s25 8.2 33.9-1.6l51.3-56.4c14.1-15.5 24.4-34 30.1-54.1l5.7-20c3.6-12.7 16.9-20.1 29.7-16.5s20.1 16.9 16.5 29.7l-5.7 20c-5.7 19.9-14.7 38.7-26.6 55.5c-5.2 7.3-5.8 16.9-1.7 24.9s12.3 13 21.3 13L448 224c8.8 0 16 7.2 16 16c0 6.8-4.3 12.7-10.4 15c-7.4 2.8-13 9-14.9 16.7s.1 15.8 5.3 21.7c2.5 2.8 4 6.5 4 10.6c0 7.8-5.6 14.3-13 15.7c-8.2 1.6-15.1 7.3-18 15.2s-1.6 16.7 3.6 23.3c2.1 2.7 3.4 6.1 3.4 9.9c0 6.7-4.2 12.6-10.2 14.9c-11.5 4.5-17.7 16.9-14.4 28.8c.4 1.3 .6 2.8 .6 4.3c0 8.8-7.2 16-16 16l-97.5 0c-12.6 0-25-3.7-35.5-10.7l-61.7-41.1c-11-7.4-25.9-4.4-33.3 6.7s-4.4 25.9 6.7 33.3l61.7 41.1c18.4 12.3 40 18.8 62.1 18.8l97.5 0c34.7 0 62.9-27.6 64-62c14.6-11.7 24-29.7 24-50c0-4.5-.5-8.8-1.3-13c15.4-11.7 25.3-30.2 25.3-51c0-6.5-1-12.8-2.8-18.7C504.8 273.7 512 257.7 512 240c0-35.3-28.6-64-64-64l-92.3 0c4.7-10.4 8.7-21.2 11.8-32.2l5.7-20c10.9-38.2-11.2-78.1-49.4-89zM32 192c-17.7 0-32 14.3-32 32L0 448c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32l-64 0z" + ] + [] + ] + } + + +thumbsDown : SvgTypes.OuterPart msg -> Element msg +thumbsDown inner = + HeSvg.buildSvg inner + { svgAttributes = + [ SvgAttr.viewBox "0 0 640 512" + , SvgAttr.fill "currentColor" + ] + , svg = + [ path + [ SvgAttr.d "M323.8 477.2c-38.2 10.9-78.1-11.2-89-49.4l-5.7-20c-3.7-13-10.4-25-19.5-35l-51.3-56.4c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l51.3 56.4c14.1 15.5 24.4 34 30.1 54.1l5.7 20c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7l-5.7-20c-5.7-19.9-14.7-38.7-26.6-55.5c-5.2-7.3-5.8-16.9-1.7-24.9s12.3-13 21.3-13L448 288c8.8 0 16-7.2 16-16c0-6.8-4.3-12.7-10.4-15c-7.4-2.8-13-9-14.9-16.7s.1-15.8 5.3-21.7c2.5-2.8 4-6.5 4-10.6c0-7.8-5.6-14.3-13-15.7c-8.2-1.6-15.1-7.3-18-15.2s-1.6-16.7 3.6-23.3c2.1-2.7 3.4-6.1 3.4-9.9c0-6.7-4.2-12.6-10.2-14.9c-11.5-4.5-17.7-16.9-14.4-28.8c.4-1.3 .6-2.8 .6-4.3c0-8.8-7.2-16-16-16l-97.5 0c-12.6 0-25 3.7-35.5 10.7l-61.7 41.1c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l61.7-41.1c18.4-12.3 40-18.8 62.1-18.8L384 32c34.7 0 62.9 27.6 64 62c14.6 11.7 24 29.7 24 50c0 4.5-.5 8.8-1.3 13c15.4 11.7 25.3 30.2 25.3 51c0 6.5-1 12.8-2.8 18.7C504.8 238.3 512 254.3 512 272c0 35.3-28.6 64-64 64l-92.3 0c4.7 10.4 8.7 21.2 11.8 32.2l5.7 20c10.9 38.2-11.2 78.1-49.4 89zM32 384c-17.7 0-32-14.3-32-32L0 128c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0z" + ] + [] + ] + } diff --git a/packages/website/frontend/src/Config/Style/Icons/Types.elm b/packages/website/frontend/src/Config/Style/Icons/Types.elm new file mode 100755 index 0000000..78633a7 --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Icons/Types.elm @@ -0,0 +1,28 @@ +module Config.Style.Icons.Types exposing + ( InnerPart + , OuterPart + ) + +{-| The types used for SVG management. +-} + +import Element exposing (Attribute) +import Shared exposing (Model) +import Svg exposing (svg) + + +{-| The outer record for the SVG builder. This is explained in ../Helpers/Svg.elm. +-} +type alias OuterPart msg = + { elementAttributes : List (Element.Attribute msg) + , sharedModel : Shared.Model + , svgAttributes : List (Svg.Attribute msg) + } + + +{-| The inner record for the SVG builder. This is explained in ../Helpers/Svg.elm. +-} +type alias InnerPart msg = + { svgAttributes : List (Svg.Attribute msg) + , svg : List (Svg.Svg msg) + } diff --git a/packages/website/frontend/src/Config/Style/Images.elm b/packages/website/frontend/src/Config/Style/Images.elm new file mode 100755 index 0000000..530669f --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Images.elm @@ -0,0 +1,95 @@ +module Config.Style.Images exposing + ( ElementSize(..) + , imageSizer + , imageSquareMaker + , roundingScaler + ) + +import Config.Data.ImageFolders + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + , getThemeColor + ) +import Element as E + exposing + ( Device + , Element + , Length + , clip + , fill + , height + , image + , px + , rgb255 + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , width + ) + + +imageSquareMaker : Device -> String -> Bool -> ElementSize -> Element msg +imageSquareMaker device imagePath isLeft size = + E.image + [ D.rounded (roundingScaler size) + , clip + , E.width <| imageSizer size + , E.height <| imageSizer size + , if imagePath == imagePathMaker Donate "cardano" then + B.color (rgb255 4 20 108) + + else + B.color (getThemeColor BackgroundLightGrey) + ] + { src = imagePath + , description = "" + } + + +imageSizer : ElementSize -> Length +imageSizer size = + case size of + Fill -> + fill + + Big -> + px 128 + + Medium -> + px 65 + + Small -> + px 20 + + +roundingScaler : ElementSize -> Int +roundingScaler size = + case size of + Fill -> + 32 + + Big -> + 32 + + Medium -> + 10 + + Small -> + 10 + + +type ElementSize + = Fill + | Big + | Medium + | Small diff --git a/packages/website/frontend/src/Config/Style/Transitions.elm b/packages/website/frontend/src/Config/Style/Transitions.elm new file mode 100755 index 0000000..9d11432 --- /dev/null +++ b/packages/website/frontend/src/Config/Style/Transitions.elm @@ -0,0 +1,69 @@ +module Config.Style.Transitions exposing (..) + +import Config.Style.Colour.Helpers exposing (colourTheme) +import Config.Style.Glow + exposing + ( glowDeepDarkGrey + , glowDeepDarkOrange + ) +import Element + exposing + ( Attribute + , htmlAttribute + , mouseOver + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (color) +import Element.Font as F exposing (color) +import Html.Attributes as H exposing (style) + + +transitionStyleSlow : Attribute msg +transitionStyleSlow = + htmlAttribute <| style "transition" "all 0.4s ease-in-out" + + +transitionStyleMedium : Attribute msg +transitionStyleMedium = + htmlAttribute <| style "transition" "all 0.2s ease-in-out" + + +transitionStyleFast : Attribute msg +transitionStyleFast = + htmlAttribute <| style "transition" "all 0.1s ease-in-out" + + +specialNavbarTransition : Attribute msg +specialNavbarTransition = + htmlAttribute <| style "transition" "opacity .4s" + + + +-- This special transition is needed to avoid weird animation sequencing rather in Chrome-based browsers. + + +hoverFontLightOrange : Attribute msg +hoverFontLightOrange = + mouseOver [ F.color colourTheme.textLightOrange ] + + +hoverFontDarkOrange : Attribute msg +hoverFontDarkOrange = + mouseOver [ F.color colourTheme.textDarkOrange ] + + +hoverCircleButtonDarkOrange : Attribute msg +hoverCircleButtonDarkOrange = + mouseOver + [ D.color colourTheme.textDarkOrange + , B.color colourTheme.textDarkOrange + , glowDeepDarkOrange + ] + + +hoverPageButtonDeepDarkOrange : Attribute msg +hoverPageButtonDeepDarkOrange = + mouseOver + [ B.color colourTheme.textDeepDarkOrange + , F.color colourTheme.textLightOrange + ] diff --git a/packages/website/frontend/src/Disabled/Gibberish.elm b/packages/website/frontend/src/Disabled/Gibberish.elm new file mode 100755 index 0000000..8044c20 --- /dev/null +++ b/packages/website/frontend/src/Disabled/Gibberish.elm @@ -0,0 +1,330 @@ +module Pages.Debate.Gibberish exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M exposing (ImageFolder(..), imagePathMaker) +import Config.Helpers.Cards.Inner.StrengthBar + exposing + ( barMaker + , barPadding + ) +import Config.Helpers.Cards.Inner.Text exposing (detailBodyMaker, detailFormat, detailTitleMaker, listMaker, listMaker2, numberedListItem) +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (toTitleCase) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (gibberishHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Debate.Arguments.Types exposing (Argument) +import Config.Pages.Debate.Gibberish.List exposing (gibberishList) +import Config.Pages.Debate.Gibberish.Records.Epistemology exposing (epistemologyGibberish) +import Config.Pages.Debate.Gibberish.Records.Metaphysics exposing (metaphysicsGibberish) +import Config.Pages.Debate.Gibberish.Records.Normativity exposing (normativityGibberish) +import Config.Pages.Debate.Gibberish.Records.Ontology exposing (ontologyGibberish) +import Config.Pages.Debate.Gibberish.Records.PhilOfLanguage exposing (philOfLanguageGibberish) +import Config.Pages.Debate.Gibberish.Records.PhilOfMind exposing (philOfMindGibberish) +import Config.Pages.Debate.Gibberish.Records.Theology exposing (theologyGibberish) +import Config.Pages.Debate.Gibberish.Types + exposing + ( Explanation(..) + , Gibberish + , Terms + ) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Fonts + exposing + ( defaultFontSize + , paragraphSpacing + ) +import Config.Style.Images exposing (ElementSize(..), imageSquareMaker) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignTop + , centerX + , column + , el + , fill + , height + , none + , paddingEach + , paragraph + , row + , spacing + , text + , width + ) +import Element.Font as F + exposing + ( alignLeft + , bold + , center + , color + , regular + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.batch + [ Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + , Effect.none + ] + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "debate (" ++ pageNames.pageGibberish ++ ")" + , attributes = [] + , element = gibberishContainer shared + } + + +gibberishContainer : Shared.Model -> Element msg +gibberishContainer shared = + topLevelContainer (gibberishList shared) + + +gibberishList : Shared.Model -> Element msg +gibberishList shared = + column + (case ( shared.device.class, shared.device.orientation ) of + _ -> + pageList shared.device + ) + <| + List.concat + [ [ headerMaker (R.Gibberish gibberishHeader) ] + , List.map + (\gibberish -> + cardMaker shared.device (C.Gibberish gibberish) (contentList shared gibberish) + ) + [ epistemologyGibberish + , theologyGibberish + , metaphysicsGibberish + , normativityGibberish + , ontologyGibberish + , philOfMindGibberish + , philOfLanguageGibberish + ] + ] + + +contentList : Shared.Model -> Gibberish -> List (Element msg) +contentList shared gibberish = + let + image : ElementSize -> Element msg + image size = + el + [ E.alignLeft + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker shared.device (imagePathMaker M.Gibberish gibberish.gibberishImage) True size + in + [ detailFormat paragraph + [ case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Medium + , detailBodyMaker TextLightGrey (text gibberish.gibberishDescription) + ] + , gibberishMakerBody shared gibberish + ] + + +gibberishMakerBody : Shared.Model -> Gibberish -> Element msg +gibberishMakerBody shared gibberish = + detailFormat column + [ listMaker2 (makeTerms shared) gibberish.gibberishTerms + ] + + +makeTerms : Shared.Model -> Terms -> Int -> Element msg +makeTerms shared terms index = + detailFormat column + [ detailFormat row + [ detailTitleMaker TextLightGrey + (String.fromInt index ++ ". ") + , el + [ alignLeft + , F.alignLeft + , F.bold + , F.color (getThemeColor TextLightOrange) + , width fill + ] + <| + text + ("\"" ++ String.toLower terms.term ++ "\"") + ] + , detailFormat column + [ intelligibilityMaker shared terms + , detailBodyMaker TextLightGrey <| + text + (case terms.explanation of + NoClue -> + "I have no fucking clue what this means." + + SpecificExplanation str -> + str + ) + ] + ] + + +intelligibilityMaker : Shared.Model -> Terms -> Element msg +intelligibilityMaker shared terms = + detailFormat row + [ el + (case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + if not shared.isNavbarExpanded then + [ tooltip IsLeft + "This represents my confidence that the term can be understood from at least one viewpoint." + ] + + else + [] + ) + <| + detailTitleMaker TextLightGrey "Intelligibility:" + , barPadding + [ barMaker shared getIntelligibilityTooltip terms.strength ] + ] + + +getIntelligibilityTooltip : Int -> String +getIntelligibilityTooltip num = + case num of + 0 -> + "Total fucking gibberish." + + 1 -> + "Extremely unclear, speaking in tongues." + + 2 -> + "Mostly unclear, hard to make any sense of." + + 3 -> + "Somewhat unclear, difficult to understand." + + 4 -> + "Slightly unclear, understandable with effort." + + 5 -> + "Neutral, not sure what to make of it." + + 6 -> + "Slightly clear, with unanswered questions." + + 7 -> + "Somewhat clear, kinda get the idea." + + 8 -> + "Very clear, usefulness questionable." + + 9 -> + "Extremely clear, usefulness dubious." + + 10 -> + "Perfectly clear, but also useless." + + _ -> + "Intelligibility rating is out of bounds." diff --git a/packages/website/frontend/src/Effect.elm b/packages/website/frontend/src/Effect.elm new file mode 100755 index 0000000..9ac5de8 --- /dev/null +++ b/packages/website/frontend/src/Effect.elm @@ -0,0 +1,263 @@ +module Effect exposing + ( Effect + , none, batch + , sendCmd, sendMsg + , clearUser, saveUser, signIn, signOut, toggleLanguage, toggleNavbarExpansion + , pushRoute, replaceRoute, loadExternalUrl + , map, toCmd + , togglePopUp + ) + +{-| + +@docs Effect +@docs none, batch +@docs sendCmd, sendMsg +@docs clearUser, saveUser, signIn, signOut, toggleLanguage, toggleNavbarExpansion +@docs pushRoute, replaceRoute, loadExternalUrl + +@docs map, toCmd + +-} + +import Browser.Navigation +import Dict exposing (Dict) +import Json.Encode +import Ports +import Route exposing (Route) +import Route.Path +import Shared.Model +import Shared.Msg +import Task +import Url exposing (Url) + + +type Effect msg + = -- BASICS + None + | Batch (List (Effect msg)) + | SendCmd (Cmd msg) + -- ROUTING + | PushUrl String + | ReplaceUrl String + | LoadExternalUrl String + -- SHARED + | SendSharedMsg Shared.Msg.Msg + | SendToLocalStorage { key : String, value : Json.Encode.Value } + + + +-- BASICS + + +{-| Don't send any effect. +-} +none : Effect msg +none = + None + + +{-| Send multiple effects at once. +-} +batch : List (Effect msg) -> Effect msg +batch = + Batch + + +{-| Send a normal `Cmd msg` as an effect, something like `Http.get` or `Random.generate`. +-} +sendCmd : Cmd msg -> Effect msg +sendCmd = + SendCmd + + +{-| Send a message as an effect. Useful when emitting events from UI components. +-} +sendMsg : msg -> Effect msg +sendMsg msg = + Task.succeed msg + |> Task.perform identity + |> SendCmd + + + +-- ROUTING + + +{-| Set the new route, and make the back button go back to the current route. +-} +pushRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Effect msg +pushRoute route = + PushUrl (Route.toString route) + + +{-| Set given path as route (without any query params or hash), and make the back button go back to the current route. +-} +pushPath : + Route.Path.Path + -> Effect msg +pushPath path = + PushUrl (Route.toString { path = path, query = Dict.empty, hash = Nothing }) + + +{-| Set the new route, but replace the previous one, so clicking the back +button **won't** go back to the previous route. +-} +replaceRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Effect msg +replaceRoute route = + ReplaceUrl (Route.toString route) + + +{-| Set given path as route (without any query params or hash), but replace the previous route, +so clicking the back button **won't** go back to the previous route +-} +replacePath : + Route.Path.Path + -> Effect msg +replacePath path = + ReplaceUrl (Route.toString { path = path, query = Dict.empty, hash = Nothing }) + + +{-| Redirect users to a new URL, somewhere external your web application. +-} +loadExternalUrl : String -> Effect msg +loadExternalUrl = + LoadExternalUrl + + + +-- INTERNALS + + +{-| Elm Land depends on this function to connect pages and layouts +together into the overall app. +-} +map : (msg1 -> msg2) -> Effect msg1 -> Effect msg2 +map fn effect = + case effect of + None -> + None + + Batch list -> + Batch (List.map (map fn) list) + + SendCmd cmd -> + SendCmd (Cmd.map fn cmd) + + PushUrl url -> + PushUrl url + + ReplaceUrl url -> + ReplaceUrl url + + LoadExternalUrl url -> + LoadExternalUrl url + + SendSharedMsg sharedMsg -> + SendSharedMsg sharedMsg + + SendToLocalStorage value -> + SendToLocalStorage value + + +{-| Elm Land depends on this function to perform your effects. +-} +toCmd : + { key : Browser.Navigation.Key + , url : Url + , shared : Shared.Model.Model + , fromSharedMsg : Shared.Msg.Msg -> msg + , batch : List msg -> msg + , toCmd : msg -> Cmd msg + } + -> Effect msg + -> Cmd msg +toCmd options effect = + case effect of + None -> + Cmd.none + + Batch list -> + Cmd.batch (List.map (toCmd options) list) + + SendCmd cmd -> + cmd + + PushUrl url -> + Browser.Navigation.pushUrl options.key url + + ReplaceUrl url -> + Browser.Navigation.replaceUrl options.key url + + LoadExternalUrl url -> + Browser.Navigation.load url + + SendSharedMsg sharedMsg -> + Task.succeed sharedMsg + |> Task.perform options.fromSharedMsg + + SendToLocalStorage value -> + Ports.sendToLocalStorage value + + +toggleNavbarExpansion : Effect msg +toggleNavbarExpansion = + SendSharedMsg Shared.Msg.ToggleNavbarExpansion + + +togglePopUp : Effect msg +togglePopUp = + SendSharedMsg Shared.Msg.TogglePopUp + + +toggleLanguage : Effect msg +toggleLanguage = + SendSharedMsg Shared.Msg.ToggleLanguage + + +signIn : + { token : String + , name : String + } + -> Effect msg +signIn user = + SendSharedMsg (Shared.Msg.SignIn user) + + +signOut : Effect msg +signOut = + SendSharedMsg Shared.Msg.SignOut + + +saveUser : + { token : String + , name : String + } + -> Effect msg +saveUser user = + SendToLocalStorage + { key = "user" + , value = + Json.Encode.object + [ ( "token", Json.Encode.string user.token ) + , ( "name", Json.Encode.string user.name ) + ] + } + + +clearUser : Effect msg +clearUser = + SendToLocalStorage + { key = "user" + , value = Json.Encode.null + } diff --git a/packages/website/frontend/src/Layouts/Navbar.elm b/packages/website/frontend/src/Layouts/Navbar.elm new file mode 100755 index 0000000..ffde193 --- /dev/null +++ b/packages/website/frontend/src/Layouts/Navbar.elm @@ -0,0 +1,888 @@ +module Layouts.Navbar exposing (Model, Msg, Props, layout) + +import Config.Data.Identity exposing (pageNames) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Config.Style.Fonts + exposing + ( defaultFontSize + , paragraphSpacing + , spartanFont + ) +import Config.Style.Glow exposing (glowDeepDarkGreyNavbar) +import Config.Style.Icons.Icons + exposing + ( circleDots + , circleX + , contact + , debate + , discord + , donate + , gitlab + , home + , hyperBlog + , interviews + , journal + , leaving + , line + , lock + , mastodon + , nutriDex + , services + , source + , twitter + , upRootLarge + , upRootMedium + , upRootSmall + , video + ) +import Config.Style.Icons.Types as TySvg exposing (..) +import Config.Style.Transitions + exposing + ( hoverFontLightOrange + , specialNavbarTransition + , transitionStyleFast + , transitionStyleMedium + , transitionStyleSlow + ) +import Effect exposing (Effect) +import Element as E exposing (..) +import Element.Background as B +import Element.Border as D +import Element.Events as Events +import Element.Font as F +import Element.Region exposing (description) +import Html exposing (Html) +import Html.Attributes as H + exposing + ( class + , style + ) +import Layout exposing (Layout) +import Maybe.Extra +import Route exposing (Route) +import Route.Path as Path +import Shared +import Shared.Msg +import Svg.Attributes as SvgAttr +import View exposing (View) + + +type alias Props = + {} + + +layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg +layout _ s r = + Layout.new + { init = init s + , update = update + , view = view r s + , subscriptions = \_ -> Sub.none + } + + + +-- MODEL + + +type alias Model = + { isNavbarExpanded : Bool } + + +init : Shared.Model -> () -> ( Model, Effect.Effect Msg ) +init shared _ = + ( { isNavbarExpanded = shared.isNavbarExpanded } + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = ReplaceMe + | ToggleNavbarExpansion + | ToggleLanguage + + +update : Msg -> Model -> ( Model, Effect.Effect Msg ) +update msg model = + case msg of + ReplaceMe -> + ( model + , Effect.none + ) + + ToggleLanguage -> + ( model + , Effect.toggleLanguage + ) + + ToggleNavbarExpansion -> + ( { model | isNavbarExpanded = not model.isNavbarExpanded } + , Effect.toggleNavbarExpansion + ) + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Route () -> Shared.Model -> { toContentMsg : Msg -> contentMsg, content : View.View contentMsg, model : Model } -> View.View contentMsg +view route shared { toContentMsg, content, model } = + { title = "uRN :: " ++ content.title + , attributes = + [ B.color colourTheme.backgroundDarkGrey + , F.color colourTheme.textLightGrey + , F.family [ spartanFont ] + , height fill + ] + , element = + navbarContainer + { route = route + , sharedModel = shared + , model = model + , contentMessage = toContentMsg ToggleNavbarExpansion + , languageSelectorMessage = toContentMsg ToggleLanguage + , content = content + } + (case shared.device.class of + Phone -> + topbar + + Tablet -> + topbar + + _ -> + sidebar + ) + } + + +languageSelector : contentMsg -> Element contentMsg +languageSelector m = + el + [ alignRight + , Events.onClick m + ] + <| + none + + +navbarContainer : NavbarInput contentMsg -> NavbarMaker contentMsg -> Element contentMsg +navbarContainer input maker = + el + [ height fill + , inFront <| maker input + , inFront <| languageSelector input.languageSelectorMessage + , paddingEach <| + (\( top, left ) -> + { top = top + , right = 0 + , bottom = 0 + , left = left + } + ) + (case input.sharedModel.device.class of + Phone -> + ( barReservedRegion.topbar, 0 ) + + Tablet -> + ( barReservedRegion.topbar, 0 ) + + _ -> + ( 0, barReservedRegion.sidebar ) + ) + , width fill + ] + <| + el + [ height fill + , width fill + , scrollbarY + , E.htmlAttribute (H.id "scroll-container") + ] + input.content.element + + +barReservedRegion : { sidebar : number, topbar : number } +barReservedRegion = + { sidebar = 70 + , topbar = 60 + } + + +bar : NavbarInput contentMsg -> NavbarLogoMaker contentMsg -> List (Attribute contentMsg) -> Element contentMsg +bar input logo attr = + column + ([ B.color colourTheme.backgroundDarkGrey + , transitionStyleMedium + ] + ++ attr + ) + <| + [ logo input + , items input + , footerItems input + ] + + +topbar : NavbarInput contentMsg -> Element contentMsg +topbar input = + bar input + topbarLogo + [ height <| + px <| + if input.model.isNavbarExpanded then + input.sharedModel.height + + else + barReservedRegion.topbar + , width fill + , D.widthEach + { bottom = 1 + , top = 0 + , left = 0 + , right = 0 + } + , D.color colourTheme.textDarkOrange + ] + + +topbarLogo : NavbarInput contentMsg -> Element contentMsg +topbarLogo input = + let + svgFormat = + { elementAttributes = + [ centerX + , centerY + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + in + row + ([ height <| px barReservedRegion.topbar + , transitionStyleMedium + , width fill + ] + ++ (if input.model.isNavbarExpanded then + [ B.color colourTheme.backgroundDarkGrey ] + + else + [] + ) + ) + <| + [ link + [ pointer ] + { url = Path.toString Path.Home_ + , label = + el [ paddingXY 10 0, width <| px 250 ] <| html upRootLarge + } + , el + [ height <| px 50 + , width <| px 40 + , alignRight + , centerY + , moveUp 5 + ] + <| + -- (if input.model.isNavbarExpanded then + column [ centerY ] + [ line + (if input.model.isNavbarExpanded then + { elementAttributes = + [ centerX + , centerY + , moveDown 13 + , rotate (degrees 45) + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + + else + { elementAttributes = + [ centerX + , centerY + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + ) + , line + (if input.model.isNavbarExpanded then + { elementAttributes = + [ centerX + , centerY + , moveUp 22 + , transparent True + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + + else + { elementAttributes = + [ centerX + , centerY + , moveUp 22 + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + ) + , line + (if input.model.isNavbarExpanded then + { elementAttributes = + [ centerX + , centerY + , rotate (degrees -45) + , moveUp 56 + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + + else + { elementAttributes = + [ centerX + , centerY + , moveUp 44 + , Events.onClick input.contentMessage + , transitionStyleSlow + ] + , sharedModel = input.sharedModel + , svgAttributes = [ SvgAttr.width "30" ] + } + ) + ] + ] + + +sidebar : NavbarInput contentMsg -> Element contentMsg +sidebar input = + bar input + sidebarLogo + [ Events.onMouseEnter <| input.contentMessage + , Events.onMouseLeave <| input.contentMessage + , height fill + , htmlAttribute <| style "overflow" "hidden" + , htmlAttribute <| style "z-index" "2" + , D.widthEach + { bottom = 0 + , top = 0 + , left = 0 + , right = 3 + } + , glowDeepDarkGreyNavbar + , D.color colourTheme.textDarkOrange + , if input.model.isNavbarExpanded then + width <| px 225 + + else + width <| px barReservedRegion.sidebar + ] + + +sidebarLogo : NavbarInput contentMsg -> Element contentMsg +sidebarLogo input = + let + logo : Element msg + logo = + el + [ width <| px 40 + , transitionStyleMedium + , if input.model.isNavbarExpanded then + htmlAttribute (style "transform" "rotate(360deg)") + + else + htmlAttribute (style "transform" "rotate(0deg)") + ] + <| + html upRootSmall + + text : Element msg + text = + el + ([ centerY + , transitionStyleMedium + , width <| px 145 + ] + ++ (if input.model.isNavbarExpanded then + [] + + else + [ transparent True ] + ) + ) + <| + html upRootLarge + in + el + [ transitionStyleMedium + , height <| px 60 + , width fill + ] + <| + el + [ alignRight + , centerY + ] + <| + el + [ transitionStyleMedium + , onLeft text + , paddingEach + { top = 0 + , right = 12 + , bottom = 0 + , left = 12 + } + , width fill + ] + logo + + +items : NavbarInput contentMsg -> Element contentMsg +items input = + let + navbarUnfucker : List (Attr () msg) + navbarUnfucker = + [ transparent True + , htmlAttribute (style "position" "absolute") + , htmlAttribute (style "z-index" "-10") + , htmlAttribute (style "opacity" "0") + , htmlAttribute (style "pointer-events" "none") + , htmlAttribute (style "visibility" "hidden") + ] + in + column + [ height fill + , width fill + ] + <| + List.map + (\x -> + el + ([ width fill + , transitionStyleMedium + ] + ++ (if input.model.isNavbarExpanded then + case input.sharedModel.device.class of + _ -> + [ transparent False ] + + else + case input.sharedModel.device.class of + Phone -> + navbarUnfucker + + Tablet -> + navbarUnfucker + + _ -> + [ transparent False ] + ) + ) + <| + makeItem input + { icon = x.icon + , isCurrent = x.isCurrent + , isNewTabLink = x.isNewTabLink + , isSubscriberOnly = x.isSubscriberOnly + , name = x.name + , sharedModel = input.sharedModel + , url = x.url + } + ) + [ { icon = home + , isCurrent = input.route.path == Path.Home_ + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageHome + , url = Path.toString Path.Home_ + } + , { icon = services + , isCurrent = input.route.path == Path.Services + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageServices + , url = Path.toString Path.Services + } + , { icon = hyperBlog + , isCurrent = input.route.path == Path.Blog + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageHyperBlog + , url = Path.toString Path.Blog + } + + -- , { icon = journal + -- , isCurrent = input.route.path == Path.Journal + -- , isNewTabLink = False + -- , isSubscriberOnly = False + -- , name = String.toUpper pageNames.pageJournal + -- , url = Path.toString Path.Journal + -- } + , { icon = video + , isCurrent = False + , isNewTabLink = True + , isSubscriberOnly = False + , name = String.toUpper "Video" + , url = "https://www.youtube.com/@upRootNutrition" + } + , { icon = source + , isCurrent = False + , isNewTabLink = True + , isSubscriberOnly = False + , name = String.toUpper "Source" + , url = "https://source.uprootnutrition.com/upRootNutrition/website" + } + , { icon = debate + , isCurrent = input.route.path == Path.Debate + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageDebate + , url = Path.toString Path.Debate + } + , { icon = nutriDex + , isCurrent = input.route.path == Path.Nutridex + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageNutriDex + , url = Path.toString Path.Nutridex + } + , { icon = interviews + , isCurrent = input.route.path == Path.Interviews + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageInterviews + , url = Path.toString Path.Interviews + } + , { icon = donate + , isCurrent = input.route.path == Path.Donate + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageDonate + , url = Path.toString Path.Donate + } + , { icon = contact + , isCurrent = input.route.path == Path.Contact + , isNewTabLink = False + , isSubscriberOnly = False + , name = String.toUpper pageNames.pageContact + , url = Path.toString Path.Contact + } + ] + + +makeItemLogic : NavbarInput contentMsg -> RowInput contentMsg -> Element contentMsg +makeItemLogic input route = + if input.model.isNavbarExpanded then + case input.sharedModel.device.class of + _ -> + makeItem input route + + else + case input.sharedModel.device.class of + Phone -> + el [] none + + Tablet -> + el [] none + + _ -> + makeItem input route + + +makeItem : NavbarInput contentMsg -> RowInput contentMsg -> Element contentMsg +makeItem input route = + (if route.isNewTabLink then + newTabLink + + else + link + ) + [ width fill ] + { label = + row + ([ mouseOver + (if route.isCurrent then + [] + + else + [ B.color colourTheme.backgroundLightGrey + , F.color colourTheme.textLightOrange + ] + ) + , paddingEach + { top = 0 + , right = 0 + , bottom = 0 + , left = 23 + } + , spacing 12 + , transitionStyleMedium + , width fill + ] + ++ (if route.isCurrent then + [ B.color colourTheme.backgroundDeepDarkGrey + , F.color colourTheme.textLightOrange + , transitionStyleMedium + ] + + else + [] + ) + ++ (case input.sharedModel.device.class of + Phone -> + [ Events.onClick input.contentMessage ] + + Tablet -> + [ Events.onClick input.contentMessage ] + + _ -> + [] + ) + ) + [ itemIcon input route + , itemText input route + , case route.isNewTabLink of + True -> + itemLeavingIcon input route + + False -> + none + ] + , url = route.url + } + + +itemIcon : NavbarInput contentMsg -> RowInput contentMsg -> Element contentMsg +itemIcon input route = + el + ([ height <| px 50 + , width <| px 20 + ] + ++ (if Maybe.Extra.isNothing route.sharedModel.user && route.isSubscriberOnly then + [ inFront <| + lock + { elementAttributes = + [ moveDown 19 + , moveLeft 20 + , F.color colourTheme.barRed + ] + , sharedModel = route.sharedModel + , svgAttributes = [ SvgAttr.width "12" ] + } + ] + + else + [] + ) + ) + <| + route.icon + { elementAttributes = + [ centerX + , centerY + ] + , sharedModel = route.sharedModel + , svgAttributes = + [ SvgAttr.width "30" ] + } + + +itemLeavingIcon : NavbarInput contentMsg -> RowInput contentMsg -> Element contentMsg +itemLeavingIcon input route = + el + [ height <| px 50 + , width <| px 20 + , E.alignRight + , paddingXY 10 0 + ] + <| + leaving + { elementAttributes = + [ E.alignRight + , E.alignTop + , centerY + ] + , sharedModel = route.sharedModel + , svgAttributes = + [ SvgAttr.width "15" ] + } + + +itemText : NavbarInput contentMsg -> RowInput contentMsg -> Element contentMsg +itemText input route = + el + [ specialNavbarTransition -- This special transition is needed to avoid weird animation sequencing rather in Chrome-based browsers. + , if input.model.isNavbarExpanded then + transparent False + + else + transparent True + , F.bold + , paddingEach + { top = 6 + , right = 0 + , bottom = 3 + , left = 0 + } + ] + <| + text route.name + + +footerItems : NavbarInput contentMsg -> Element contentMsg +footerItems input = + row + ([ scrollbarY + , height <| px 50 + , transitionStyleMedium + , centerX + , width <| px 223 + ] + ++ (if input.model.isNavbarExpanded then + [] + + else + [ transparent True ] + ) + ) + <| + List.map + (\x -> + makeFooterIcon input + { icon = x.icon + , isNewTabLink = x.isNewTabLink + , url = x.url + , sharedModel = input.sharedModel + } + ) + [ { icon = twitter + , isNewTabLink = True + , url = "https://x.com/upRootNutrition" + } + , { icon = mastodon + , isNewTabLink = True + , url = "https://social.uprootnutrition.com/@nick" + } + , { icon = discord + , isNewTabLink = True + , url = "https://discord.gg/eeYQ2wJknS" + } + ] + + +footerIcon : FooterInput contentMsg -> Element contentMsg +footerIcon route = + el + [ height <| px 50 + , width <| px 20 + , alignBottom + ] + <| + route.icon + { elementAttributes = + [ centerX + , centerY + ] + , sharedModel = route.sharedModel + , svgAttributes = + [ SvgAttr.width "20" ] + } + + +makeFooterIcon : NavbarInput contentMsg -> FooterInput contentMsg -> Element contentMsg +makeFooterIcon input route = + row [ centerX ] + [ (if route.isNewTabLink then + newTabLink + + else + link + ) + [ width fill ] + { label = + row + [ mouseOver + [ F.color colourTheme.textLightOrange + ] + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 10 + } + , transitionStyleMedium + , width fill + , F.color colourTheme.textLightGrey + ] + [ footerIcon route + ] + , url = route.url + } + ] + + + +-- Types: + + +type alias NavbarInput contentMsg = + { route : Route () + , sharedModel : Shared.Model + , model : Model + , contentMessage : contentMsg + , languageSelectorMessage : contentMsg + , content : View.View contentMsg + } + + +type alias NavbarMaker contentMsg = + NavbarInput contentMsg -> Element contentMsg + + +type alias NavbarLogoMaker contentMsg = + NavbarMaker contentMsg + + +type alias RowInput msg = + { icon : TySvg.OuterPart msg -> Element msg + , isCurrent : Bool + , isNewTabLink : Bool + , isSubscriberOnly : Bool + , name : String + , url : String + , sharedModel : Shared.Model + } + + +type alias FooterInput msg = + { icon : TySvg.OuterPart msg -> Element msg + , isNewTabLink : Bool + , url : String + , sharedModel : Shared.Model + } diff --git a/packages/website/frontend/src/Pages/Blog.elm b/packages/website/frontend/src/Pages/Blog.elm new file mode 100755 index 0000000..252d20a --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog.elm @@ -0,0 +1,282 @@ +module Pages.Blog exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Articles.Article exposing (extractFirstWords) +import Config.Helpers.Articles.Markdown exposing (renderDeviceMarkdownNoToc, renderDeviceMarkdownNoTocGeneric) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailTitleMaker + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters + exposing + ( formatName + , wordCount + ) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (blogHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.BigFatSurprise exposing (articleBigFatSurprise) +import Config.Pages.Blogs.MainBlog.EverettVegans exposing (articleEverettVegans) +import Config.Pages.Blogs.MainBlog.FeldwitzFuckery exposing (articleFeldwitzFuckery) +import Config.Pages.Blogs.MainBlog.HunterGatherers exposing (articleHunterGatherers) +import Config.Pages.Blogs.MainBlog.MeatApologetics exposing (articleMeatApologetics) +import Config.Pages.Blogs.MainBlog.NagraGoodrich exposing (articleNagraGoodrich) +import Config.Pages.Blogs.MainBlog.PlantBasedMeta exposing (articlePlantBasedMeta) +import Config.Pages.Blogs.MainBlog.QuackSmashing exposing (articleQuackSmashing) +import Config.Pages.Blogs.MainBlog.SapienDiet exposing (articleSapienDiet) +import Config.Pages.Blogs.MainBlog.SeedOils exposing (articleSeedOils) +import Config.Pages.Blogs.MainBlog.Shenangians exposing (articleShenanigans) +import Config.Pages.Blogs.MainBlog.SweetDeception exposing (articleSweetDeception) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Style.Colour.Helpers as T exposing (ThemeColor(..)) +import Config.Style.Fonts + exposing + ( defaultFontSize + , paragraphSpacing + ) +import Config.Style.Icons.Icons exposing (construction) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignTop + , column + , el + , none + , paddingEach + , px + , row + , text + , width + ) +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Route.Path as Path +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog + , attributes = [] + , element = blogContainer shared.device + } + + +blogContainer : Device -> Element msg +blogContainer device = + topLevelContainer (blogList device) + + +blogList : Device -> Element msg +blogList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ [ headerMaker (R.BlogPage blogHeader) ] + , List.map + (\article -> + cardMaker device (C.BlogCard article) (contentList device article) + ) + [ -- articleFeldwitzFuckery + articleShenanigans + , articleSweetDeception + , articleEverettVegans + , articleQuackSmashing + , articleSapienDiet + , articleNagraGoodrich + , articleMeatApologetics + , articleSeedOils + , articleHunterGatherers + , articlePlantBasedMeta + , articleBigFatSurprise + ] + ] + + +contentList : Device -> BlogArticle -> List (Element msg) +contentList device article = + [ articleMaker device article ] + + +articleImage : + BlogArticle + -> + { src : String + , description : String + } +articleImage article = + { src = imagePathMaker M.BlogArticle article.articleImage + , description = article.articleName + } + + +articleMaker : Device -> BlogArticle -> Element msg +articleMaker device article = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , alignTop + , paddingEach + { top = 0 + , right = 10 + , bottom = 7 + , left = 0 + } + ] + <| + imageSquareMaker device (imagePathMaker M.BlogCard article.articleImage) True size + in + detailFormat column + [ detailFormat row + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + (articleRows article ++ []) + ] + , el [] <| + detailBodyMaker TextLightGrey (renderDeviceMarkdownNoTocGeneric (extractFirstWords article.articleBody)) + ] + + +infoRow : String -> Element msg -> Element msg +infoRow label value = + detailFormat row + [ el [ width <| px 82 ] <| + detailTitleMaker TextLightOrange label + , detailBodyMaker TextLightGrey value + ] + + +articleRows : BlogArticle -> List (Element msg) +articleRows article = + let + referenceCount = + List.length article.articleReferences + in + [ infoRow "Published:" (text article.articlePublished) + , infoRow "Author:" (text article.articleAuthor) + , infoRow "Duration:" + (text + (String.fromInt + (wordCount article.articleBody // 225) + ++ " minutes" + ) + ) + , infoRow "Words" + (text + (String.fromInt + (wordCount article.articleBody) + ) + ) + , infoRow "Sources" + (if referenceCount >= 2 then + text (String.fromInt referenceCount) + + else + text "N/A" + ) + ] diff --git a/packages/website/frontend/src/Pages/Blog/Bigfatsurprise.elm b/packages/website/frontend/src/Pages/Blog/Bigfatsurprise.elm new file mode 100755 index 0000000..00357c6 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Bigfatsurprise.elm @@ -0,0 +1,127 @@ +module Pages.Blog.Bigfatsurprise exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.BigFatSurprise exposing (articleBigFatSurprise) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (bigFatSurprise)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleBigFatSurprise ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Everettvegans.elm b/packages/website/frontend/src/Pages/Blog/Everettvegans.elm new file mode 100755 index 0000000..58b7cb8 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Everettvegans.elm @@ -0,0 +1,127 @@ +module Pages.Blog.Everettvegans exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.EverettVegans exposing (articleEverettVegans) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (everettVegans)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleEverettVegans ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Feldwitzfuckery.elm b/packages/website/frontend/src/Pages/Blog/Feldwitzfuckery.elm new file mode 100755 index 0000000..b933b80 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Feldwitzfuckery.elm @@ -0,0 +1,127 @@ +module Pages.Blog.Feldwitzfuckery exposing (..) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.FeldwitzFuckery exposing (articleFeldwitzFuckery) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (feldwitzFuckery)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleFeldwitzFuckery ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Huntergatherers.elm b/packages/website/frontend/src/Pages/Blog/Huntergatherers.elm new file mode 100755 index 0000000..bd544d0 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Huntergatherers.elm @@ -0,0 +1,128 @@ +module Pages.Blog.Huntergatherers exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.HunterGatherers exposing (articleHunterGatherers) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (hunterGatherers)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleHunterGatherers ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Meatapologetics.elm b/packages/website/frontend/src/Pages/Blog/Meatapologetics.elm new file mode 100755 index 0000000..9262470 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Meatapologetics.elm @@ -0,0 +1,132 @@ +module Pages.Blog.Meatapologetics exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.MeatApologetics exposing (articleMeatApologetics) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (meatApologetics)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleMeatApologetics ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Nagragoodrich.elm b/packages/website/frontend/src/Pages/Blog/Nagragoodrich.elm new file mode 100755 index 0000000..e305d48 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Nagragoodrich.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Nagragoodrich exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.NagraGoodrich exposing (articleNagraGoodrich) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (nagraGoodrich)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleNagraGoodrich ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Plantbasedmeta.elm b/packages/website/frontend/src/Pages/Blog/Plantbasedmeta.elm new file mode 100755 index 0000000..7390a69 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Plantbasedmeta.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Plantbasedmeta exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.PlantBasedMeta exposing (articlePlantBasedMeta) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (plantBasedMeta)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articlePlantBasedMeta ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Quacksmashing.elm b/packages/website/frontend/src/Pages/Blog/Quacksmashing.elm new file mode 100755 index 0000000..83d9dea --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Quacksmashing.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Quacksmashing exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.QuackSmashing exposing (articleQuackSmashing) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (quackSmashing)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleQuackSmashing ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Sapiendiet.elm b/packages/website/frontend/src/Pages/Blog/Sapiendiet.elm new file mode 100755 index 0000000..fa43373 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Sapiendiet.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Sapiendiet exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.SapienDiet exposing (articleSapienDiet) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (sapienDiet)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleSapienDiet ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Seedoils.elm b/packages/website/frontend/src/Pages/Blog/Seedoils.elm new file mode 100755 index 0000000..95eabff --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Seedoils.elm @@ -0,0 +1,132 @@ +module Pages.Blog.Seedoils exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.SeedOils exposing (articleSeedOils) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (seedOils)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleSeedOils ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Shenanigans.elm b/packages/website/frontend/src/Pages/Blog/Shenanigans.elm new file mode 100755 index 0000000..59e2de1 --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Shenanigans.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Shenanigans exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.Shenangians exposing (articleShenanigans) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (shenanigans)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleShenanigans ] + ] diff --git a/packages/website/frontend/src/Pages/Blog/Sweetdeception.elm b/packages/website/frontend/src/Pages/Blog/Sweetdeception.elm new file mode 100755 index 0000000..8fc081c --- /dev/null +++ b/packages/website/frontend/src/Pages/Blog/Sweetdeception.elm @@ -0,0 +1,133 @@ +module Pages.Blog.Sweetdeception exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.MainBlog.SweetDeception exposing (articleSweetDeception) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + -- Add this case + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHyperBlog ++ " (sweetDeception)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ -- List.map (headerMaker device) + -- [ + -- servicesHeader + -- ] + -- , + List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleSweetDeception ] + ] diff --git a/packages/website/frontend/src/Pages/Contact.elm b/packages/website/frontend/src/Pages/Contact.elm new file mode 100755 index 0000000..9f41740 --- /dev/null +++ b/packages/website/frontend/src/Pages/Contact.elm @@ -0,0 +1,197 @@ +module Pages.Contact exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , numberedListItem + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (contactHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Contact.Records + exposing + ( contactCriticism + , contactInquiry + ) +import Config.Pages.Contact.Types exposing (Contact) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , column + , el + , none + , paddingEach + , row + , text + ) +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageContact + , attributes = [] + , element = contactContainer shared.device + } + + +contactContainer : Device -> Element msg +contactContainer device = + topLevelContainer (contactList device) + + +contactList : Device -> Element msg +contactList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ [ headerMaker (R.Debate contactHeader) ] + , List.map + (\contact -> + cardMaker device (C.Contact contact) (contentList device contact) + ) + [ contactInquiry + , contactCriticism + ] + ] + + +contentList : Device -> Contact -> List (Element msg) +contentList device contact = + [ descriptionMaker device contact ] + + +descriptionMaker : Device -> Contact -> Element msg +descriptionMaker device contact = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker device (imagePathMaker M.Contact contact.contactImage) True size + in + detailFormat row + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + [ detailBodyMaker TextLightGrey + (text contact.contactDescription) + ] + ] diff --git a/packages/website/frontend/src/Pages/Contact/Criticism.elm b/packages/website/frontend/src/Pages/Contact/Criticism.elm new file mode 100755 index 0000000..ef65d65 --- /dev/null +++ b/packages/website/frontend/src/Pages/Contact/Criticism.elm @@ -0,0 +1,479 @@ +module Pages.Contact.Criticism exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailHeader + , detailTitleMaker + , divider + , numberedListItem + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Contact.Records exposing (contactCriticism) +import Config.Pages.Contact.Types exposing (Contact) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + ) +import Config.Style.Fonts exposing (defaultFontSize) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleFast + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Attr + , Attribute + , Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignRight + , alignTop + , centerX + , column + , el + , fill + , newTabLink + , paddingEach + , paragraph + , px + , row + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (rounded) +import Element.Font as F + exposing + ( alignLeft + , color + ) +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageContact ++ " (criticism)" + , attributes = [] + , element = contactContainer shared.device + } + + +contactContainer : Device -> Element msg +contactContainer device = + topLevelContainer (contactList device) + + +contactList : Device -> Element msg +contactList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\contact -> + cardMaker device (C.ContactPage contact) (contentList device contact) + ) + [ contactCriticism ] + ] + + +contentList : Device -> Contact -> List (Element msg) +contentList device contact = + [ instructionBody device ] + + +instructionBody : Device -> Element msg +instructionBody device = + column + [ spacing 20 + , paddingEach + { top = 10 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "The following terms may seem unreasonable to some, but after years on a large platform, I've learned the importance of filtering the criticisms I receive. Most feedback I receive is just vague gesturing and lacks substance, making some sort of quality filter essential. Thank you for your patience and understanding.") ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "Please keep in mind that any failure to comply with the following terms and conditions will forfeit your access to my time and attention. I ask that you respect my time and read these terms carefully. You are the one requesting an audience with me, and my time is mine to donate as I see fit. If you wish to submit your criticisms, you must do so on my terms, following the rules and conditions that streamline the process for me.") ] + , el + [ centerX + , width fill + ] + <| + detailHeader (String.toUpper "Terms and Conditions") + , column [ spacing 10 ] <| + List.indexedMap + (\index term -> + row + [ spacing 10 + , width fill + ] + [ column + [ width <| px 15 + , alignTop + ] + [ numberedListItem TextLightGrey (index + 1) ] + , el + [ spacing 10 + , width fill + , alignRight + ] + <| + paragraph + [ width fill + , defaultFontSize + , F.alignLeft + ] + term + ] + ) + (termsAndConditions device) + , el [ centerX, width fill ] <| + detailHeader (String.toUpper "Additional Clarifications") + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "You are only allowed to post one criticism at a time in the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/1301247050796634182" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "🔎┃criticism") + } + , detailBodyMaker TextLightGrey (text " channel. You may post an additional criticism only after the previous one has been addressed and resolved to my satisfaction. This policy aims to reduce spamming, rambling, and Gish galloping, and to encourage linear discourse.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey + (text "• ") + , detailBodyMaker TextLightGrey + (text "You may or may not be asked to voice chat about your criticism. While your willingness to engage in voice chat is a necessary condition for submitting your criticism, it does not guarantee that a voice chat will be requested. If your initial criticism is clear and I agree with it, then no voice chat will be required.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "You may or may not be asked to have your criticism formalized. While your willingness to have your criticism formalized is a necessary condition for submitting your criticism, it does not guarantee that a formalization will be requested. If your initial criticism is clear and I agree with it, then no formalization will be required.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "If I find it necessary to access a text-based channel (for simple clarifying questions, for example), then either I or a moderator will open a new thread in the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/1301247050796634182" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "🔎┃criticism") + } + , detailBodyMaker TextLightGrey (text " channel. There we can then engage in a text-based discussion and/or ping other users if needed.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "I will only request that your criticism be formalized if I do not understand it and we have exhausted all other reasonable means of clarification. If formalization is requested, you will not need to do it yourself, as I recognize that not everyone understands formal logic. If formalization is requested and I am unavailable to assist you, you may ping the @Logic role, and another user may help you.") + ] + ] + + +darkFormat : Attr decorative msg +darkFormat = + F.color colourTheme.textDarkGrey + + +orangeFormat : List (Attr () msg) +orangeFormat = + [ F.color colourTheme.textLightOrange + , hoverFontDarkOrange + , transitionStyleFast + ] + + +rounding : Attribute msg +rounding = + D.rounded 10 + + +termsAndConditions : Device -> List (List (Element msg)) +termsAndConditions device = + let + backGroundCase : Attr decorative msg + backGroundCase = + case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + B.color colourTheme.backgroundDarkGrey + + ( Tablet, Portrait ) -> + B.color colourTheme.backgroundDarkGrey + + _ -> + B.color colourTheme.backgroundLightGrey + in + [ [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will register an account with ") + , newTabLink [] + { url = "https://discord.com/login" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "Discord") + } + , detailBodyMaker TextLightGrey (text " (if you haven't already).") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will join the ") + , newTabLink [] + { url = "https://discord.com/invite/VzU8yCvYX8" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "upRootNutrition") + } + , detailBodyMaker TextLightGrey (text " Discord Server (if you haven't already).") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will click the \"😃\" emoji to enter the server (if you haven't already).") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will locate the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/826225570219687956" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "💻┃general") + } + , detailBodyMaker TextLightGrey (text " channel in General category.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ paragraph [ F.alignLeft ] + [ detailBodyMaker TextLightGrey (text "You will post your criticism in the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/826225570219687956" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "💻┃general") + } + , detailBodyMaker TextLightGrey (text " channel with this exact format:") + ] + ] + ] + , column + [ paddingEach + { top = 10 + , bottom = 10 + , left = 0 + , right = 0 + } + , alignLeft + ] + [ paragraph + [ paddingEach + { top = 15 + , bottom = 15 + , left = 20 + , right = 20 + } + , backGroundCase + , rounding + , width fill + , spacing 8 + ] + [ detailBodyMaker TextLightGrey (text "\"@Moderators I have a criticism for Nick.\"") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will then receive the @Critic role.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will locate the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/1301247050796634182" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "🔎┃criticism") + } + , detailBodyMaker TextLightGrey (text " channel in the General category.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ paragraph [ F.alignLeft ] + [ detailBodyMaker TextLightGrey (text "You will post your criticism in the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/1301247050796634182" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "🔎┃criticism") + } + , detailBodyMaker TextLightGrey (text " channel with this exact format:") + ] + ] + ] + , column + [ paddingEach + { top = 10 + , bottom = 10 + , left = 0 + , right = 0 + } + , alignLeft + ] + [ column + [ paddingEach + { top = 15 + , bottom = 15 + , left = 20 + , right = 20 + } + , backGroundCase + , rounding + , width fill + , spacing 8 + ] + [ detailBodyMaker TextLightGrey (text "\"Hello, <@191027366640877568>. I have a criticism for you.") + , row [ alignLeft ] + [ paragraph [] + [ detailBodyMaker TextLightGrey (text "Proposition: ") + , el [ darkFormat ] <| detailBodyMaker TextDarkGrey (text "specify the exact proposition you are addressing.") + ] + ] + , row [ alignLeft ] + [ paragraph [] + [ detailBodyMaker TextLightGrey (text "Link: ") + , el [ darkFormat ] <| detailBodyMaker TextDarkGrey (text "provide a url to the claim, with a timestamp if applicable.") + ] + ] + , row [ alignLeft ] + [ paragraph [] + [ detailBodyMaker TextLightGrey (text "Reason for Error: ") + , el [ darkFormat ] <| detailBodyMaker TextDarkGrey (text "explain exactly why you believe this claim is in error.") + ] + ] + , row [ alignLeft ] + [ paragraph [] + [ detailBodyMaker TextLightGrey (text "Suggested Correction (if any): ") + , el [ darkFormat ] <| detailBodyMaker TextDarkGrey (text "provide the corrected information or perspective.") + ] + ] + , row [ alignLeft ] + [ paragraph [] + [ detailBodyMaker TextLightGrey (text "Additional Comments: ") + , el [ darkFormat ] <| detailBodyMaker TextDarkGrey (text "any other relevant thoughts or context.") + , detailBodyMaker TextLightGrey (text "\"") + ] + ] + ] + ] + ] + , [ row [] + [ detailFormat paragraph <| + [ detailBodyMaker TextLightGrey (text "You will not post additional criticisms until the last one has been resolved.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You will not post anything other than criticisms in the ") + , newTabLink [] + { url = "https://discord.com/channels/692563032546476062/1301247050796634182" + , label = el orangeFormat <| detailBodyMaker TextLightOrange (text "🔎┃criticism") + } + , detailBodyMaker TextLightGrey (text " channel.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You must be willing to converse over voice chat.") + ] + ] + ] + , [ row [] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "You must be willing to have your criticism formalized.") + ] + ] + ] + ] diff --git a/packages/website/frontend/src/Pages/Contact/Inquiry.elm b/packages/website/frontend/src/Pages/Contact/Inquiry.elm new file mode 100755 index 0000000..4097e6e --- /dev/null +++ b/packages/website/frontend/src/Pages/Contact/Inquiry.elm @@ -0,0 +1,166 @@ +module Pages.Contact.Inquiry exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyLink + , detailBodyMaker + , detailFormat + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Contact.Records exposing (contactInquiry) +import Config.Pages.Contact.Types exposing (Contact) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , column + , link + , paddingEach + , paragraph + , spacing + , text + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageContact ++ " (inquiry)" + , attributes = [] + , element = contactContainer shared.device + } + + +contactContainer : Device -> Element msg +contactContainer device = + topLevelContainer (contactList device) + + +contactList : Device -> Element msg +contactList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\contact -> + cardMaker device (C.ContactPage contact) (contentList device contact) + ) + [ contactInquiry ] + ] + + +contentList : Device -> Contact -> List (Element msg) +contentList device contact = + [ instructionBody device ] + + +instructionBody : Device -> Element msg +instructionBody device = + column + [ spacing 20 + , paddingEach + { top = 10 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + [ detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "For any inquiries related to services, debate invitations, or general questions regarding guest appearances, webinars, public speaking engagements, ghostwriting, or co-authorship opportunities, please feel free to contact me at ") + , link + [] + { url = "mailto:" + , label = detailBodyLink TextLightOrange "contact@upRootNutrition.com" + } + , detailBodyMaker TextLightGrey (text ".") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "If you wish to submit a Discord ban appeal, you may do using the provided email address. Please include your user ID and a detailed statement detailing why you believe that you, or someone else, should be unbanned.") ] + ] diff --git a/packages/website/frontend/src/Pages/Debate.elm b/packages/website/frontend/src/Pages/Debate.elm new file mode 100755 index 0000000..ca18f41 --- /dev/null +++ b/packages/website/frontend/src/Pages/Debate.elm @@ -0,0 +1,283 @@ +module Pages.Debate exposing + ( Model + , Msg + , debateArguments + , debateCuckList + -- , debateGibberish + , page + ) + +import Config.Data.Identity + exposing + ( pageNames + ) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyLink + , detailBodyMaker + , detailFormat + , detailSpacing + , detailTitleMaker + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (formatName) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (debateHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Debate.Arguments.List exposing (argumentList) +import Config.Pages.Debate.Cuckery.List exposing (cuckList) +import Config.Pages.Debate.Gibberish.List exposing (gibberishList) +import Config.Pages.Debate.Types exposing (Debate) +import Config.Style.Colour.Helpers as T + exposing + ( ThemeColor(..) + , colourTheme + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , column + , el + , none + , paddingEach + , row + , text + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Route.Path as Path +import Shared exposing (Model) +import Task +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageDebate + , attributes = [] + , element = debateContainer shared.device + } + + +debateContainer : Device -> Element msg +debateContainer device = + topLevelContainer (debateList device) + + +debateList : Device -> Element msg +debateList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ [ headerMaker (R.Debate debateHeader) ] + , List.map + (\debate -> + cardMaker device (C.Debate debate) (contentList device debate) + ) + [ debateArguments + , debateCuckList + + -- , debateGibberish + ] + ] + + +contentList : Device -> Debate -> List (Element msg) +contentList device debate = + [ descriptionMaker device debate ] + + +descriptionMaker : Device -> Debate -> Element msg +descriptionMaker device debate = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker device (imagePathMaker M.Debate debate.debateImage) True size + in + detailFormat row + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + [ inferenceMaker debate + , detailBodyMaker TextLightGrey + (text debate.debateDescription) + ] + ] + + +inferenceMaker : Debate -> Element msg +inferenceMaker debate = + detailFormat row + [ detailTitleMaker TextLightOrange + (case debate.debateTitle of + "Arguments" -> + "Inferences:" + + "Cucklist" -> + "Cucks:" + + "Gibberish" -> + "Gibberations:" + + _ -> + "" + ) + , detailBodyMaker TextLightGrey + (text + (String.fromInt debate.debateCount) + ) + ] + + +debateArguments : Debate +debateArguments = + let + name = + "Arguments" + in + { debateTitle = name + , debateLink = Path.toString Path.Debate_Arguments + , debateCount = List.length argumentList + , debateImage = formatName name + , isNewTabLink = False + , debateDescription = "This page features arguments that I hold to be sound, though with varying degrees of confidence. I'm open to hearing all challenges, as I am ready to engage with any substantive critiques and defend any argument listed. I have additionally included a confidence meter with each argument to give readers a clearer understanding of how strongly I hold to the argument." + } + + +debateCuckList : Debate +debateCuckList = + let + name = + "Cucklist" + in + { debateTitle = name + , debateLink = Path.toString Path.Debate_Cucklist + , debateCount = List.length cuckList + , debateImage = formatName name + , isNewTabLink = False + , debateDescription = "This page features a list of complete fucking morons who wrote cheques with their mouths that their asses ultimately couldn't cash. Each person included in this list has dodged debating me in some way, shape, or form. Whether it's simply ignoring invitations, or outright refusing to engage, or agreeing to debate and then subsequently withdrawing. All such instances are catalogued here." + } + + + +-- if you decide to readd this page, move Gibberish.elm from src/Disabled back to src/Pages/Debate +-- debateGibberish : Debate +-- debateGibberish = +-- let +-- name = +-- "Gibberish" +-- in +-- { debateTitle = name +-- , debateLink = Path.toString Path.Debate_Gibberish +-- , debateCount = List.length gibberishList +-- , debateImage = formatName name +-- , isNewTabLink = False +-- , debateDescription = "This page is specifically for terms and ostensible concepts that I don't have a good reason to believe are understandable from at least one viewpoint. If the clarification of a philosophical term is unsatisfying or unsuccessful, and my interlocutor has exhausted all means of rendering the concept to me, the term ends up here until someone explains to me what the fuck it even means." +-- } diff --git a/packages/website/frontend/src/Pages/Debate/Arguments.elm b/packages/website/frontend/src/Pages/Debate/Arguments.elm new file mode 100755 index 0000000..6e95870 --- /dev/null +++ b/packages/website/frontend/src/Pages/Debate/Arguments.elm @@ -0,0 +1,620 @@ +module Pages.Debate.Arguments exposing (Model, Msg, page) + +import Browser.Events as Events +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.StrengthBar exposing (barMaker) +import Config.Helpers.Cards.Inner.Text + exposing + ( bodyFormat + , detailBodyLink + , detailBodyMaker + , detailFormat + , detailSpacing + , detailTitleMaker + , generalButton + , getHoverColours + ) +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (formatName, toTitleCase) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (argumentHeader) +import Config.Helpers.Headers.Types as R exposing (Headerable(..)) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Debate.Arguments.List + exposing + ( argumentList + ) +import Config.Pages.Debate.Arguments.Types exposing (Argument) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Icons.Icons + exposing + ( code + , copyLink + , thumbsDown + ) +import Config.Style.Icons.Types as TySvg + exposing + ( InnerPart + , OuterPart + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Config.Style.Transitions exposing (transitionStyleSlow) +import Effect exposing (Effect) +import Element as E + exposing + ( Attribute + , Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignRight + , alignTop + , centerX + , centerY + , clip + , column + , el + , fill + , focused + , height + , htmlAttribute + , maximum + , none + , paddingEach + , paddingXY + , paragraph + , rgba + , row + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , shadow + ) +import Element.Font as F + exposing + ( bold + , center + , color + ) +import Element.Input as Input +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Ports +import Process +import Route exposing (Route) +import Route.Path as Path +import Shared +import Svg.Attributes as SvgAttr +import Task +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + { hasBeenCopied : List Bool } + + +init : () -> ( Model, Effect Msg ) +init () = + ( { hasBeenCopied = List.repeat (List.length argumentList) False } + , Effect.batch + [ Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + , Effect.none + ] + ) + + + +-- UPDATE + + +type Msg + = CopyText String Int + | ResetCopyState Int + | NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + let + urlLinkClickUpdate : Int -> Model + urlLinkClickUpdate index = + { model + | hasBeenCopied = + List.take index model.hasBeenCopied + ++ (case List.head (List.drop index model.hasBeenCopied) of + Just isCLicked -> + [ not isCLicked ] + + Nothing -> + [] + -- shouldn't happen + ) + ++ List.drop (index + 1) model.hasBeenCopied + } + in + case msg of + CopyText text index -> + ( urlLinkClickUpdate index + , Effect.batch + [ Effect.sendCmd (Ports.copyToClipboard text) + , Effect.sendCmd (Process.sleep 700 |> Task.perform (\_ -> ResetCopyState index)) + ] + ) + + ResetCopyState index -> + ( urlLinkClickUpdate index + -- wrong lol + , Effect.none + ) + + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "debate (" ++ pageNames.pageArguments ++ ")" + , attributes = [] + , element = debateContainer shared model + } + + +debateContainer : Shared.Model -> Model -> Element Msg +debateContainer shared model = + topLevelContainer (debateList shared model) + + +debateList : Shared.Model -> Model -> Element Msg +debateList shared model = + column + (case ( shared.device.class, shared.device.orientation ) of + _ -> + pageList shared.device + ) + <| + List.concat + [ [ headerMaker (R.Arguments argumentHeader) ] + , List.map3 + (\argument dummy index -> + cardMaker shared.device + (C.Argument argument) + (contentList shared model dummy index argument) + ) + argumentList + model.hasBeenCopied + (List.range 0 (List.length argumentList)) + ] + + +contentList : Shared.Model -> Model -> Bool -> Int -> Argument -> List (Element Msg) +contentList shared model isLinkClicked index argument = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , alignTop + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker shared.device (imagePathMaker M.Argument argument.argumentImage) True size + in + [ row + [ width fill + , paddingEach + { top = + case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + 8 + + ( Tablet, Portrait ) -> + 8 + + _ -> + 0 + , right = 0 + , bottom = 0 + , left = 0 + } + ] + [ detailFormat column + [ detailFormat paragraph + [ case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Medium + , el ([ height fill ] ++ bodyFormat TextLightGrey) <| text argument.propositionSummary + ] + , detailFormat row + [ strengthMaker shared + , barMaker shared getConfidenceTooltip argument.argumentCertainty + ] + ] + ] + , tableMaker shared.device argument + , formalizationMaker shared.device argument + , el [ alignRight ] <| + row [ width fill, spacing 20 ] + [ generalButton shared (Path.toString Path.Contact_Criticism) thumbsDown + , generalButton shared argument.proofLink code + , copyButton shared model isLinkClicked index argument + ] + ] + + +copyButton : Shared.Model -> Model -> Bool -> Int -> Argument -> Element Msg +copyButton shared model isLinkClicked index argument = + Input.button + [ focused + [ D.color (rgba 0 0 0 0) + , D.shadow + { blur = 0 + , color = rgba 0 0 0 0 + , offset = ( 0, 0 ) + , size = 0 + } + ] + ] + { onPress = Just (CopyText ("https://uprootnutrition.com" ++ Path.toString Path.Debate_Arguments ++ "#" ++ formatName argument.argumentImage) index) + , label = + el + (if isLinkClicked then + [ transitionStyleSlow + , tooltip IsRight "Copied!" + , case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + ( Tablet, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + _ -> + B.color (getThemeColor BackgroundDeepDarkGrey) + , paddingXY 7 7 + , D.rounded 10 + , F.color (getThemeColor TextLightOrange) + ] + + else + [ transitionStyleSlow + , B.color (getThemeColor Transparent) + , paddingXY 7 7 + , D.rounded 10 + , F.color (getThemeColor TextLightOrange) + ] + ++ getHoverColours TextLightOrange + ) + <| + copyLink + { elementAttributes = + [] + , sharedModel = shared + , svgAttributes = [ SvgAttr.width "20" ] + } + } + + +strengthMaker : Shared.Model -> Element msg +strengthMaker shared = + el + (case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + if not shared.isNavbarExpanded then + [ tooltip IsLeft + "This represents how dope I think the inference/reductio is." + ] + + else + [] + ) + <| + detailTitleMaker TextLightOrange "Banger Rating:" + + +getConfidenceTooltip : Int -> String +getConfidenceTooltip num = + case num of + 0 -> + "Extremely low. Highly speculative." + + 1 -> + "Very low. Almost entirely uncertain." + + 2 -> + "Low. Highly uncertain." + + 3 -> + "Kinda low. More uncertain than not." + + 4 -> + "Below average. Some significant doubts." + + 5 -> + "Moderate. Equal mix of certainty and doubt." + + 6 -> + "Above average. More certain than not." + + 7 -> + "Kinda high. Fairly confident." + + 8 -> + "High. Strongly confident." + + 9 -> + "Very high. Almost entirely certain." + + 10 -> + "Extremely high. Completely certain." + + _ -> + "Confidence level out of expected range." + + +tableMaker : Device -> Argument -> Element msg +tableMaker device argument = + let + cellPadding : Attribute msg + cellPadding = + paddingXY 10 5 + in + column + [ centerX + , E.width fill + ] + [ el + [ E.width fill + , htmlAttribute <| H.style "position" "relative" + ] + <| + E.table + ([ D.rounded 10 + , D.width 2 + , D.color (getThemeColor TextDarkGrey) + , clip + ] + ++ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [ B.color (getThemeColor BackgroundSpreadsheet) ] + + ( Tablet, Portrait ) -> + [ B.color (getThemeColor BackgroundSpreadsheet) ] + + _ -> + [] + ) + ) + { data = argument.definitionTable + , columns = + [ { header = + el + [ F.bold + , D.widthEach + { bottom = 1 + , top = 1 + , left = 1 + , right = 1 + } + , D.color (getThemeColor TextDarkGrey) + , cellPadding + , E.width fill + ] + <| + detailTitleMaker + TextLightOrange + "Definiendum" + , width = fill |> maximum 30 + , view = + \definition -> + el + [ D.widthEach + { bottom = 1 + , top = 0 + , left = 1 + , right = 1 + } + , D.color (getThemeColor TextDarkGrey) + , cellPadding + , E.height fill + ] + <| + el + [ centerX + , centerY + ] + <| + paragraph [] [ detailTitleMaker TextLightOrange definition.definiendum ] + } + , { header = + el + [ D.widthEach + { bottom = 1 + , top = 1 + , left = 0 + , right = 1 + } + , D.color (getThemeColor TextDarkGrey) + , cellPadding + , E.width fill + ] + <| + detailTitleMaker TextLightOrange "Definiens" + , width = fill + , view = + \definition -> + el + [ D.widthEach + { bottom = 1 + , top = 0 + , left = 0 + , right = 1 + } + , D.color (getThemeColor TextDarkGrey) + , cellPadding + , E.height fill + ] + <| + el [] <| + paragraph [] [ detailBodyMaker TextLightGrey (text definition.definiens) ] + } + ] + } + ] + + +formalizationMaker : Device -> Argument -> Element msg +formalizationMaker device argument = + column + [ centerX + , E.width fill + , spacing 10 + ] + (List.indexedMap + (\index argumentEntry -> + column + [ paddingXY + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + 0 + + ( Tablet, Portrait ) -> + 0 + + _ -> + 40 + ) + 3 + ] + (List.indexedMap + (\entryIndex entryWithNotation -> + column + [ centerX + , F.center + , detailSpacing + , E.width fill + ] + [ paragraph + [ width fill ] + [ detailTitleMaker + TextLightOrange + (if entryIndex < List.length argumentEntry.premises then + "P" ++ String.fromInt (entryIndex + 1) ++ ") " + + else + "C) " + ) + , detailBodyMaker TextLightGrey + (text + (if entryIndex < List.length argumentEntry.premises then + entryWithNotation.premise + + else + argumentEntry.conclusion + ) + ) + |> el + [] + ] + , paragraph + [] + [ detailTitleMaker + TextLightOrange + (if entryIndex < List.length argumentEntry.premises then + "(" ++ entryWithNotation.notation ++ ")" + + else + "(∴" ++ argumentEntry.conclusionNotation ++ ")" + ) + ] + ] + ) + (argumentEntry.premises ++ [ { premise = argumentEntry.conclusion, notation = argumentEntry.conclusionNotation } ]) + ) + ) + argument.argumentFormalization + ) diff --git a/packages/website/frontend/src/Pages/Debate/Cucklist.elm b/packages/website/frontend/src/Pages/Debate/Cucklist.elm new file mode 100755 index 0000000..f387313 --- /dev/null +++ b/packages/website/frontend/src/Pages/Debate/Cucklist.elm @@ -0,0 +1,609 @@ +module Pages.Debate.Cucklist exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailSpacing + , detailTitleLink + , detailTitleMaker + , getHoverColours + , numberedListItem + ) +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (formatName, formatSocial) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (cuckListHeader) +import Config.Helpers.Headers.Types as R exposing (Headerable(..)) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Debate.Cuckery.List exposing (cuckList) +import Config.Pages.Debate.Cuckery.Types + exposing + ( Cuck + , Dodge + , DodgeDescription(..) + , DodgeFallacies(..) + , DoxasticState(..) + , Evaluation(..) + ) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Fonts exposing (defaultFontSize, smallTextFontSize) +import Config.Style.Icons.Icons exposing (copyLink) +import Config.Style.Icons.Types as TySvg + exposing + ( InnerPart + , OuterPart + ) +import Config.Style.Images exposing (ElementSize(..), imageSquareMaker) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleFast + , transitionStyleSlow + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignRight + , alignTop + , column + , el + , fill + , focused + , htmlAttribute + , newTabLink + , none + , paddingEach + , paddingXY + , paragraph + , px + , rgba + , row + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , shadow + ) +import Element.Font as F exposing (color) +import Element.Input as Input +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Ports +import Process +import Route exposing (Route) +import Route.Path as Path +import Shared +import Svg.Attributes as SvgAttr +import Task +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + { hasBeenCopied : List Bool } + + +init : () -> ( Model, Effect Msg ) +init () = + ( { hasBeenCopied = List.repeat (List.length cuckList) False } + , Effect.batch + [ Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + , Effect.none + ] + ) + + + +-- UPDATE + + +type Msg + = CopyText String Int + | ResetCopyState Int + | NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + let + urlLinkClickUpdate : Int -> Model + urlLinkClickUpdate index = + { model + | hasBeenCopied = + List.take index model.hasBeenCopied + ++ (case List.head (List.drop index model.hasBeenCopied) of + Just isCLicked -> + [ not isCLicked ] + + Nothing -> + -- shouldn't happen + [] + ) + ++ List.drop (index + 1) model.hasBeenCopied + } + in + case msg of + CopyText text index -> + ( urlLinkClickUpdate index + , Effect.batch + [ Effect.sendCmd (Ports.copyToClipboard text) + , Effect.sendCmd (Process.sleep 700 |> Task.perform (\_ -> ResetCopyState index)) + ] + ) + + ResetCopyState index -> + ( urlLinkClickUpdate index + , Effect.none + ) + + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "debate (" ++ pageNames.pageCucks ++ ")" + , attributes = [] + , element = cucksContainer shared model + } + + +cucksContainer : Shared.Model -> Model -> Element Msg +cucksContainer shared model = + topLevelContainer (cucksList shared model) + + +cucksList : Shared.Model -> Model -> Element Msg +cucksList shared model = + column + (case ( shared.device.class, shared.device.orientation ) of + _ -> + pageList shared.device + ) + <| + List.concat + [ [ headerMaker (R.CuckList cuckListHeader) ] + , List.map3 + (\cuck dummy index -> + cardMaker shared.device (C.Cuck cuck) (contentList shared model dummy index cuck) + ) + cuckList + model.hasBeenCopied + (List.range 0 (List.length cuckList)) + ] + + +contentList : Shared.Model -> Model -> Bool -> Int -> Cuck -> List (Element Msg) +contentList shared model isLinkClicked index cuck = + let + image : ElementSize -> Element msg + image size = + el + [ alignRight + , alignTop + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker shared.device (imagePathMaker M.Cuck cuck.cuckImage) True size + in + [ detailFormat row + [ case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + [ socialMaker cuck + , dodgeTitle cuck + , dodgeMaker shared.device cuck + , el [ alignRight ] <| copyButton shared model isLinkClicked index cuck + ] + ] + ] + + +copyButton : Shared.Model -> Model -> Bool -> Int -> Cuck -> Element Msg +copyButton shared model isLinkClicked index cuck = + Input.button + [ focused + [ D.color (rgba 0 0 0 0) + , D.shadow { blur = 0, color = rgba 0 0 0 0, offset = ( 0, 0 ), size = 0 } + ] + ] + { onPress = Just (CopyText ("https://uprootnutrition.com" ++ Path.toString Path.Debate_Cucklist ++ "#" ++ formatName cuck.cuckImage) index) + , label = + el + (if isLinkClicked then + [ transitionStyleSlow + , tooltip IsRight "Copied!" + , case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + ( Tablet, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + _ -> + B.color (getThemeColor BackgroundDeepDarkGrey) + , paddingXY 7 7 + , D.rounded 10 + , F.color (getThemeColor TextLightOrange) + ] + + else + [ transitionStyleSlow + , B.color (getThemeColor Transparent) + , paddingXY 7 7 + , D.rounded 10 + , F.color (getThemeColor TextLightOrange) + ] + ++ getHoverColours TextLightOrange + ) + <| + copyLink + { elementAttributes = + [] + , sharedModel = shared + , svgAttributes = [ SvgAttr.width "20" ] + } + } + + +dodgeMaker : Device -> Cuck -> Element msg +dodgeMaker device cuck = + column + [ spacing 10 + , width fill + ] + <| + List.map2 (\x y -> makeDodge device cuck x y) + cuck.cuckDodges + (List.range 1 (List.length cuck.cuckDodges)) + + +socialMaker : Cuck -> Element msg +socialMaker cuck = + newTabLink + [] + { url = cuck.cuckSocial + , label = + detailTitleLink + TextLightOrange + (formatSocial cuck.cuckSocial) + } + + +dodgeTitle : Cuck -> Element msg +dodgeTitle cuck = + detailTitleMaker + TextLightGrey + "Dodges: " + + +makeDodge : Device -> Cuck -> Dodge -> Int -> Element msg +makeDodge device cuck dodge index = + detailFormat row + [ numberedListItem TextLightGrey index + , detailFormat column + (dodgeRows device cuck dodge) + ] + + +dodgeWidth = + width <| px 85 + + +formatProposition : String -> String +formatProposition proposition = + if proposition == "N/A" then + proposition + + else + "\"" ++ proposition ++ "\"" + + +dodgeCounter : Int -> Element msg +dodgeCounter index = + detailTitleMaker TextLightGrey + (String.fromInt index ++ ". ") + + +circumstanceMaker : Cuck -> Dodge -> Element msg +circumstanceMaker cuck dodge = + newTabLink + [] + { url = dodge.dodgeLink + , label = circumstance cuck dodge + } + + +circumstance : Cuck -> Dodge -> Element msg +circumstance cuck dodge = + detailFormat paragraph + [ detailTitleLink TextLightOrange + (case dodge.dodgeDescription of + NoReply -> + "Debate invitation extended with no response" + + RanAway -> + "Engaged in written debate and ran away when cornered" + + GhostedMe -> + "Debate invitation accepted with no follow-up" + + PussiedOut -> + "Debate invitation declined" + + InTooDeep -> + "Debate invitation accepted and subsequently retracted" + + KillScreen -> + "All further debate invitations preemptively declined" + + VagueGesture -> + "Chose to gesture vaguely instead of engaging" + + EmptyHanded -> + "Engaged in written debate and ran away when pressed for specifics" + ) + , el [ F.color (getThemeColor TextLightGrey) ] <| + text "." + + -- , receipts cuck dodge + ] + + +receipts : Cuck -> Dodge -> Element msg +receipts cuck dodge = + row + [ spacing 3 + , smallTextFontSize + , paddingEach + { top = 0 + , right = 0 + , bottom = 0 + , left = 3 + } + , htmlAttribute (H.style "position" "relative") + , htmlAttribute (H.style "top" "-5px") + ] + <| + List.indexedMap + (\index2 link -> + paragraph + [ alignTop + , F.color (getThemeColor TextLightOrange) + ] + [ el + [ transitionStyleSlow + , hoverFontDarkOrange + ] + (text (String.fromInt (index2 + 1))) + , text ", " |> el [ F.color (getThemeColor TextLightGrey) ] + ] + ) + dodge.dodgeReceipts + + +infoRow : Device -> String -> Element msg -> Element msg +infoRow device label value = + detailFormat + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + column + + ( Tablet, Portrait ) -> + column + + _ -> + row + ) + (if String.isEmpty label then + [ detailBodyMaker TextLightGrey value ] + + else + [ el + [ width <| px 75 + , alignTop + ] + <| + detailTitleMaker TextLightGrey label + , detailBodyMaker TextLightGrey value + ] + ) + + +dodgeRows : Device -> Cuck -> Dodge -> List (Element msg) +dodgeRows device cuck dodge = + [ infoRow device "" (circumstanceMaker cuck dodge) + , infoRow device "Prop:" (text (formatProposition dodge.dodgeProposition)) + , case dodge.dodgeFallacy of + Nothing -> + none + + _ -> + infoRow device "Fallacy:" (reductioMaker device dodge) + , infoRow device "Attitude:" (attitudeMaker device dodge) + , infoRow device "Reason:" (reasonMaker device dodge) + ] + + +attitudeMaker : Device -> Dodge -> Element msg +attitudeMaker device dodge = + detailFormat paragraph + [ case dodge.dodgeNicksDoxasticState of + Nothing -> + paragraph [ F.regular ] [ text "I don't form a doxastic state." ] + + Just Belief -> + paragraph [ F.regular ] + [ text "I lean more toward " + , el [ F.bold ] (text "TRUE") + , text " than false." + ] + + Just Disbelief -> + paragraph [ F.regular ] + [ text "I lean more toward " + , text "FALSE" |> el [ F.bold ] + , text " than true." + ] + + Just Agnostic -> + el [ F.regular ] (text "I don't form beliefs about this proposition.") + ] + + +reductioMaker : Device -> Dodge -> Element msg +reductioMaker device dodge = + let + displayFallacy : String -> Element msg + displayFallacy fallacyText = + detailFormat paragraph + [ text fallacyText ] + in + case dodge.dodgeFallacy of + Nothing -> + none + + Just fallacy -> + case fallacy of + SpecificFallacy str -> + displayFallacy str + + AppealToNature -> + displayFallacy "Appeal to Nature" + + AppealToTradition -> + displayFallacy "Appeal to Tradition" + + AppealToIgnorance -> + displayFallacy "Appeal to Ignorance" + + AppealFromIncredulity -> + displayFallacy "Appeal from Incredulity" + + RedHerring -> + displayFallacy "Red Herring" + + BeggingTheQuestion -> + displayFallacy "Begging the Question" + + Strawman -> + displayFallacy "Strawman" + + Equivocation -> + displayFallacy "Equivocation" + + GeneticFallacy -> + displayFallacy "Genetic Fallacy" + + MotteAndBailey -> + displayFallacy "Motte and Bailey" + + MechanisticMasturbation -> + displayFallacy "Mechanistic Masturbation" + + Vaguemongering -> + displayFallacy "Vaguemongering" + + VagueHumanity -> + displayFallacy "Vague Humanity" + + SelfSealing -> + displayFallacy "Self-Sealing Argument Fallacy" + + +reasonMaker : Device -> Dodge -> Element msg +reasonMaker device dodge = + let + reasonText = + case dodge.dodgeNicksDoxasticReason of + NoProp -> + "There is no proposition to evaluate." + + VagueProp -> + "The proposition is too vague to evaluate." + + SpecificPropReason str -> + str + in + detailFormat paragraph + [ el [ defaultFontSize ] (text reasonText) ] diff --git a/packages/website/frontend/src/Pages/Donate.elm b/packages/website/frontend/src/Pages/Donate.elm new file mode 100755 index 0000000..4e20df5 --- /dev/null +++ b/packages/website/frontend/src/Pages/Donate.elm @@ -0,0 +1,476 @@ +module Pages.Donate exposing (Model, Msg, page) + +-- import Html.Attributes as H + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.StrengthBar + exposing + ( barMaker + , barPadding + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailTitleMaker + , listItem + , listMaker + ) +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (donateHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Donate.Records.Cardano exposing (donateCardano) +import Config.Pages.Donate.Records.KoFi exposing (donateKoFi) +import Config.Pages.Donate.Records.LiberaPay exposing (donateLiberaPay) +import Config.Pages.Donate.Records.Merch exposing (donateMerch) +import Config.Pages.Donate.Records.Patreon exposing (donatePatreon) +import Config.Pages.Donate.Records.PayPal exposing (donatePayPal) +import Config.Pages.Donate.Records.Stripe exposing (donateStripe) +import Config.Pages.Donate.Records.YouTube exposing (donateYouTube) +import Config.Pages.Donate.Types + exposing + ( Cons + , Donate + , Features + , Pros + ) +import Config.Style.Colour.Helpers as T + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Column + , Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignTop + , centerX + , centerY + , clip + , column + , el + , fill + , padding + , paddingEach + , paragraph + , px + , row + , spacing + , text + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , widthEach + ) +import Element.Font as F + exposing + ( bold + , center + , color + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import Task +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageDonate + , attributes = [] + , element = donateContainer shared + } + + +donateContainer : Shared.Model -> Element msg +donateContainer shared = + topLevelContainer (donateList shared) + + +donateList : Shared.Model -> Element msg +donateList shared = + column + (case ( shared.device.class, shared.device.orientation ) of + _ -> + pageList shared.device + ) + <| + List.concat + [ [ headerMaker (R.Donate donateHeader) ] + , List.map + (\donate -> + cardMaker shared.device (C.Donate donate) (contentList shared donate) + ) + [ donateLiberaPay + , donateStripe + , donatePatreon + , donateCardano + , donateKoFi + , donateYouTube + , donateMerch + ] + ] + + +contentList : Shared.Model -> Donate -> List (Element msg) +contentList shared donate = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , alignTop + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker shared.device (imagePathMaker M.Donate donate.donateImage) True size + in + [ detailFormat row + [ image Big + , detailFormat column + [ feeMaker donate + , preferenceMaker shared donate + , tableMaker donate shared.device + ] + ] + , proConMaker donate + ] + + +feeMaker : Donate -> Element msg +feeMaker donate = + detailFormat row + [ detailTitleMaker TextLightOrange "Fees:" + , detailBodyMaker TextLightGrey (text donate.donateFees) + ] + + +proConMaker : Donate -> Element msg +proConMaker donate = + detailFormat column + [ detailTitleMaker TextLightOrange "Pros:" + , listMaker makePro donate.donatePros + , detailTitleMaker TextLightOrange "Cons:" + , listMaker makeCon donate.donateCons + ] + + +makePro : Pros -> Element msg +makePro pro = + listItem TextLightGrey pro.pro + + +makeCon : Cons -> Element msg +makeCon con = + listItem TextLightGrey con.con + + +preferenceMaker : Shared.Model -> Donate -> Element msg +preferenceMaker shared donate = + detailFormat row + [ el + (case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + if not shared.isNavbarExpanded then + [ tooltip IsLeft + "This represents how strongly I prefer a given platform relative to other platforms." + ] + + else + [] + ) + <| + detailTitleMaker + TextLightOrange + "Preference:" + , barPadding + [ barMaker shared getPreferenceTooltip donate.donatePreference ] + ] + + +getPreferenceTooltip : Int -> String +getPreferenceTooltip num = + case num of + 0 -> + "Disdain this platform." + + 1 -> + "Very negative towards this platform." + + 2 -> + "Strongly dislike this platform." + + 3 -> + "Dislike this platform." + + 4 -> + "Somewhat dislike this platform." + + 5 -> + "Neutral, no strong feelings." + + 6 -> + "Somewhat like this platform." + + 7 -> + "Like this platform." + + 8 -> + "Strongly like this platform." + + 9 -> + "Very positive towards this platform." + + 10 -> + "Absolutely love this platform!" + + _ -> + "Preference is out of bounds." + + +tableMaker : Donate -> Device -> Element msg +tableMaker donate device = + el + [ E.alignLeft + , E.width fill + , centerX + ] + <| + E.table + ([ spacing 0 + , D.rounded 10 + , D.width 2 + , D.color (getThemeColor TextDarkGrey) + , clip + ] + ++ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [ B.color (getThemeColor BackgroundSpreadsheet) ] + + ( Tablet, Portrait ) -> + [ B.color (getThemeColor BackgroundSpreadsheet) ] + + _ -> + [] + ) + ) + { data = donate.donateFeatures + , columns = + List.map createColumn + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + mobileLabels + + ( Tablet, Portrait ) -> + mobileLabels + + _ -> + desktopLabels + ) + } + + +desktopLabels : List { label : String, getter : { a | free : b, subscriptions : b, userFriendly : b, anonymous : b, rewardTiers : b } -> b } +desktopLabels = + [ { label = "Zero Fees" + , getter = .free + } + , { label = "Subscriptions" + , getter = .subscriptions + } + , { label = "User Friendly" + , getter = .userFriendly + } + , { label = "Anonymous" + , getter = .anonymous + } + , { label = "Rewards" + , getter = .rewardTiers + } + ] + + +mobileLabels : List { label : String, getter : { a | free : b, subscriptions : b, userFriendly : b, anonymous : b } -> b } +mobileLabels = + [ { label = "Free" + , getter = .free + } + , { label = "Subs" + , getter = .subscriptions + } + , { label = "Easy" + , getter = .userFriendly + } + , { label = "Safe" + , getter = .anonymous + } + ] + + +createColumn : { label : String, getter : Features -> Maybe Bool } -> Column Features msg +createColumn { label, getter } = + { header = + el + [ F.bold + , D.widthEach + { bottom = 1 + , top = 1 + , left = 1 + , right = 0 + } + , D.color (getThemeColor TextDarkGrey) + , padding 5 + , E.width fill + , F.center + ] + (text label) + |> el [ F.color (getThemeColor TextLightOrange) ] + , width = fill + , view = + \feature -> + row + [ F.color (getThemeColor TextLightOrange) + , F.bold + , D.widthEach + { bottom = 1 + , top = 0 + , left = 1 + , right = 0 + } + , D.color (getThemeColor TextDarkGrey) + , padding 5 + , E.height fill + ] + [ row + [ centerX + , centerY + ] + [ paragraph [] + [ E.image + [ E.width <| px 30 + , E.height <| px 30 + ] + (featureToString (getter feature)) + ] + ] + ] + } + + +featureToString : Maybe Bool -> { src : String, description : String } +featureToString maybeBool = + case maybeBool of + Just True -> + { src = "donate/checkmark.png", description = "" } + + Just False -> + { src = "donate/ex.png", description = "" } + + Nothing -> + { src = "donate/question.png", description = "" } diff --git a/packages/website/frontend/src/Pages/Home_.elm b/packages/website/frontend/src/Pages/Home_.elm new file mode 100755 index 0000000..f5b5860 --- /dev/null +++ b/packages/website/frontend/src/Pages/Home_.elm @@ -0,0 +1,223 @@ +module Pages.Home_ exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Cards.Inner.Text exposing (detailBodyLink) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageListCenter + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + ) +import Config.Style.Fonts + exposing + ( defaultFontSize + , paragraphSpacing + ) +import Config.Style.Glow exposing (glowDeepDarkGrey) +import Config.Style.Icons.Icons + exposing + ( upRootLarge + , upRootMedium + , upRootSmall + ) +import Config.Style.Transitions exposing (transitionStyleMedium) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , centerY + , column + , el + , html + , maximum + , minimum + , newTabLink + , paddingEach + , paragraph + , px + , text + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (rounded) +import Element.Font as F exposing (color) +import Html exposing (Html) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageHome + , attributes = [] + , element = homeContainer shared.device + } + + +homeContainer : Device -> Element msg +homeContainer device = + topLevelContainer (homeList device) + + +homeList : Device -> Element msg +homeList device = + column (pageListCenter device) + [ case device.class of + Desktop -> + homePage device upRootLarge + + BigDesktop -> + homePage device upRootLarge + + Tablet -> + case device.orientation of + _ -> + homePage device upRootMedium + + Phone -> + case device.orientation of + _ -> + homePage device upRootSmall + ] + + +homePage : Device -> Html msg -> Element msg +homePage device image = + column + [ centerX + , centerY + , E.spacing 20 + , E.width (E.fill |> minimum 100) + , E.width (E.fill |> maximum 875) + ] + [ el + [ centerX + , E.width <| + px <| + case device.class of + Desktop -> + 675 + + BigDesktop -> + 675 + + Tablet -> + case device.orientation of + _ -> + 300 + + Phone -> + case device.orientation of + _ -> + 150 + ] + <| + html image + , el + [ paddingEach + { top = 15 + , bottom = 15 + , left = 20 + , right = 20 + } + , glowDeepDarkGrey + , B.color colourTheme.backgroundDarkGrey + , D.rounded 10 + , E.width E.fill + , E.spacing 8 + ] + <| + paragraph + [ F.color colourTheme.textLightGrey + , paragraphSpacing + , defaultFontSize + , centerX + ] + [ text "upRootNutrition is an " + , newTabLink [] + { url = "https://gitlab.com/upRootNutrition/website" + , label = detailBodyLink TextLightOrange "open source" + } + , text " project created by Nick Hiebert, designed to elevate the quality of nutrition science communication in online discourse. By applying more rigorous systems of reasoning, such as formal logic and semantic analysis, upRootNutrition aims to cut through the misinformation and sophistry that are endemic on social media." + ] + , E.image + [ E.height <| px 0 + , E.width <| px 0 + ] + { src = "/assets/twittercard.png", description = "" } + ] diff --git a/packages/website/frontend/src/Pages/Interviews.elm b/packages/website/frontend/src/Pages/Interviews.elm new file mode 100755 index 0000000..5c90edb --- /dev/null +++ b/packages/website/frontend/src/Pages/Interviews.elm @@ -0,0 +1,357 @@ +module Pages.Interviews exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.StrengthBar + exposing + ( barMaker + , barPadding + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyLink + , detailBodyMaker + , detailFormat + , detailFormatEl + , detailSpacing + , detailTitleLinkWide + , detailTitleMaker + , listCounter + , listItem + , listMaker + , listMaker2 + , socialMaker + ) +import Config.Helpers.Cards.Inner.ToolTip + exposing + ( ToolTipPosition(..) + , tooltip + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters exposing (formatSocial) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (interviewHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Debate.Cuckery.List exposing (cuckList) +import Config.Pages.Interviews.Records.DrShawnBakerPodcast exposing (drShawnBakerPodcast) +import Config.Pages.Interviews.Records.FitAndFurious exposing (fitAndFurious) +import Config.Pages.Interviews.Records.FoolproofMastery exposing (foolproofMastery) +import Config.Pages.Interviews.Records.KetogeeksPodcast exposing (ketoGeeksPodcast) +import Config.Pages.Interviews.Records.LegendaryLifePodcast exposing (legendaryLifePodcast) +import Config.Pages.Interviews.Records.MarkBellsPowerProject exposing (markBellsPowerProject) +import Config.Pages.Interviews.Records.MuscleMemoirsPodcast exposing (muscleMemoirsPodcast) +import Config.Pages.Interviews.Records.SigmaNutritionRadio exposing (sigmaNutritionRadio) +import Config.Pages.Interviews.Records.StrenuousLifePodcast exposing (strenuousLifePodcast) +import Config.Pages.Interviews.Types + exposing + ( Appearance + , Interview + , Subjects + ) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignTop + , column + , el + , explain + , fill + , newTabLink + , none + , paddingEach + , row + , text + , width + ) +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageInterviews + , attributes = [] + , element = interviewContainer shared + } + + +interviewContainer : Shared.Model -> Element msg +interviewContainer shared = + topLevelContainer (interviewList shared) + + +interviewList : Shared.Model -> Element msg +interviewList shared = + column + (case shared.device.class of + _ -> + pageList shared.device + ) + <| + List.concat + [ [ headerMaker (R.Interviews interviewHeader) ] + , List.map + (\interview -> + cardMaker shared.device (C.Interview interview) (contentList shared interview) + ) + [ sigmaNutritionRadio + , markBellsPowerProject + , foolproofMastery + , ketoGeeksPodcast + , legendaryLifePodcast + , muscleMemoirsPodcast + , fitAndFurious + , strenuousLifePodcast + , drShawnBakerPodcast + ] + ] + + +contentList : Shared.Model -> Interview -> List (Element msg) +contentList shared interview = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , alignTop + , paddingEach + { top = 0 + , right = 8 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker shared.device (imagePathMaker M.Interviews interview.interviewImage) True size + + imageMaker : Element msg + imageMaker = + case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + in + [ detailFormat row + [ imageMaker + , detailFormat column + [ socialMaker interview.interviewSocial interview.interviewSocial + , detailTitleMaker TextLightGrey "Appearances:" + , appearanceMaker shared interview + ] + ] + ] + + +appearanceMaker : Shared.Model -> Interview -> Element msg +appearanceMaker shared interview = + detailFormat column + [ listMaker2 (makeAppearance shared) interview.interviewAppearances ] + + +makeAppearance : Shared.Model -> Appearance -> Int -> Element msg +makeAppearance shared appearanceEntry index = + detailFormat row + [ listCounter index + , detailFormat column + [ episodeMaker appearanceEntry + , experienceMaker shared appearanceEntry + , dateMaker appearanceEntry + , subjectMaker appearanceEntry + ] + ] + + +episodeMaker : Appearance -> Element msg +episodeMaker appearanceEntry = + newTabLink + [ width fill ] + { url = appearanceEntry.appearanceLink + , label = detailTitleLinkWide TextLightOrange ("#" ++ appearanceEntry.appearanceEpisode ++ ": " ++ appearanceEntry.appearanceTitle) + } + + +experienceMaker : Shared.Model -> Appearance -> Element msg +experienceMaker shared appearanceEntry = + detailFormat row + [ el + (case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [] + + ( Tablet, Portrait ) -> + [] + + _ -> + if not shared.isNavbarExpanded then + [ tooltip IsLeft + "This represents the pleasantness of the host." + ] + + else + [] + ) + <| + detailTitleMaker TextLightGrey "Pleasantness:" + , barPadding + [ barMaker shared getExperienceTooltip appearanceEntry.appearanceExperience ] + ] + + +dateMaker : Appearance -> Element msg +dateMaker appearanceEntry = + detailFormat row + [ detailTitleMaker TextLightGrey "Published:" + , detailBodyMaker TextLightGrey (text appearanceEntry.appearanceYear) + ] + + +subjectMaker : Appearance -> Element msg +subjectMaker appearanceEntry = + detailFormat column + [ detailFormatEl <| detailTitleMaker TextLightGrey "Subjects: " + , detailFormat column [ listMaker makeSubject appearanceEntry.appearanceSubjects ] + ] + + +makeSubject : Subjects -> Element msg +makeSubject subjects = + listItem TextLightGrey subjects.subject + + +getExperienceTooltip : Int -> String +getExperienceTooltip num = + case num of + 0 -> + "Nightmare. Complete fucking cunt." + + 1 -> + "Toxic. Deliberately malicious." + + 2 -> + "Hostile. Consistently disruptive." + + 3 -> + "Belligerent. Consistently disrespectful." + + 4 -> + "Uncivil. Frequently dismissive." + + 5 -> + "Neutral. Unremarkable social interaction." + + 6 -> + "Civil. Slightly considerate." + + 7 -> + "Pleasant. Genuinely respectful." + + 8 -> + "Very kind. Consistently supportive." + + 9 -> + "Compassionate. Went out of their way." + + 10 -> + "Absolute angel. Perfectly empathetic." + + _ -> + "Behavior level out of expected range." diff --git a/packages/website/frontend/src/Pages/Journal.elm b/packages/website/frontend/src/Pages/Journal.elm new file mode 100755 index 0000000..d78e766 --- /dev/null +++ b/packages/website/frontend/src/Pages/Journal.elm @@ -0,0 +1,259 @@ +module Pages.Journal exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Articles.Article exposing (extractFirstWords) +import Config.Helpers.Articles.Markdown exposing (renderDeviceMarkdownNoToc, renderDeviceMarkdownNoTocGeneric) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailTitleMaker + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Converters + exposing + ( formatName + , wordCount + ) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (journalHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Journal.DigitalPrivacy exposing (articleDigitalPrivacy) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Style.Colour.Helpers as T exposing (ThemeColor(..)) +import Config.Style.Fonts + exposing + ( defaultFontSize + , paragraphSpacing + ) +import Config.Style.Icons.Icons exposing (construction) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignTop + , column + , el + , none + , paddingEach + , px + , row + , text + , width + ) +import Html.Attributes as H exposing (style) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Route.Path as Path +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageJournal + , attributes = [] + , element = blogContainer shared.device + } + + +blogContainer : Device -> Element msg +blogContainer device = + topLevelContainer (blogList device) + + +blogList : Device -> Element msg +blogList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ [ headerMaker (R.BlogPage journalHeader) ] + , List.map + (\article -> + cardMaker device (C.BlogCard article) (contentList device article) + ) + [ articleDigitalPrivacy ] + ] + + +contentList : Device -> BlogArticle -> List (Element msg) +contentList device article = + [ articleMaker device article ] + + +articleImage : + BlogArticle + -> + { src : String + , description : String + } +articleImage article = + { src = imagePathMaker M.BlogArticle article.articleImage + , description = article.articleName + } + + +articleMaker : Device -> BlogArticle -> Element msg +articleMaker device article = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , alignTop + , paddingEach + { top = 0 + , right = 10 + , bottom = 7 + , left = 0 + } + ] + <| + imageSquareMaker device (imagePathMaker M.BlogCard article.articleImage) True size + in + detailFormat column + [ detailFormat row + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + (articleRows article ++ []) + ] + , el [] <| + detailBodyMaker TextLightGrey (renderDeviceMarkdownNoTocGeneric (extractFirstWords article.articleBody)) + ] + + +infoRow : String -> Element msg -> Element msg +infoRow label value = + detailFormat row + [ el [ width <| px 82 ] <| + detailTitleMaker TextLightOrange label + , detailBodyMaker TextLightGrey value + ] + + +articleRows : BlogArticle -> List (Element msg) +articleRows article = + let + referenceCount = + List.length article.articleReferences + in + [ infoRow "Published:" (text article.articlePublished) + , infoRow "Author:" (text article.articleAuthor) + , infoRow "Duration:" + (text + (String.fromInt + (wordCount article.articleBody // 225) + ++ " minutes" + ) + ) + , infoRow "Words" + (text + (String.fromInt + (wordCount article.articleBody) + ) + ) + , infoRow "Sources" + (if referenceCount >= 2 then + text (String.fromInt referenceCount) + + else + text "N/A" + ) + ] diff --git a/packages/website/frontend/src/Pages/Journal/Digitalprivacy.elm b/packages/website/frontend/src/Pages/Journal/Digitalprivacy.elm new file mode 100755 index 0000000..c9390f5 --- /dev/null +++ b/packages/website/frontend/src/Pages/Journal/Digitalprivacy.elm @@ -0,0 +1,127 @@ +module Pages.Journal.Digitalprivacy exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Journal.DigitalPrivacy exposing (articleDigitalPrivacy) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , Element + , column + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageJournal ++ " (digitalPrivacy)" + , attributes = [] + , element = articleContainer shared.device + } + + +articleContainer : Device -> Element Msg +articleContainer device = + topLevelContainer (articleList device) + + +articleList : Device -> Element Msg +articleList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\article -> + cardMaker device (C.BlogArticle article) (contentList article [] MarkdownMsg) + ) + [ articleDigitalPrivacy ] + ] diff --git a/packages/website/frontend/src/Pages/NotFound_.elm b/packages/website/frontend/src/Pages/NotFound_.elm new file mode 100755 index 0000000..7d310da --- /dev/null +++ b/packages/website/frontend/src/Pages/NotFound_.elm @@ -0,0 +1,126 @@ +module Pages.NotFound_ exposing (Model, Msg, page) + +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Response + exposing + ( pageListCenter + , topLevelContainer + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , column + , none + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Route.Path +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageNotFound + , attributes = [] + , element = notFoundContainer shared.device + } + + +notFoundContainer : Device -> Element msg +notFoundContainer device = + topLevelContainer (notFoundList device) + + +notFoundList : Device -> Element msg +notFoundList device = + column (pageListCenter device) + [ case device.class of + Desktop -> + none + + BigDesktop -> + none + + Tablet -> + case device.orientation of + Portrait -> + none + + Landscape -> + none + + Phone -> + case device.orientation of + Portrait -> + none + + Landscape -> + none + ] diff --git a/packages/website/frontend/src/Pages/Nutridex.elm b/packages/website/frontend/src/Pages/Nutridex.elm new file mode 100755 index 0000000..c192951 --- /dev/null +++ b/packages/website/frontend/src/Pages/Nutridex.elm @@ -0,0 +1,849 @@ +module Pages.Nutridex exposing (Model, Msg, page) + +import Browser.Events exposing (onClick) +import Config.Data.Identity exposing (pageNames) +import Config.Helpers.Articles.Article exposing (makeReference) +import Config.Helpers.Articles.Types exposing (References) +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailHeader + , detailTitleMaker + , divider + , getHoverColours + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (nutriDexHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Products.Records.NutriDex exposing (productNutriDex) +import Config.Pages.Products.Types exposing (Features, NutriDex) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , colourTheme + , getThemeColor + ) +import Config.Style.Fonts + exposing + ( defaultFontSize + , headerFontSizeBig + , paragraphSpacing + , smallTextFontSize + ) +import Config.Style.Icons.Icons + exposing + ( nutriDex + , nutriDexLogo + , thumbsUp + ) +import Config.Style.Icons.Types as TySvg + exposing + ( InnerPart + , OuterPart + ) +import Config.Style.Transitions + exposing + ( hoverFontDarkOrange + , transitionStyleFast + , transitionStyleMedium + , transitionStyleSlow + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Attr + , Attribute + , Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , alignRight + , alignTop + , below + , centerX + , centerY + , column + , el + , fill + , focused + , height + , html + , htmlAttribute + , inFront + , mouseOver + , newTabLink + , none + , padding + , paddingEach + , paddingXY + , paragraph + , pointer + , px + , rgba + , row + , spacing + , text + , transparent + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D + exposing + ( color + , rounded + , shadow + , width + ) +import Element.Font as F + exposing + ( bold + , center + , color + ) +import Element.Input as Input +import Html.Attributes exposing (style) +import Html.Events as H exposing (onClick) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import Svg.Attributes as SvgAttr +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init shared + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + { isPopUpClicked : Bool } + + +init : Shared.Model -> () -> ( Model, Effect Msg ) +init shared () = + ( { isPopUpClicked = shared.isPopUpClicked } + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | TogglePopUp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + TogglePopUp -> + ( { model | isPopUpClicked = not model.isPopUpClicked } + , Effect.togglePopUp + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageNutriDex + , attributes = [] + , element = nutriDexContainer shared model + } + + +nutriDexContainer : Shared.Model -> Model -> Element Msg +nutriDexContainer shared model = + topLevelContainer (nutriDexList shared model) + + +nutriDexList : Shared.Model -> Model -> Element Msg +nutriDexList shared model = + column + (case ( shared.device.class, shared.device.orientation ) of + _ -> + pageList shared.device + ) + <| + List.concat + [ case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + [ headerMaker (R.NutriDex nutriDexHeader) ] + + ( Tablet, Portrait ) -> + [ headerMaker (R.NutriDex nutriDexHeader) ] + + _ -> + [ none ] + , List.map + (\nutriDex -> + cardMaker shared.device (C.NutriDex nutriDex) (contentList shared nutriDex shared.isPopUpClicked) + ) + [ productNutriDex + ] + ] + + +contentList : Shared.Model -> NutriDex -> Bool -> List (Element Msg) +contentList shared nutridex isPopUpClicked = + [ featureList nutridex shared.device + , nutriDexBodyMaker shared.device + , nutriDexAdjustments shared.device + , column [ spacing 10 ] + [ nutriDexVitamins + , nutriDexFattyAcids + , nutriDexMinerals + , nutriDexAminoAcids + ] + , nutriDexReferences nutridex shared.device + , el [ inFront (popUp shared isPopUpClicked), E.width fill, height fill ] <| none + ] + + +makeFeature : Features -> Element msg +makeFeature features = + el + [ E.width fill + , alignLeft + , paddingEach + { top = 0 + , right = 0 + , bottom = 0 + , left = 8 + } + ] + <| + detailFormat column + [ detailFormat paragraph + [ text "• " + , detailTitleMaker TextLightOrange features.featureTitle + , detailBodyMaker TextLightGrey (text features.feature |> el [ smallTextFontSize ]) + ] + ] + + +featureList : NutriDex -> Device -> Element msg +featureList nutridex device = + column + [ spacing 8 + , E.width fill + , height fill + , paddingEach + { top = 10 + , bottom = 0 + , left = 0 + , right = 0 + } + ] + [ (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + column + [ spacing 20 + , centerX + ] + + ( Tablet, Portrait ) -> + column + [ spacing 20 + , centerX + ] + + _ -> + row + [ spacing 20 + , E.width fill + , height fill + ] + ) + [ column + (case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + [ spacing 20, centerX ] + + ( Tablet, Portrait ) -> + [ spacing 20, centerX ] + + _ -> + [ spacing 20 ] + ) + [ row + [ centerX + , case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + E.width <| px 150 + + ( Tablet, Portrait ) -> + E.width <| px 150 + + _ -> + E.width <| px 250 + ] + [ html nutriDexLogo + ] + , buyButton "$20" "https://buy.stripe.com/fZecO177p34M5EY5ko" + , column + [ centerX ] + [ column + [ defaultFontSize + , F.bold + , F.color colourTheme.textLightOrange + ] + [ newTabLink [] + { url = "https://drive.google.com/file/d/1sk7VgjuL2rEqQdnBRdZjr2_Ab9vwrbmo/view?usp=sharing" + , label = + paragraph + [ centerX + , centerY + ] + [ text "Free Cost Efficiency Score!" ] + } + ] + ] + ] + , column [ E.width fill, smallTextFontSize, spacing 3 ] <| + List.map2 (\x y -> makeFeature x) + nutridex.nutriDexFeatures + (List.range 1 (List.length nutridex.nutriDexFeatures)) + ] + ] + + +linkFormat : List (Attr () msg) +linkFormat = + [ F.color colourTheme.textLightGrey + , paragraphSpacing + , defaultFontSize + , F.color colourTheme.textLightOrange + , mouseOver + [ F.color colourTheme.textDarkOrange + ] + , transitionStyleMedium + ] + + +nutriDexBodyMaker : Device -> Element msg +nutriDexBodyMaker device = + column [ spacing 20 ] + [ detailHeader "Backstory" + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "In May 2019, after losing my job, I sought a way to optimize my diet for nutrient density (ND) while keeping costs low. I initially found a resource called ") + , newTabLink linkFormat + { url = "https://efficiencyiseverything.com/food/" + , label = text "Efficiency Is Everything" + } + , detailBodyMaker TextLightGrey (text ", which ranked foods by nutrition per cost, but I found it too simplistic and lacking nuance, especially since it ranked processed foods like white bread highly, despite their limited health benefits. I wanted a more personalized approach—one that took into account both ND and the cost of foods specific to my region. Inspired by Mat Lalonde's AHS12 talk ") + , newTabLink linkFormat + { url = "https://www.youtube.com/watch?v=HwbY12qZcF4" + , label = text "Nutrient Density: Sticking to the Essentials" + } + , detailBodyMaker TextLightGrey (text " on nutrient density, I created a rudimentary list of 75 foods and manually assigned them scores based on nutritional content from ") + , newTabLink linkFormat + { url = "https://cronometer.com/" + , label = text "Cronometer" + } + , detailBodyMaker TextLightGrey (text ", paired with local grocery prices.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "As I refined the list, I found a community on Reddit called ") + , newTabLink linkFormat + { url = "https://www.reddit.com/r/EatCheapAndHealthy/" + , label = text "EatCheapAndHealthy" + } + , detailBodyMaker TextLightGrey (text " where I shared my ") + , newTabLink linkFormat + { url = "https://www.reddit.com/r/EatCheapAndHealthy/comments/cbmxre/had_no_idea_this_sub_existed_heres_a_nutrient/" + , label = text "spreadsheet" + } + , detailBodyMaker TextLightGrey (text ". The overwhelming response encouraged me to expand it further, incorporating more foods, detailed nutritional data, and more accurate ND scores. To improve accuracy, I turned to the USDA’s ") + , newTabLink linkFormat + { url = "https://www.ars.usda.gov/northeast-area/beltsville-md-bhnrc/beltsville-human-nutrition-research-center/nutrient-data-laboratory/docs/sr28-download-files/" + , label = text "SR28 database" + } + , detailBodyMaker TextLightGrey (text ", which provided granular data for over 700 common foods. I developed a more sophisticated scoring system, assigning points based on how well each food met the daily recommended intake for essential nutrients, then normalizing these scores from 0 to 100.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "The final ND scores were calculated non-linearly, allowing for a more balanced representation of a food’s nutrient profile rather than allowing one nutrient to dominate the score. For instance, while Brazil nuts are high in selenium, the non-linear formula prevents their score from being artificially inflated by this one nutrient. Ultimately, the system I created allows for a more objective and personalized way to rank foods by both nutrient density and cost, making it a valuable resource for anyone looking to optimize their diet.") ] + ] + + +referenceFormat : List (Attr () msg) +referenceFormat = + [ defaultFontSize + , F.color colourTheme.textLightOrange + , alignTop + , hoverFontDarkOrange + , transitionStyleMedium + ] + + +nutriDexAdjustments : Device -> Element msg +nutriDexAdjustments device = + column + [ E.width fill + , height fill + , spacing 20 + ] + [ detailHeader "Nutrient Density Score Adjustments" + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "No adjustments are made to vitamin B1, vitamin B2, vitamin B3, manganese, phosphorus, and potassium, due to their DRIs only representing total daily intake, or due to the nutrient having close to 100% bioavailability. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/books/NBK114331/" + , label = text "1" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/books/NBK114322/" + , label = text "2" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/books/NBK114304/" + , label = text "3" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/books/NBK56056/" + , label = text "4" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.nap.edu/read/11537/chapter/39" + , label = text "5" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.nap.edu/read/11537/chapter/41" + , label = text "6" + } + , text ", " + , newTabLink referenceFormat + { url = "https://www.nap.edu/read/11537/chapter/42" + , label = text "7" + } + ] + ] + ] + + +nutridexSubTitleMaker : String -> Element msg +nutridexSubTitleMaker title = + el + [ centerX + , paddingXY 0 10 + ] + <| + detailTitleMaker TextLightOrange title + + +nutriDexVitamins : Element msg +nutriDexVitamins = + column + [ spacing 20 + , E.width fill + , height fill + ] + [ nutridexSubTitleMaker "Vitamins" + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for vitamin B5 is multiplied by 2 in order to accommodate its average 50% bioavailability from food. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/books/NBK114311/" + , label = text "8" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for plant-derived vitamin B6 is multiplied by 1.74 in order to accommodate the average ~42.5% reduction in bioavailability of pyridoxine glucoside. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/2843032" + , label = text "9" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for animal-derived vitamin B6 is multiplied by 1.33 in order to accommodate the average ~25% reduction in bioavailability of as a result of cooking. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://pdfs.semanticscholar.org/b844/5e60d87753144ef856e0ae207b551aa75b9c.pdf" + , label = text "10" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The contribution of vitamin B12 is capped at 1.5mcg in order to account for the average absorption cap of ~1.5mcg per serving in healthy people. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/18606874" + , label = text "11" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for folate has been multiplied by 2 in order to accommodate its average 50% bioavailbility from food. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3257685/" + , label = text "12" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The contribution of plant-derived vitamin A (as retinol activity equivalents) is capped at 900mcg. This is to accommodate the fact that it is unlikely that the body can convert more than the DRI of vitamin A from carotenoids. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855261/" + , label = text "13" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for plant-derived vitamin K, phylloquinone, is multiplied by 10 in order to accommodate its 10% bioavailability from plant foods. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/8813897" + , label = text "14" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for vitamin C has been multiplied by 1.25 in order to accommodate its average ~80% bioavailability. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/12134712" + , label = text "15" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for vitamin E has been multiplied by 4.65 in order to accommodate its average 21.5% bioavailability. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5745505/" + , label = text "16" + } + ] + ] + ] + + +nutriDexFattyAcids : Element msg +nutriDexFattyAcids = + column + [ spacing 20 + , E.width fill + , height fill + ] + [ nutridexSubTitleMaker "Fatty Acids" + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRIs for omega-3 and omega-6 have been recalculated to 250mg/day and 500mg/day, respectively. This better reflects our actual physiological requirements for these fatty acids as provided by their pre-elongated, animal-derived varieties. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5946201/" + , label = text "17" + } + , newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5452278/" + , label = text "18" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRIs for plant-derived omega-3 and omega-6 have been multiplied by 6.66 in order to reflect their maximal ~15% conversion rate. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/12323090" + , label = text "19" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The contributions of plant-derived omega-3 and omega-6 are capped at 4.4444g before conversion rates are factored, in order to accommodate their conversion rate cap of 2% of calories per day. ") + , detailFormat row + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3132704/" + , label = text "20" + } + ] + ] + ] + + +nutriDexMinerals : Element msg +nutriDexMinerals = + column [ spacing 10 ] + [ nutridexSubTitleMaker "Minerals" + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for calcium has been adjusted dynamically based on the oxalate-to-calcium ratio of each food. ") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for plant-derived copper has been multiplied by 2.94 in order to accommodate its average ~34% bioavailability from plant foods. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/8615369" + , label = text "21" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for animal-derived copper has been multiplied by 2.43 in order to accommodate its average ~41% bioavailability from animal foods. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/8615369" + , label = text "21" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for magnesium has been multiplied by 2.85 in order to accommodate its 35% bioavailability. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/1864954" + , label = text "22" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for iron has been adjusted dynamically based on the phytate-to-iron ratio of each food.") + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for selenium has been multiplied by 1.11 in order to accommodate its 90% bioavailability. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/20200264" + , label = text "23" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The contribution of zinc is capped at 7mg in order to account for the average absorption cap of 7mg per serving in healthy people. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://www.ncbi.nlm.nih.gov/pubmed/10801947" + , label = text "24" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRI for zinc has been adjusted dynamically based on the phytate-to-zinc ratio of each food. ") + ] + ] + + +nutriDexAminoAcids : Element msg +nutriDexAminoAcids = + column [ spacing 20 ] + [ nutridexSubTitleMaker (String.toUpper "Amino Acids") + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "The DRIs for all essential amino acids from non-animal sources have been multiplied by 1.492 in order to accommodate their average PDCAAS score of .67. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://en.wikipedia.org/wiki/Protein_Digestibility_Corrected_Amino_Acid_Score" + , label = text "25" + } + ] + ] + , detailFormat paragraph + [ detailBodyMaker TextLightGrey (text "• ") + , detailBodyMaker TextLightGrey (text "All scores reflecting total protein yield of non-animal foods have been multiplied by .67 in order to accommodate the average 67% bioavailability of protein from non-animal sources. ") + , row [ F.regular, smallTextFontSize ] + [ newTabLink referenceFormat + { url = "https://en.wikipedia.org/wiki/Protein_Digestibility_Corrected_Amino_Acid_Score" + , label = text "25" + } + ] + ] + ] + + +nutriDexReferences : NutriDex -> Device -> Element msg +nutriDexReferences nutridex device = + column + [ E.width fill + , height fill + ] + [ detailHeader "BIBLIOGRAPHY" + , column + [ E.width fill + , F.size 15 + , spacing 10 + , paddingEach + { top = 20 + , right = 0 + , bottom = 0 + , left = 0 + } + ] + <| + List.map2 (\x y -> makeReference x y) + nutridex.nutriDexReference + (List.range 1 (List.length nutridex.nutriDexReference)) + ] + + +popUp : Shared.Model -> Bool -> Element Msg +popUp shared isPopUpClicked = + let + popUpBox : List (Attribute msg) + popUpBox = + [ E.width fill + , htmlAttribute (style "position" "fixed") + , htmlAttribute (style "top" "0") + , htmlAttribute (style "left" "0") + , htmlAttribute (style "height" "100vh") + , htmlAttribute (style "z-index" "9999") + , htmlAttribute (style "display" "flex") + , htmlAttribute (style "align-items" "center") + , htmlAttribute (style "justify-content" "center") + , B.color (rgba 0 0 0 0.5) + , transitionStyleFast + ] + in + el + (popUpBox + ++ (if isPopUpClicked then + [ htmlAttribute (style "opacity" "0") + , htmlAttribute (style "pointer-events" "none") + , htmlAttribute (style "visibility" "hidden") + ] + + else + [ htmlAttribute (style "opacity" "1") + , htmlAttribute (style "pointer-events" "auto") + , htmlAttribute (style "visibility" "visible") + ] + ) + ) + <| + column + [ centerX + , centerY + , padding 15 + , B.color colourTheme.backgroundLightGrey + , F.color (getThemeColor TextLightGrey) + , D.color colourTheme.textLightOrange + , E.width <| + case ( shared.device.class, shared.device.orientation ) of + ( Phone, Portrait ) -> + px 300 + + ( Tablet, Portrait ) -> + px 300 + + _ -> + px 500 + , htmlAttribute (style "max-height" "100vh") + , htmlAttribute (style "overflow-y" "auto") + , D.rounded 5 + , D.width 2 + , D.shadow + { offset = ( 0, 3 ) + , blur = 6 + , size = 0 + , color = rgba 0 0 0 0.32 + } + , spacing 15 + ] + [ el + [ centerX + , E.width <| px 100 + ] + <| + html nutriDexLogo + , paragraph [ F.center ] [ text "The nutriDex web app is now under development to replace the current version available on this page! Customers who purchase the nutriDex between January 1, 2025, and the web app's release will receive six months of free access!" ] + , Input.button + [ centerX + , focused + [ D.color (rgba 0 0 0 0) + , D.shadow + { blur = 0 + , color = rgba 0 0 0 0 + , offset = ( 0, 0 ) + , size = 0 + } + ] + ] + { onPress = Just TogglePopUp + , label = + el [] <| + thumbsUp + { elementAttributes = + [ pointer + , F.color (getThemeColor TextLightOrange) + ] + ++ getHoverColours TextLightOrange + , sharedModel = shared + , svgAttributes = [ SvgAttr.width "40" ] + } + } + ] diff --git a/packages/website/frontend/src/Pages/Services.elm b/packages/website/frontend/src/Pages/Services.elm new file mode 100755 index 0000000..801929f --- /dev/null +++ b/packages/website/frontend/src/Pages/Services.elm @@ -0,0 +1,231 @@ +module Pages.Services exposing (Model, Msg, page) + +import Browser +import Config.Data.Identity exposing (pageNames) +import Config.Data.ImageFolders as M + exposing + ( ImageFolder(..) + , imagePathMaker + ) +import Config.Helpers.Cards.Inner.Text + exposing + ( detailBodyMaker + , detailFormat + , detailTitleMaker + , listItem + , listMaker + ) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Helpers exposing (headerMaker) +import Config.Helpers.Headers.Records exposing (servicesHeader) +import Config.Helpers.Headers.Types as R exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Services.Records.DebateAnalysis exposing (servicesDebateAnalysis) +import Config.Pages.Services.Records.DebateCoaching exposing (servicesDebateCoaching) +import Config.Pages.Services.Records.ElmBuilds exposing (servicesElmBuilds) +import Config.Pages.Services.Records.NixBuilds exposing (servicesNixBuilds) +import Config.Pages.Services.Records.NutritionScience exposing (servicesNutritionScience) +import Config.Pages.Services.Types + exposing + ( Description + , Service + ) +import Config.Style.Colour.Helpers as T + exposing + ( ThemeColor(..) + , getThemeColor + ) +import Config.Style.Images + exposing + ( ElementSize(..) + , imageSquareMaker + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , alignLeft + , column + , el + , fill + , none + , paddingEach + , row + , text + , width + ) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Shared exposing (Model) +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = pageNames.pageServices + , attributes = [] + , element = servicesContainer shared.device + } + + +servicesContainer : Device -> Element msg +servicesContainer device = + topLevelContainer (servicesList device) + + +servicesList : Device -> Element msg +servicesList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ [ headerMaker (R.Services servicesHeader) + ] + , List.map + (\service -> + cardMaker device (C.Service service) (contentList device service) + ) + [ servicesDebateAnalysis + , servicesDebateCoaching + , servicesNutritionScience + , servicesNixBuilds + , servicesElmBuilds + ] + ] + + +contentList : Device -> Service -> List (Element msg) +contentList device service = + let + image : ElementSize -> Element msg + image size = + el + [ alignLeft + , paddingEach + { top = 0 + , right = 10 + , bottom = 0 + , left = 0 + } + ] + <| + imageSquareMaker device (imagePathMaker M.ServicePage service.serviceImage) True size + in + [ detailFormat row + [ case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + none + + ( Tablet, Portrait ) -> + none + + _ -> + image Big + , detailFormat column + [ rateMaker service + , descriptionMaker + , offeringMaker service + ] + ] + ] + + +rateMaker : Service -> Element msg +rateMaker service = + detailFormat row + [ detailTitleMaker TextLightOrange "Rate:" + , el [ width fill ] <| detailBodyMaker TextLightGrey (text service.serviceRate) + ] + + +descriptionMaker : Element msg +descriptionMaker = + detailTitleMaker TextLightOrange "Offerings:" + + +offeringMaker : Service -> Element msg +offeringMaker service = + listMaker makeDescription service.serviceDescription + + +makeDescription : Description -> Element msg +makeDescription description = + listItem + TextLightGrey + description.point diff --git a/packages/website/frontend/src/Pages/Services/Analysis.elm b/packages/website/frontend/src/Pages/Services/Analysis.elm new file mode 100755 index 0000000..5f1703f --- /dev/null +++ b/packages/website/frontend/src/Pages/Services/Analysis.elm @@ -0,0 +1,187 @@ +module Pages.Services.Analysis exposing (Model, Msg, page) + +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Services.Records.DebateAnalysis exposing (servicesDebateAnalysis) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , column + , el + , paddingXY + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Route.Path as Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "services (analysis)" + , attributes = [] + , element = analysisContainer shared.device + } + + +analysisContainer : Device -> Element Msg +analysisContainer device = + topLevelContainer (analysisList device) + + +analysisList : Device -> Element Msg +analysisList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\service -> + cardMaker device + (C.BlogArticle service) + (contentList service + [ el + [ paddingXY 0 10 + , centerX + ] + <| + buyButton "Book!" "https://buy.stripe.com/14k3dr4Zh8p6c3mbIJ" + ] + MarkdownMsg + ) + ) + [ debateAnalysis ] + ] + + +debateAnalysis : BlogArticle +debateAnalysis = + { articleName = String.toUpper "Debate Analysis" + , articleLink = "" + , articleAuthor = "" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = False + , articleImage = "" + , articlePublished = "" + , articleBody = """ +The Debate Analysis services offers personalized feedback to help you improve your debate skills. I work with clients by reviewing their pre-recorded debates, providing detailed critiques, and offering practical advice tailored to their style. Through this process, you'll gain valuable insights into areas of improvement, from your argument structure to your delivery and confidence. + +# BENEFITS + +1. Have your own debates analyzed for constructive feedback. This allows you to receive targeted guidance on how to improve your debating technique and strategy. + +2. Receive advice to improve as a debater. This service provides personalized recommendations to help you develop and refine your debating abilities. + +3. Gain comfort with debate and verbal confrontation. The service aims to help you become more confident and adept at handling the challenges of public debate. + +# REQUIREMENTS + +• Your debate recording must be submitted at least three days prior to the session. + +• Your debate recording must not exceed one hour in length unless otherwise agreed to. + +• Your debate recording must be in either video or audio format, as text debates are ineligible. + +""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Pages/Services/Coaching.elm b/packages/website/frontend/src/Pages/Services/Coaching.elm new file mode 100755 index 0000000..97ba955 --- /dev/null +++ b/packages/website/frontend/src/Pages/Services/Coaching.elm @@ -0,0 +1,238 @@ +module Pages.Services.Coaching exposing (Model, Msg, page) + +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Services.Records.DebateCoaching exposing (servicesDebateCoaching) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , column + , el + , paddingXY + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Route.Path as Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "services (coaching)" + , attributes = [] + , element = coachingContainer shared.device + } + + +coachingContainer : Device -> Element Msg +coachingContainer device = + topLevelContainer (coachingList device) + + +coachingList : Device -> Element Msg +coachingList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\service -> + cardMaker device + (C.BlogArticle service) + (contentList service + [ el + [ paddingXY 0 10 + , centerX + ] + <| + buyButton "Book!" "https://buy.stripe.com/14k01f3Vd6gY6J2146" + ] + MarkdownMsg + ) + ) + [ debateCoaching ] + ] + + +debateCoaching : BlogArticle +debateCoaching = + { articleName = String.toUpper "Debate Tutoring" + , articleLink = "" + , articleAuthor = "" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = False + , articleImage = "" + , articlePublished = "" + , articleBody = """ +This service is designed to help you gain an understanding of the fundamentals of debate, and the tools used in debate. The service spans five modules, covering fallacious reasoning, epistemology, and propositional logic. You're free to choose which modules you want to cover, based on your current knowledge and interests. +If interested clients choose to text their knowledge and sharpen their skills with mock debates, they may be subject to additional fees, as mock debates often involve the inclusion of skillful third parties against whom clients can spar. + +# WHAT YOU GET + +1. A five-module course covering critical thinking, debate strategy, and propositional logic, designed to strengthen your debating skills. + +2. Personalized feedback and guidance to boost your strategic thinking, verbal comfort, and overall debate effectiveness. + +3. Optional mock debates and staged confrontations, helping you gain experience and confidence in real-world debates. + +# SYLLABUS + +>## MODULE 1 +> +>• Study both common and obscure logical fallacies. +> +>• Learn to identify and rebut fallacious reasoning. +> +>• Test your knowledge of logical fallacies. + +>## MODULE 2 +> +>• Assignment review. +> +>• Study concepts related to formal logic and argumentation. +> +>• Learn the lexicon of debate and formal reasoning. +> +>• Test your knowledge of debate-related terminology. + +>## MODULE 3 +> +>• Assignment review. +> +>• Study philosophical concepts relevant to debate. +> +>• Learn about epistemology and the philosophy of science. +> +>• Test your knowledge of debate-related philosophical concepts. + +>## MODULE 4 +> +>• Assignment review. +> +>• Study the different modes of argumentation. +> +>• Learn the principles and axioms of propositional logic. +> +>• Test your knowledge of propositional logic fundamentals. + +>## MODULE 5 +> +>• Assignment review. +> +>• Study the inference rules of propositional logic. +> +>• Learn how to form valid formal arguments. +> +>• Test your knowledge of formal logic. + +>## OPTIONAL +> +>• Test your knowledge in an optional mock debate. +> +>• Choose between general, empirical, and NTT-style debate. +> +>• Have your performance analyzed in realtime. + +""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Pages/Services/Elm.elm b/packages/website/frontend/src/Pages/Services/Elm.elm new file mode 100755 index 0000000..b7652a1 --- /dev/null +++ b/packages/website/frontend/src/Pages/Services/Elm.elm @@ -0,0 +1,413 @@ +module Pages.Services.Elm exposing (Model, Msg, page) + +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Inner.Text exposing (renderCodeLine) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Services.Records.ElmBuilds exposing (servicesElmBuilds) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + , syntaxTheme + ) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , column + , el + , fill + , paddingEach + , paddingXY + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (rounded) +import Element.Font as F exposing (color) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Route.Path as Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "services (elmBuilds)" + , attributes = [] + , element = elmBuildsContainer shared.device + } + + +elmBuildsContainer : Device -> Element Msg +elmBuildsContainer device = + topLevelContainer (elmBuildsList device) + + +elmBuildsList : Device -> Element Msg +elmBuildsList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\service -> + cardMaker device + (C.BlogArticle service) + (contentList service + [ elmCodeRenderer device ] + MarkdownMsg + ) + ) + [ elmBuilds ] + ] + + +elmBuilds : BlogArticle +elmBuilds = + { articleName = String.toUpper "Elm Builds" + , articleLink = "" + , articleAuthor = "" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = False + , articleImage = "" + , articlePublished = "" + , articleBody = """ +The site that you're currently viewing this on was written by me in the Elm programming language, and I'm offering frontend development as a service at a fee that reflects my skill level. If you're in the market for a new frontend for your website, please inquire at [contact@upRootNutrition.com](mailto:). + +Below is an example of a helper function that I wrote for this site. This particular function extracts the first 80 words from all of my articles' markdown strings, and displays them as blurbs, followed by an ellipsis, in my article cards using my markdown parser. + +The source code for this website is viewable on [Gitlab](https://gitlab.com/upRootNutrition/website). + +# WHAT YOU GET + +1. An Elm-based website written to your specifications. + +2. Two revisions to better meet your needs and vision. + +3. Six months of free support to correct mistakes. + +# REQUIREMENTS + +• A clear vision of what you want your site to look like. + +• A clear description of your site's pages and structure. + +• Any bespoke frontend functionality you want included. + +# EXAMPLE + +""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } + + +elmCodeRenderer : Device -> Element msg +elmCodeRenderer device = + el + [ paddingEach + { top = 15 + , bottom = 15 + , left = 20 + , right = 20 + } + , case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + ( Tablet, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + _ -> + B.color (getThemeColor BackgroundLightGrey) + , D.rounded 10 + , width fill + , spacing 8 + ] + <| + column + [ F.size 14 + , spacing 5 + , width fill + ] + [ renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 0 0 ] + , text "extractFirstWords" + |> el [ F.color syntaxTheme.key ] + , text " : " + |> el [ F.color syntaxTheme.operator ] + , text "String" + |> el [ F.color syntaxTheme.keyword ] + , text " -> " + |> el [ F.color syntaxTheme.operator ] + , text "String" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 0 0 ] + , text "extractFirstWords" + |> el [ F.color syntaxTheme.key ] + , text " text" + , text " =" + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "let" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "words" + , text " =" + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 48 0 ] + , text "text" + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 64 0 ] + , text "|>" + |> el [ F.color syntaxTheme.operator ] + , text " String" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "split" + , text " " + |> el [ F.color syntaxTheme.string ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + , text " " + |> el [ F.color syntaxTheme.string ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 64 0 ] + , text "|>" + |> el [ F.color syntaxTheme.operator ] + , text " List" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "filter" + , text " (" + |> el [ F.color syntaxTheme.punctuation ] + , text "not" + , text " << " + |> el [ F.color syntaxTheme.operator ] + , text "String" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "isEmpty" + , text ")" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "truncatedWords" + , text " =" + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 48 0 ] + , text "List" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "take" + , text " 80" + |> el [ F.color syntaxTheme.string ] + , text " words" + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "wasTextTruncated" + , text " =" + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 48 0 ] + , text "List" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "length" + , text " words" + , text " > " + |> el [ F.color syntaxTheme.operator ] + , text "80" + |> el [ F.color syntaxTheme.string ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "result" + , text " =" + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 48 0 ] + , text "String" + , text "." + |> el [ F.color syntaxTheme.punctuation ] + , text "join" + , text " " + |> el [ F.color syntaxTheme.string ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + , text " " + |> el [ F.color syntaxTheme.string ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + , text " truncatedWords" + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "in" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "if" + |> el [ F.color syntaxTheme.keyword ] + , text " wasTextTruncated" + , text " then" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "result" + , text " ++ " + |> el [ F.color syntaxTheme.operator ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + , text "..." + |> el [ F.color syntaxTheme.string ] + , text "\"" + |> el [ F.color syntaxTheme.string ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "else" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "result" + ] + ] diff --git a/packages/website/frontend/src/Pages/Services/Nix.elm b/packages/website/frontend/src/Pages/Services/Nix.elm new file mode 100755 index 0000000..be52d59 --- /dev/null +++ b/packages/website/frontend/src/Pages/Services/Nix.elm @@ -0,0 +1,541 @@ +module Pages.Services.Nix exposing (Model, Msg, page) + +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Inner.Text exposing (renderCodeLine) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Services.Records.NixBuilds exposing (servicesNixBuilds) +import Config.Style.Colour.Helpers + exposing + ( ThemeColor(..) + , getThemeColor + , syntaxTheme + ) +import Config.Style.Colour.Types exposing (SyntaxColors) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , column + , el + , fill + , paddingEach + , paddingXY + , paragraph + , spacing + , text + , width + ) +import Element.Background as B exposing (color) +import Element.Border as D exposing (rounded) +import Element.Font as F exposing (color) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Route.Path as Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "services (nixConfigs)" + , attributes = [] + , element = elmBuildsContainer shared.device + } + + +elmBuildsContainer : Device -> Element Msg +elmBuildsContainer device = + topLevelContainer (elmBuildsList device) + + +elmBuildsList : Device -> Element Msg +elmBuildsList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\service -> + cardMaker device + (C.BlogArticle service) + (contentList service + [ nixCodeRenderer device ] + MarkdownMsg + ) + ) + [ nixBuilds ] + ] + + +nixBuilds : BlogArticle +nixBuilds = + { articleName = String.toUpper "Nix Builds" + , articleLink = "" + , articleAuthor = "" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = False + , articleImage = "" + , articlePublished = "" + , articleBody = """ +NixOS has become popular in my community, with many people choosing to explore it over Windows, MacOS, and other Linux distributions. Naturally, as a consequence of this, I receive numerous requests for help regarding the Nix programming language and NixOS system configuration. So, to fast-track newcomers and to make my life a little bit easier for both of us, I'm offering to build custom NixOS configurations for interested clients. +If you're interested in having a custom Nix configuration, or having a pre-existing configuration refactored, please inquire at [contact@upRootNutrition.com](mailto:). + +Below is an example of a nix flake that I wrote for the devshell that I used to manage and isolate the development environment for this site. All of the packages, pre-defined settings, and tooling used for this site are managed through this flake. + +The source code for my Nix server is viewable on [Gitlab](https://gitlab.com/upRootNutrition/dotfiles). + +# WHAT YOU GET + +1. A NixOS configuration written to your specifications. + +2. Two refactors for the purposes of improving readability. + +3. Instructions for how to use and build upon your configuration. + +# REQUIREMENTS + +• A comprehensive list of packages you'd like included. + +• A list of configuration architecture specifications. + +• Any bespoke configuration you want included. + +# EXAMPLE + +""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } + + +renderCodeLine : SyntaxColors -> List (Element msg) -> Element msg +renderCodeLine colors elements = + paragraph + [ F.color colors.text + , F.alignLeft + , F.family + [ F.monospace ] + ] + elements + + +nixCodeRenderer : Device -> Element msg +nixCodeRenderer device = + el + [ paddingEach + { top = 15 + , bottom = 15 + , left = 20 + , right = 20 + } + , case ( device.class, device.orientation ) of + ( Phone, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + ( Tablet, Portrait ) -> + B.color (getThemeColor BackgroundDarkGrey) + + _ -> + B.color (getThemeColor BackgroundLightGrey) + , D.rounded 10 + , width fill + , spacing 8 + ] + <| + column + [ F.size 14 + , spacing 5 + , width fill + ] + [ renderCodeLine syntaxTheme + [ text "{" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "description" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "\"Elm/Haskell Environment\"" + |> el [ F.color syntaxTheme.string ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "inputs" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "{" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "nixpkgs.url" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "\"github:NixOS/nixpkgs/nixos-unstable\"" + |> el [ F.color syntaxTheme.string ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "nixpkgs-stable.url" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "\"github:NixOS/nixpkgs/nixos-23.11\"" + |> el [ F.color syntaxTheme.string ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "haskell-flake.url" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "\"github:srid/haskell-flake\"" + |> el [ F.color syntaxTheme.string ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "outputs" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "inputs" + |> el [ F.color syntaxTheme.keyword ] + , text " @ " + |> el [ F.color syntaxTheme.operator ] + , text "{" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "flake-parts" + |> el [ F.color syntaxTheme.keyword ] + , text "," + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "self" + |> el [ F.color syntaxTheme.keyword ] + , text "," + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "..." + |> el [ F.color syntaxTheme.operator ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ": " + |> el [ F.color syntaxTheme.operator ] + , text "let" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "system" + |> el [ F.color syntaxTheme.keyword ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "\"x86_64-linux\"" + |> el [ F.color syntaxTheme.string ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 8 0 ] + , text "in" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "flake-parts.lib.mkFlake" + |> el [ F.color syntaxTheme.keyword ] + , text " { " + |> el [ F.color syntaxTheme.punctuation ] + , text "inherit inputs" + |> el [ F.color syntaxTheme.keyword ] + , text " } " + |> el [ F.color syntaxTheme.punctuation ] + , text "{" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 24 0 ] + , text "imports" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "[" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "./parts" + |> el [ F.color syntaxTheme.string ] + , text "," + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "inputs.haskell-flake.flakeModule" + |> el [ F.color syntaxTheme.keyword ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 24 0 ] + , text "]" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 24 0 ] + , text "systems" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "[ " + |> el [ F.color syntaxTheme.punctuation ] + , text "system" + |> el [ F.color syntaxTheme.keyword ] + , text " ]" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 24 0 ] + , text "perSystem" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "{ " + |> el [ F.color syntaxTheme.punctuation ] + , text "pkgs" + |> el [ F.color syntaxTheme.keyword ] + , text ", ... " + |> el [ F.color syntaxTheme.operator ] + , text "} " + |> el [ F.color syntaxTheme.punctuation ] + , text ": " + |> el [ F.color syntaxTheme.operator ] + , text "{" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "_module.args.pkgs" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "import" + |> el [ F.color syntaxTheme.keyword ] + , text " inputs.nixpkgs " + |> el [ F.color syntaxTheme.keyword ] + , text "{ " + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 40 0 ] + , text "inherit system" + |> el [ F.color syntaxTheme.key ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "_module.args.pkgs-stable" + |> el [ F.color syntaxTheme.key ] + , text " = " + |> el [ F.color syntaxTheme.operator ] + , text "import" + |> el [ F.color syntaxTheme.keyword ] + , text " inputs.nixpkgs-stable " + |> el [ F.color syntaxTheme.keyword ] + , text "{ " + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 40 0 ] + , text "inherit system" + |> el [ F.color syntaxTheme.key ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 32 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 24 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "" + |> el [ paddingXY 16 0 ] + , text "}" + |> el [ F.color syntaxTheme.punctuation ] + , text ";" + |> el [ F.color syntaxTheme.punctuation ] + ] + , renderCodeLine syntaxTheme + [ text "}" + |> el [ F.color syntaxTheme.punctuation ] + ] + ] diff --git a/packages/website/frontend/src/Pages/Services/Nutrition.elm b/packages/website/frontend/src/Pages/Services/Nutrition.elm new file mode 100755 index 0000000..b3cb3c0 --- /dev/null +++ b/packages/website/frontend/src/Pages/Services/Nutrition.elm @@ -0,0 +1,183 @@ +module Pages.Services.Nutrition exposing (Model, Msg, page) + +import Config.Helpers.Articles.Article exposing (contentList) +import Config.Helpers.Articles.Markdown as Markdown +import Config.Helpers.Cards.Inner.BuyButton exposing (buyButton) +import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker) +import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..)) +import Config.Helpers.Headers.Types exposing (Header) +import Config.Helpers.Response + exposing + ( pageList + , topLevelContainer + ) +import Config.Helpers.Viewport exposing (resetViewport) +import Config.Pages.Blogs.Types exposing (BlogArticle) +import Config.Pages.Services.Records.NutritionScience exposing (servicesNutritionScience) +import Config.Style.Colour.Helpers exposing (colourTheme) +import Effect exposing (Effect) +import Element as E + exposing + ( Device + , DeviceClass(..) + , Element + , Orientation(..) + , centerX + , column + , el + , paddingXY + ) +import Layouts +import Page exposing (Page) +import Ports +import Route exposing (Route) +import Route.Path as Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + |> Page.withLayout toLayout + + +toLayout : Model -> Layouts.Layout Msg +toLayout model = + Layouts.Navbar {} + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.map + (\_ -> NoOp) + (Effect.sendCmd resetViewport) + ) + + + +-- UPDATE + + +type Msg + = NoOp + | MarkdownMsg Markdown.Msg + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + MarkdownMsg (Markdown.ScrollToElement elementId) -> + ( model + , Effect.sendCmd (Ports.scrollToElement elementId) + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + { title = "services (nutritionChat)" + , attributes = [] + , element = nutritionContainer shared.device + } + + +nutritionContainer : Device -> Element Msg +nutritionContainer device = + topLevelContainer (nutritionList device) + + +nutritionList : Device -> Element Msg +nutritionList device = + column + (case ( device.class, device.orientation ) of + _ -> + pageList device + ) + <| + List.concat + [ List.map + (\service -> + cardMaker device + (C.BlogArticle service) + (contentList service + [ el + [ paddingXY 0 10 + , centerX + ] + <| + buyButton "Book!" "https://buy.stripe.com/5kA5lz77pdJq6J28wz" + ] + MarkdownMsg + ) + ) + [ nutritionQA ] + ] + + +nutritionQA : BlogArticle +nutritionQA = + { articleName = String.toUpper "Nutrition Q&A" + , articleLink = "" + , articleAuthor = "" + , isNewTabLink = False + , hasReferences = False + , hasTableOfContents = False + , articleImage = "" + , articlePublished = "" + , articleBody = """ +This service is designed to help those interested in honing their nutrition science knowledge and boosting their intuition when reading nutrition science literature. Whether the client's goals are to achieve their academic ambitions, satisfy their personal curiosity, or improve their empirical debate chops. The client is free to guide the session in any direction they choose, so long as it is relevant to nutrition science. + +# BENEFITS + +1. One hour to ask me anything about nutrition science. + +2. Access to nutrition science evaluation cheat sheets. + +3. Sharper nutrition science critical appraisal skills. + +# REQUIREMENTS + +• A list of five clear questions related to nutrition science. + +""" + , articleReferences = + [ { author = "" + , title = "" + , journal = "" + , year = "" + , link = "" + } + ] + } diff --git a/packages/website/frontend/src/Ports.elm b/packages/website/frontend/src/Ports.elm new file mode 100755 index 0000000..84ba076 --- /dev/null +++ b/packages/website/frontend/src/Ports.elm @@ -0,0 +1,16 @@ +port module Ports exposing + ( copyToClipboard + , scrollToElement + , sendToLocalStorage + ) + +import Json.Encode as Encode + + +port sendToLocalStorage : { key : String, value : Encode.Value } -> Cmd msg + + +port copyToClipboard : String -> Cmd msg + + +port scrollToElement : String -> Cmd msg diff --git a/packages/website/frontend/src/Shared.elm b/packages/website/frontend/src/Shared.elm new file mode 100755 index 0000000..efe26e7 --- /dev/null +++ b/packages/website/frontend/src/Shared.elm @@ -0,0 +1,257 @@ +module Shared exposing + ( Flags, decoder + , Model, Msg + , init, update, subscriptions + ) + +{-| + +@docs Flags, decoder +@docs Model, Msg +@docs init, update, subscriptions + +-} + +import Browser.Events as BR exposing (..) +import Config.Data.Language as TyLang +import Dict +import Effect exposing (Effect, none) +import Element as E exposing (..) +import Json.Decode exposing (..) +import Route exposing (Route) +import Route.Path +import Shared.Model exposing (..) +import Shared.Msg + + + +-- FLAGS + + +type alias Flags = + { height : Int + , user : Maybe Shared.Model.User + , width : Int + } + + +decoder : Json.Decode.Decoder Flags +decoder = + Json.Decode.map3 + (\height user width -> + { height = height + , user = user + , width = width + } + ) + (field "height" int) + (field "user" (Json.Decode.maybe userDecoder)) + (field "width" int) + + +userDecoder : Json.Decode.Decoder Shared.Model.User +userDecoder = + Json.Decode.map2 Shared.Model.User + (Json.Decode.field "token" Json.Decode.string) + (Json.Decode.field "name" Json.Decode.string) + + + +-- INIT + + +type alias Model = + Shared.Model.Model + + +init : Result Json.Decode.Error Flags -> Route () -> ( Model, Effect Msg ) +init flagsResult route = + ( modelFromFlagsResult flagsResult + , Effect.none + ) + + +modelFromFlagsResult : Result Error Flags -> Model +modelFromFlagsResult f = + case f of + Ok flags -> + { device = classifyDevice flags + , height = flags.height + , isNavbarExpanded = False + , language = TyLang.English + , user = Just { token = "asht", name = "billy" } + , width = flags.width + , isPopUpClicked = False + } + + Err e -> + { device = + classifyDevice + { height = 0 + , width = 0 + } + , height = 10 + , isNavbarExpanded = False + , language = TyLang.English + , user = Nothing + , width = 10 + , isPopUpClicked = False + } + + + +-- UPDATE + + +type alias Msg = + Shared.Msg.Msg + + +update : Route () -> Msg -> Model -> ( Model, Effect Msg ) +update route msg model = + case msg of + Shared.Msg.Resize width height -> + ( { model + | device = + { height = height + , width = width + } + |> E.classifyDevice + , height = height + , width = width + } + , Effect.none + ) + + Shared.Msg.ToggleNavbarExpansion -> + ( { model | isNavbarExpanded = not model.isNavbarExpanded } + , Effect.none + ) + + Shared.Msg.TogglePopUp -> + ( { model | isPopUpClicked = not model.isPopUpClicked } + , Effect.none + ) + + Shared.Msg.SignIn user -> + ( { model | user = Just user } + , Effect.batch + [ Effect.pushRoute + { path = + Dict.get "from" route.query + |> Maybe.andThen Route.Path.fromString + |> Maybe.withDefault Route.Path.Contact + , query = Dict.empty + , hash = Nothing + } + , Effect.saveUser user + ] + ) + + Shared.Msg.SignOut -> + ( { model | user = Nothing } + , Effect.clearUser + ) + + Shared.Msg.ToggleLanguage -> + ( { model + | language = + case model.language of + TyLang.Bulgarian -> + TyLang.Chinese + + TyLang.Chinese -> + TyLang.Czech + + TyLang.Czech -> + TyLang.Danish + + TyLang.Danish -> + TyLang.Dutch + + TyLang.Dutch -> + TyLang.English + + TyLang.English -> + TyLang.Estonian + + TyLang.Estonian -> + TyLang.Finnish + + TyLang.Finnish -> + TyLang.French + + TyLang.French -> + TyLang.German + + TyLang.German -> + TyLang.Greek + + TyLang.Greek -> + TyLang.Hungarian + + TyLang.Hungarian -> + TyLang.Indonesian + + TyLang.Indonesian -> + TyLang.Italian + + TyLang.Italian -> + TyLang.Japanese + + TyLang.Japanese -> + TyLang.Korean + + TyLang.Korean -> + TyLang.Latvian + + TyLang.Latvian -> + TyLang.Lithuanian + + TyLang.Lithuanian -> + TyLang.Norwegian + + TyLang.Norwegian -> + TyLang.Polish + + TyLang.Polish -> + TyLang.Portuguese + + TyLang.Portuguese -> + TyLang.Romanian + + TyLang.Romanian -> + TyLang.Russian + + TyLang.Russian -> + TyLang.Slovak + + TyLang.Slovak -> + TyLang.Slovenian + + TyLang.Slovenian -> + TyLang.Spanish + + TyLang.Spanish -> + TyLang.Swedish + + TyLang.Swedish -> + TyLang.Turkish + + TyLang.Turkish -> + TyLang.Ukranian + + TyLang.Ukranian -> + TyLang.Bulgarian + } + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Route () -> Model -> Sub Msg +subscriptions route model = + BR.onResize Shared.Msg.Resize diff --git a/packages/website/frontend/src/Shared/Model.elm b/packages/website/frontend/src/Shared/Model.elm new file mode 100755 index 0000000..1917634 --- /dev/null +++ b/packages/website/frontend/src/Shared/Model.elm @@ -0,0 +1,21 @@ +module Shared.Model exposing (Model, User) + +import Config.Data.Language as TyLang +import Element exposing (Device) + + +type alias Model = + { height : Int + , width : Int + , device : Device + , language : TyLang.Language + , isNavbarExpanded : Bool + , user : Maybe User + , isPopUpClicked : Bool + } + + +type alias User = + { token : String + , name : String + } diff --git a/packages/website/frontend/src/Shared/Msg.elm b/packages/website/frontend/src/Shared/Msg.elm new file mode 100755 index 0000000..8a11a8e --- /dev/null +++ b/packages/website/frontend/src/Shared/Msg.elm @@ -0,0 +1,22 @@ +module Shared.Msg exposing (Msg(..)) + +{-| -} + + +{-| Normally, this value would live in "Shared.elm" +but that would lead to a circular dependency import cycle. + +For that reason, both `Shared.Model` and `Shared.Msg` are in their +own file, so they can be imported by `Effect.elm` + +-} +type Msg + = Resize Int Int + | SignIn + { token : String + , name : String + } + | SignOut + | ToggleLanguage + | ToggleNavbarExpansion + | TogglePopUp diff --git a/packages/website/frontend/src/View.elm b/packages/website/frontend/src/View.elm new file mode 100755 index 0000000..823d7e9 --- /dev/null +++ b/packages/website/frontend/src/View.elm @@ -0,0 +1,89 @@ +module View exposing + ( View, map + , none, fromString + , toBrowserDocument + ) + +{-| + +@docs View, map +@docs none, fromString +@docs toBrowserDocument + +-} + +import Browser +import Element exposing (Attribute, Element, layout, mapAttribute, text) +import Route exposing (Route) +import Shared.Model + + +type alias View msg = + { title : String + , attributes : List (Attribute msg) + , element : Element msg + } + + +{-| Used internally by Elm Land to create your application +so it works with Elm's expected `Browser.Document msg` type. +-} +toBrowserDocument : + { shared : Shared.Model.Model + , route : Route () + , view : View msg + } + -> Browser.Document msg +toBrowserDocument { view } = + { title = view.title + , body = [ layout view.attributes view.element ] + } + + + +-- toBrowserDocument : +-- { shared : Shared.Model.Model +-- , route : Route () +-- , view : View msg +-- } +-- -> Browser.Document msg +-- toBrowserDocument { view } = +-- { title = view.title +-- , body = view.body +-- } + + +{-| Used internally by Elm Land to connect your pages together. +-} +map : (msg1 -> msg2) -> View msg1 -> View msg2 +map fn view = + { title = view.title + , attributes = List.map (mapAttribute fn) view.attributes + , element = Element.map fn view.element + } + + +{-| Used internally by Elm Land whenever transitioning between +authenticated pages. +-} +none : View msg +none = + { title = "" + , attributes = [] + , element = Element.none + } + + +{-| If you customize the `View` module, anytime you run `elm-land add page`, +the generated page will use this when adding your `view` function. + +That way your app will compile after adding new pages, and you can see +the new page working in the web browser! + +-} +fromString : String -> View msg +fromString moduleName = + { title = moduleName + , attributes = [] + , element = text moduleName + } diff --git a/packages/website/frontend/src/interop.ts b/packages/website/frontend/src/interop.ts new file mode 100755 index 0000000..afddefc --- /dev/null +++ b/packages/website/frontend/src/interop.ts @@ -0,0 +1,48 @@ +// On init: +export const flags = ({ env }) => { + return { + height: window.innerHeight, + user: JSON.parse(window.localStorage.user || null), + width: window.innerWidth, + }; +}; + +// While running: +export const onReady = ({ app, env }) => { + app.ports.copyToClipboard.subscribe(function (text) { + navigator.clipboard.writeText(text).catch(function (err) { + console.error("Failed to copy text: ", err); + }); + }); + + app.ports.scrollToElement.subscribe(function (elementId) { + const element = document.getElementById(elementId); + if (element) { + element.scrollIntoView({ behavior: "smooth", block: "start" }); + } + }); + // app.ports.copy.subscribe((text: string) => { + // const clipboard = navigator.clipboard; + // if (!clipboard) return; + // clipboard.writeText(text); + // }); + + // app.ports.popup.subscribe(() => { + // setTimeout(() => { + // app.ports.popupDone.send(null); + // }, 2000); + // }); + + // if (app.ports && app.ports.sendToLocalStorage) { + // app.ports.sendToLocalStorage.subscribe(({ key, value }) => { + // window.localStorage[key] = JSON.stringify(value); + // }); + // } + + // app.ports.arrow.subscribe((text: string) => { + // const elements = document.getElementsByClassName(text); + // Array.from(elements).forEach(element => { + // element.setAttribute('display', 'highlight'); + // }); + // }) +}; diff --git a/packages/website/frontend/static/arguments/abortion.png b/packages/website/frontend/static/arguments/abortion.png new file mode 100755 index 0000000..e2ba2bd Binary files /dev/null and b/packages/website/frontend/static/arguments/abortion.png differ diff --git a/packages/website/frontend/static/arguments/agnostic.png b/packages/website/frontend/static/arguments/agnostic.png new file mode 100755 index 0000000..4b199f8 Binary files /dev/null and b/packages/website/frontend/static/arguments/agnostic.png differ diff --git a/packages/website/frontend/static/arguments/anabolicketo.png b/packages/website/frontend/static/arguments/anabolicketo.png new file mode 100755 index 0000000..cf62ee4 Binary files /dev/null and b/packages/website/frontend/static/arguments/anabolicketo.png differ diff --git a/packages/website/frontend/static/arguments/animalrights.png b/packages/website/frontend/static/arguments/animalrights.png new file mode 100755 index 0000000..2a4deb9 Binary files /dev/null and b/packages/website/frontend/static/arguments/animalrights.png differ diff --git a/packages/website/frontend/static/arguments/antagonisticpleiotropy.png b/packages/website/frontend/static/arguments/antagonisticpleiotropy.png new file mode 100755 index 0000000..ab71220 Binary files /dev/null and b/packages/website/frontend/static/arguments/antagonisticpleiotropy.png differ diff --git a/packages/website/frontend/static/arguments/antivandalism.png b/packages/website/frontend/static/arguments/antivandalism.png new file mode 100755 index 0000000..0e2df47 Binary files /dev/null and b/packages/website/frontend/static/arguments/antivandalism.png differ diff --git a/packages/website/frontend/static/arguments/carbobesity.png b/packages/website/frontend/static/arguments/carbobesity.png new file mode 100755 index 0000000..7533e94 Binary files /dev/null and b/packages/website/frontend/static/arguments/carbobesity.png differ diff --git a/packages/website/frontend/static/arguments/cateupfreductio.png b/packages/website/frontend/static/arguments/cateupfreductio.png new file mode 100755 index 0000000..f72d466 Binary files /dev/null and b/packages/website/frontend/static/arguments/cateupfreductio.png differ diff --git a/packages/website/frontend/static/arguments/chocolate.png b/packages/website/frontend/static/arguments/chocolate.png new file mode 100755 index 0000000..d543de9 Binary files /dev/null and b/packages/website/frontend/static/arguments/chocolate.png differ diff --git a/packages/website/frontend/static/arguments/coconutoil.png b/packages/website/frontend/static/arguments/coconutoil.png new file mode 100755 index 0000000..32162f9 Binary files /dev/null and b/packages/website/frontend/static/arguments/coconutoil.png differ diff --git a/packages/website/frontend/static/arguments/colonizingnature.png b/packages/website/frontend/static/arguments/colonizingnature.png new file mode 100755 index 0000000..d4a4784 Binary files /dev/null and b/packages/website/frontend/static/arguments/colonizingnature.png differ diff --git a/packages/website/frontend/static/arguments/cowrape.png b/packages/website/frontend/static/arguments/cowrape.png new file mode 100755 index 0000000..a251b04 Binary files /dev/null and b/packages/website/frontend/static/arguments/cowrape.png differ diff --git a/packages/website/frontend/static/arguments/cropdeaths.png b/packages/website/frontend/static/arguments/cropdeaths.png new file mode 100755 index 0000000..bfb88b9 Binary files /dev/null and b/packages/website/frontend/static/arguments/cropdeaths.png differ diff --git a/packages/website/frontend/static/arguments/dairy.png b/packages/website/frontend/static/arguments/dairy.png new file mode 100755 index 0000000..73a5b79 Binary files /dev/null and b/packages/website/frontend/static/arguments/dairy.png differ diff --git a/packages/website/frontend/static/arguments/dietarycholesterol.png b/packages/website/frontend/static/arguments/dietarycholesterol.png new file mode 100755 index 0000000..09f15a0 Binary files /dev/null and b/packages/website/frontend/static/arguments/dietarycholesterol.png differ diff --git a/packages/website/frontend/static/arguments/efilism.png b/packages/website/frontend/static/arguments/efilism.png new file mode 100755 index 0000000..527f800 Binary files /dev/null and b/packages/website/frontend/static/arguments/efilism.png differ diff --git a/packages/website/frontend/static/arguments/epidemiologycausality.png b/packages/website/frontend/static/arguments/epidemiologycausality.png new file mode 100755 index 0000000..d87556e Binary files /dev/null and b/packages/website/frontend/static/arguments/epidemiologycausality.png differ diff --git a/packages/website/frontend/static/arguments/ethicalslurs.png b/packages/website/frontend/static/arguments/ethicalslurs.png new file mode 100755 index 0000000..0540448 Binary files /dev/null and b/packages/website/frontend/static/arguments/ethicalslurs.png differ diff --git a/packages/website/frontend/static/arguments/fattyfish.png b/packages/website/frontend/static/arguments/fattyfish.png new file mode 100755 index 0000000..e6a8ac2 Binary files /dev/null and b/packages/website/frontend/static/arguments/fattyfish.png differ diff --git a/packages/website/frontend/static/arguments/fibre.png b/packages/website/frontend/static/arguments/fibre.png new file mode 100755 index 0000000..658f5b5 Binary files /dev/null and b/packages/website/frontend/static/arguments/fibre.png differ diff --git a/packages/website/frontend/static/arguments/finetuning.png b/packages/website/frontend/static/arguments/finetuning.png new file mode 100755 index 0000000..dd6d304 Binary files /dev/null and b/packages/website/frontend/static/arguments/finetuning.png differ diff --git a/packages/website/frontend/static/arguments/flatearth.png b/packages/website/frontend/static/arguments/flatearth.png new file mode 100755 index 0000000..399eb29 Binary files /dev/null and b/packages/website/frontend/static/arguments/flatearth.png differ diff --git a/packages/website/frontend/static/arguments/foodsubstitution.png b/packages/website/frontend/static/arguments/foodsubstitution.png new file mode 100755 index 0000000..b0e5a89 Binary files /dev/null and b/packages/website/frontend/static/arguments/foodsubstitution.png differ diff --git a/packages/website/frontend/static/arguments/fructosenafld.png b/packages/website/frontend/static/arguments/fructosenafld.png new file mode 100755 index 0000000..d43958d Binary files /dev/null and b/packages/website/frontend/static/arguments/fructosenafld.png differ diff --git a/packages/website/frontend/static/arguments/healthfoods.png b/packages/website/frontend/static/arguments/healthfoods.png new file mode 100755 index 0000000..93a038f Binary files /dev/null and b/packages/website/frontend/static/arguments/healthfoods.png differ diff --git a/packages/website/frontend/static/arguments/healthseeker.png b/packages/website/frontend/static/arguments/healthseeker.png new file mode 100755 index 0000000..84a4a05 Binary files /dev/null and b/packages/website/frontend/static/arguments/healthseeker.png differ diff --git a/packages/website/frontend/static/arguments/immortality.png b/packages/website/frontend/static/arguments/immortality.png new file mode 100755 index 0000000..99506b6 Binary files /dev/null and b/packages/website/frontend/static/arguments/immortality.png differ diff --git a/packages/website/frontend/static/arguments/lipoprotein.png b/packages/website/frontend/static/arguments/lipoprotein.png new file mode 100755 index 0000000..a8d498e Binary files /dev/null and b/packages/website/frontend/static/arguments/lipoprotein.png differ diff --git a/packages/website/frontend/static/arguments/luigiterrorist.png b/packages/website/frontend/static/arguments/luigiterrorist.png new file mode 100755 index 0000000..905f0a3 Binary files /dev/null and b/packages/website/frontend/static/arguments/luigiterrorist.png differ diff --git a/packages/website/frontend/static/arguments/mda.png b/packages/website/frontend/static/arguments/mda.png new file mode 100755 index 0000000..19bb44a Binary files /dev/null and b/packages/website/frontend/static/arguments/mda.png differ diff --git a/packages/website/frontend/static/arguments/oddorderpredators.png b/packages/website/frontend/static/arguments/oddorderpredators.png new file mode 100755 index 0000000..d94b0a1 Binary files /dev/null and b/packages/website/frontend/static/arguments/oddorderpredators.png differ diff --git a/packages/website/frontend/static/arguments/omega6omega3ratio.png b/packages/website/frontend/static/arguments/omega6omega3ratio.png new file mode 100755 index 0000000..740214f Binary files /dev/null and b/packages/website/frontend/static/arguments/omega6omega3ratio.png differ diff --git a/packages/website/frontend/static/arguments/ostroveganism.png b/packages/website/frontend/static/arguments/ostroveganism.png new file mode 100755 index 0000000..4e63876 Binary files /dev/null and b/packages/website/frontend/static/arguments/ostroveganism.png differ diff --git a/packages/website/frontend/static/arguments/pagers.png b/packages/website/frontend/static/arguments/pagers.png new file mode 100755 index 0000000..d3a3724 Binary files /dev/null and b/packages/website/frontend/static/arguments/pagers.png differ diff --git a/packages/website/frontend/static/arguments/plantbasedcvd.png b/packages/website/frontend/static/arguments/plantbasedcvd.png new file mode 100755 index 0000000..5ec755f Binary files /dev/null and b/packages/website/frontend/static/arguments/plantbasedcvd.png differ diff --git a/packages/website/frontend/static/arguments/plantfoods.png b/packages/website/frontend/static/arguments/plantfoods.png new file mode 100755 index 0000000..5ce5f43 Binary files /dev/null and b/packages/website/frontend/static/arguments/plantfoods.png differ diff --git a/packages/website/frontend/static/arguments/pollinationreductio.png b/packages/website/frontend/static/arguments/pollinationreductio.png new file mode 100755 index 0000000..16de505 Binary files /dev/null and b/packages/website/frontend/static/arguments/pollinationreductio.png differ diff --git a/packages/website/frontend/static/arguments/polyphenolreductio.png b/packages/website/frontend/static/arguments/polyphenolreductio.png new file mode 100755 index 0000000..d1b3b82 Binary files /dev/null and b/packages/website/frontend/static/arguments/polyphenolreductio.png differ diff --git a/packages/website/frontend/static/arguments/predatoragriculture.png b/packages/website/frontend/static/arguments/predatoragriculture.png new file mode 100755 index 0000000..1a6dacf Binary files /dev/null and b/packages/website/frontend/static/arguments/predatoragriculture.png differ diff --git a/packages/website/frontend/static/arguments/processedmeat.png b/packages/website/frontend/static/arguments/processedmeat.png new file mode 100755 index 0000000..29ac296 Binary files /dev/null and b/packages/website/frontend/static/arguments/processedmeat.png differ diff --git a/packages/website/frontend/static/arguments/redmeat.png b/packages/website/frontend/static/arguments/redmeat.png new file mode 100755 index 0000000..f40b91d Binary files /dev/null and b/packages/website/frontend/static/arguments/redmeat.png differ diff --git a/packages/website/frontend/static/arguments/rewilding.png b/packages/website/frontend/static/arguments/rewilding.png new file mode 100755 index 0000000..d37ca6e Binary files /dev/null and b/packages/website/frontend/static/arguments/rewilding.png differ diff --git a/packages/website/frontend/static/arguments/saturatedfat.png b/packages/website/frontend/static/arguments/saturatedfat.png new file mode 100755 index 0000000..5f38ada Binary files /dev/null and b/packages/website/frontend/static/arguments/saturatedfat.png differ diff --git a/packages/website/frontend/static/arguments/seedoils.png b/packages/website/frontend/static/arguments/seedoils.png new file mode 100755 index 0000000..4245e01 Binary files /dev/null and b/packages/website/frontend/static/arguments/seedoils.png differ diff --git a/packages/website/frontend/static/arguments/sodiumcvd.png b/packages/website/frontend/static/arguments/sodiumcvd.png new file mode 100755 index 0000000..4a11ba9 Binary files /dev/null and b/packages/website/frontend/static/arguments/sodiumcvd.png differ diff --git a/packages/website/frontend/static/arguments/soyproducts.png b/packages/website/frontend/static/arguments/soyproducts.png new file mode 100755 index 0000000..fac799e Binary files /dev/null and b/packages/website/frontend/static/arguments/soyproducts.png differ diff --git a/packages/website/frontend/static/arguments/tattooscratchers.png b/packages/website/frontend/static/arguments/tattooscratchers.png new file mode 100755 index 0000000..b4e7f8e Binary files /dev/null and b/packages/website/frontend/static/arguments/tattooscratchers.png differ diff --git a/packages/website/frontend/static/arguments/tmaocausality.png b/packages/website/frontend/static/arguments/tmaocausality.png new file mode 100755 index 0000000..e5d1063 Binary files /dev/null and b/packages/website/frontend/static/arguments/tmaocausality.png differ diff --git a/packages/website/frontend/static/arguments/transpeople.png b/packages/website/frontend/static/arguments/transpeople.png new file mode 100755 index 0000000..a91e98d Binary files /dev/null and b/packages/website/frontend/static/arguments/transpeople.png differ diff --git a/packages/website/frontend/static/arguments/truncatedmetas.png b/packages/website/frontend/static/arguments/truncatedmetas.png new file mode 100755 index 0000000..6a2cf7d Binary files /dev/null and b/packages/website/frontend/static/arguments/truncatedmetas.png differ diff --git a/packages/website/frontend/static/arguments/vegansociety.png b/packages/website/frontend/static/arguments/vegansociety.png new file mode 100755 index 0000000..e68a517 Binary files /dev/null and b/packages/website/frontend/static/arguments/vegansociety.png differ diff --git a/packages/website/frontend/static/assets/favicon.png b/packages/website/frontend/static/assets/favicon.png new file mode 100755 index 0000000..f8ba801 Binary files /dev/null and b/packages/website/frontend/static/assets/favicon.png differ diff --git a/packages/website/frontend/static/assets/logo.png b/packages/website/frontend/static/assets/logo.png new file mode 100755 index 0000000..b6c7ca3 Binary files /dev/null and b/packages/website/frontend/static/assets/logo.png differ diff --git a/packages/website/frontend/static/assets/logo.svg b/packages/website/frontend/static/assets/logo.svg new file mode 100755 index 0000000..bc6f912 --- /dev/null +++ b/packages/website/frontend/static/assets/logo.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/logo_extended.png b/packages/website/frontend/static/assets/logo_extended.png new file mode 100755 index 0000000..165fecf Binary files /dev/null and b/packages/website/frontend/static/assets/logo_extended.png differ diff --git a/packages/website/frontend/static/assets/logo_extended.svg b/packages/website/frontend/static/assets/logo_extended.svg new file mode 100755 index 0000000..17a5eb2 --- /dev/null +++ b/packages/website/frontend/static/assets/logo_extended.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/logo_lambda.png b/packages/website/frontend/static/assets/logo_lambda.png new file mode 100755 index 0000000..cc1e85f Binary files /dev/null and b/packages/website/frontend/static/assets/logo_lambda.png differ diff --git a/packages/website/frontend/static/assets/logo_lambda_square.png b/packages/website/frontend/static/assets/logo_lambda_square.png new file mode 100755 index 0000000..ba7e6f2 Binary files /dev/null and b/packages/website/frontend/static/assets/logo_lambda_square.png differ diff --git a/packages/website/frontend/static/assets/logo_n.svg b/packages/website/frontend/static/assets/logo_n.svg new file mode 100755 index 0000000..f1702da --- /dev/null +++ b/packages/website/frontend/static/assets/logo_n.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/logo_r.png b/packages/website/frontend/static/assets/logo_r.png new file mode 100755 index 0000000..e598d5d Binary files /dev/null and b/packages/website/frontend/static/assets/logo_r.png differ diff --git a/packages/website/frontend/static/assets/logo_r.svg b/packages/website/frontend/static/assets/logo_r.svg new file mode 100755 index 0000000..bffb415 --- /dev/null +++ b/packages/website/frontend/static/assets/logo_r.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/logo_r_square.png b/packages/website/frontend/static/assets/logo_r_square.png new file mode 100755 index 0000000..dcd1be4 Binary files /dev/null and b/packages/website/frontend/static/assets/logo_r_square.png differ diff --git a/packages/website/frontend/static/assets/logo_u.png b/packages/website/frontend/static/assets/logo_u.png new file mode 100755 index 0000000..60845ca Binary files /dev/null and b/packages/website/frontend/static/assets/logo_u.png differ diff --git a/packages/website/frontend/static/assets/logo_u.svg b/packages/website/frontend/static/assets/logo_u.svg new file mode 100755 index 0000000..58f135b --- /dev/null +++ b/packages/website/frontend/static/assets/logo_u.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/website/frontend/static/assets/logo_u_square.png b/packages/website/frontend/static/assets/logo_u_square.png new file mode 100755 index 0000000..cb83d5e Binary files /dev/null and b/packages/website/frontend/static/assets/logo_u_square.png differ diff --git a/packages/website/frontend/static/assets/meta.png b/packages/website/frontend/static/assets/meta.png new file mode 100755 index 0000000..dd9898b Binary files /dev/null and b/packages/website/frontend/static/assets/meta.png differ diff --git a/packages/website/frontend/static/assets/nutridex.png b/packages/website/frontend/static/assets/nutridex.png new file mode 100755 index 0000000..12ea8f8 Binary files /dev/null and b/packages/website/frontend/static/assets/nutridex.png differ diff --git a/packages/website/frontend/static/assets/nutridex.svg b/packages/website/frontend/static/assets/nutridex.svg new file mode 100755 index 0000000..216d3cc --- /dev/null +++ b/packages/website/frontend/static/assets/nutridex.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/nutridex_brightorange.svg b/packages/website/frontend/static/assets/nutridex_brightorange.svg new file mode 100755 index 0000000..b270420 --- /dev/null +++ b/packages/website/frontend/static/assets/nutridex_brightorange.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/nutridex_darkorange.svg b/packages/website/frontend/static/assets/nutridex_darkorange.svg new file mode 100755 index 0000000..68f8518 --- /dev/null +++ b/packages/website/frontend/static/assets/nutridex_darkorange.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/website/frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png b/packages/website/frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png new file mode 100755 index 0000000..559a0b6 Binary files /dev/null and b/packages/website/frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png differ diff --git a/packages/website/frontend/static/assets/twittercard.png b/packages/website/frontend/static/assets/twittercard.png new file mode 100755 index 0000000..7edd955 Binary files /dev/null and b/packages/website/frontend/static/assets/twittercard.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise.png b/packages/website/frontend/static/blog/bigfatsurprise.png new file mode 100755 index 0000000..e2d75d8 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image1.png b/packages/website/frontend/static/blog/bigfatsurprise/image1.png new file mode 100755 index 0000000..5f80fd5 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image1.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image10.png b/packages/website/frontend/static/blog/bigfatsurprise/image10.png new file mode 100755 index 0000000..6ee5460 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image10.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image11.png b/packages/website/frontend/static/blog/bigfatsurprise/image11.png new file mode 100755 index 0000000..217d1cd Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image11.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image12.png b/packages/website/frontend/static/blog/bigfatsurprise/image12.png new file mode 100755 index 0000000..2ebd820 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image12.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image2.png b/packages/website/frontend/static/blog/bigfatsurprise/image2.png new file mode 100755 index 0000000..996e007 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image2.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image3.png b/packages/website/frontend/static/blog/bigfatsurprise/image3.png new file mode 100755 index 0000000..194d7ed Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image3.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image4.png b/packages/website/frontend/static/blog/bigfatsurprise/image4.png new file mode 100755 index 0000000..c02d25a Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image4.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image5.png b/packages/website/frontend/static/blog/bigfatsurprise/image5.png new file mode 100755 index 0000000..89563b7 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image5.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image6.png b/packages/website/frontend/static/blog/bigfatsurprise/image6.png new file mode 100755 index 0000000..e6c2f8f Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image6.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image7.png b/packages/website/frontend/static/blog/bigfatsurprise/image7.png new file mode 100755 index 0000000..fd53eeb Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image7.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image8.png b/packages/website/frontend/static/blog/bigfatsurprise/image8.png new file mode 100755 index 0000000..a742371 Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image8.png differ diff --git a/packages/website/frontend/static/blog/bigfatsurprise/image9.png b/packages/website/frontend/static/blog/bigfatsurprise/image9.png new file mode 100755 index 0000000..2e242bf Binary files /dev/null and b/packages/website/frontend/static/blog/bigfatsurprise/image9.png differ diff --git a/packages/website/frontend/static/blog/everettvegans.png b/packages/website/frontend/static/blog/everettvegans.png new file mode 100755 index 0000000..6f38a10 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/argument1.png b/packages/website/frontend/static/blog/everettvegans/argument1.png new file mode 100755 index 0000000..2e95592 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/argument1.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/argument2.png b/packages/website/frontend/static/blog/everettvegans/argument2.png new file mode 100755 index 0000000..9cdc350 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/argument2.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image1.png b/packages/website/frontend/static/blog/everettvegans/image1.png new file mode 100755 index 0000000..e53e9ae Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image1.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image10.png b/packages/website/frontend/static/blog/everettvegans/image10.png new file mode 100755 index 0000000..6cb6d39 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image10.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image11.png b/packages/website/frontend/static/blog/everettvegans/image11.png new file mode 100755 index 0000000..8ee8c73 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image11.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image12.png b/packages/website/frontend/static/blog/everettvegans/image12.png new file mode 100755 index 0000000..751f1d4 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image12.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image13.png b/packages/website/frontend/static/blog/everettvegans/image13.png new file mode 100755 index 0000000..5b6d422 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image13.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image14.png b/packages/website/frontend/static/blog/everettvegans/image14.png new file mode 100755 index 0000000..b1426f5 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image14.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image15.png b/packages/website/frontend/static/blog/everettvegans/image15.png new file mode 100755 index 0000000..a0b343c Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image15.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image16.png b/packages/website/frontend/static/blog/everettvegans/image16.png new file mode 100755 index 0000000..d1583c5 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image16.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image17.png b/packages/website/frontend/static/blog/everettvegans/image17.png new file mode 100755 index 0000000..0f37b5c Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image17.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image18.png b/packages/website/frontend/static/blog/everettvegans/image18.png new file mode 100755 index 0000000..ff86991 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image18.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image19.png b/packages/website/frontend/static/blog/everettvegans/image19.png new file mode 100755 index 0000000..39656ac Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image19.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image2.png b/packages/website/frontend/static/blog/everettvegans/image2.png new file mode 100755 index 0000000..7f5ecf2 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image2.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image20.png b/packages/website/frontend/static/blog/everettvegans/image20.png new file mode 100755 index 0000000..4e04fa5 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image20.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image21.png b/packages/website/frontend/static/blog/everettvegans/image21.png new file mode 100755 index 0000000..3cef856 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image21.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image22.png b/packages/website/frontend/static/blog/everettvegans/image22.png new file mode 100755 index 0000000..b2b5f00 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image22.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image23.png b/packages/website/frontend/static/blog/everettvegans/image23.png new file mode 100755 index 0000000..94eeae9 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image23.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image24.png b/packages/website/frontend/static/blog/everettvegans/image24.png new file mode 100755 index 0000000..ba2b567 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image24.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image25.png b/packages/website/frontend/static/blog/everettvegans/image25.png new file mode 100755 index 0000000..5bd9a1e Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image25.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image26.png b/packages/website/frontend/static/blog/everettvegans/image26.png new file mode 100755 index 0000000..25a5b59 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image26.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image27.png b/packages/website/frontend/static/blog/everettvegans/image27.png new file mode 100755 index 0000000..a461a25 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image27.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image28.png b/packages/website/frontend/static/blog/everettvegans/image28.png new file mode 100755 index 0000000..56de692 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image28.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image29.png b/packages/website/frontend/static/blog/everettvegans/image29.png new file mode 100755 index 0000000..7e9a3a8 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image29.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image3.png b/packages/website/frontend/static/blog/everettvegans/image3.png new file mode 100755 index 0000000..a50b0fb Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image3.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image4.png b/packages/website/frontend/static/blog/everettvegans/image4.png new file mode 100755 index 0000000..23c6cdc Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image4.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image5.png b/packages/website/frontend/static/blog/everettvegans/image5.png new file mode 100755 index 0000000..235d403 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image5.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image6.png b/packages/website/frontend/static/blog/everettvegans/image6.png new file mode 100755 index 0000000..5aad2f5 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image6.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image7.png b/packages/website/frontend/static/blog/everettvegans/image7.png new file mode 100755 index 0000000..24d62c7 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image7.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image8.png b/packages/website/frontend/static/blog/everettvegans/image8.png new file mode 100755 index 0000000..c530881 Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image8.png differ diff --git a/packages/website/frontend/static/blog/everettvegans/image9.png b/packages/website/frontend/static/blog/everettvegans/image9.png new file mode 100755 index 0000000..8264a5c Binary files /dev/null and b/packages/website/frontend/static/blog/everettvegans/image9.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers.png b/packages/website/frontend/static/blog/huntergatherers.png new file mode 100755 index 0000000..bde30aa Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/argument1.png b/packages/website/frontend/static/blog/huntergatherers/argument1.png new file mode 100755 index 0000000..60463db Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/argument1.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/argument2.png b/packages/website/frontend/static/blog/huntergatherers/argument2.png new file mode 100755 index 0000000..f33380c Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/argument2.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image1.png b/packages/website/frontend/static/blog/huntergatherers/image1.png new file mode 100755 index 0000000..dda8bd4 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image1.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image2.png b/packages/website/frontend/static/blog/huntergatherers/image2.png new file mode 100755 index 0000000..a0cd820 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image2.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image3.png b/packages/website/frontend/static/blog/huntergatherers/image3.png new file mode 100755 index 0000000..0951ec0 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image3.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image4.png b/packages/website/frontend/static/blog/huntergatherers/image4.png new file mode 100755 index 0000000..3f8e381 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image4.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image5.png b/packages/website/frontend/static/blog/huntergatherers/image5.png new file mode 100755 index 0000000..66a0c8e Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image5.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image6.png b/packages/website/frontend/static/blog/huntergatherers/image6.png new file mode 100755 index 0000000..4535b66 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image6.png differ diff --git a/packages/website/frontend/static/blog/huntergatherers/image7.png b/packages/website/frontend/static/blog/huntergatherers/image7.png new file mode 100755 index 0000000..0a9e502 Binary files /dev/null and b/packages/website/frontend/static/blog/huntergatherers/image7.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics.png b/packages/website/frontend/static/blog/meatapologetics.png new file mode 100755 index 0000000..11daca7 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/argument1.png b/packages/website/frontend/static/blog/meatapologetics/argument1.png new file mode 100755 index 0000000..7b69963 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/argument1.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/argument2.png b/packages/website/frontend/static/blog/meatapologetics/argument2.png new file mode 100755 index 0000000..e6b20fa Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/argument2.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/argument3.png b/packages/website/frontend/static/blog/meatapologetics/argument3.png new file mode 100755 index 0000000..83d0832 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/argument3.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/argument4.png b/packages/website/frontend/static/blog/meatapologetics/argument4.png new file mode 100755 index 0000000..d07c969 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/argument4.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/argument5.png b/packages/website/frontend/static/blog/meatapologetics/argument5.png new file mode 100755 index 0000000..57dbb36 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/argument5.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/image1.png b/packages/website/frontend/static/blog/meatapologetics/image1.png new file mode 100755 index 0000000..2b0a89a Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/image1.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/image2.png b/packages/website/frontend/static/blog/meatapologetics/image2.png new file mode 100755 index 0000000..e403977 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/image2.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/image3.png b/packages/website/frontend/static/blog/meatapologetics/image3.png new file mode 100755 index 0000000..5fdddc0 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/image3.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/image4.png b/packages/website/frontend/static/blog/meatapologetics/image4.png new file mode 100755 index 0000000..fe76f37 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/image4.png differ diff --git a/packages/website/frontend/static/blog/meatapologetics/image5.png b/packages/website/frontend/static/blog/meatapologetics/image5.png new file mode 100755 index 0000000..257f854 Binary files /dev/null and b/packages/website/frontend/static/blog/meatapologetics/image5.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich.png b/packages/website/frontend/static/blog/nagragoodrich.png new file mode 100755 index 0000000..4c1f01b Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument1.png b/packages/website/frontend/static/blog/nagragoodrich/argument1.png new file mode 100755 index 0000000..b33fead Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument1.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument2.png b/packages/website/frontend/static/blog/nagragoodrich/argument2.png new file mode 100755 index 0000000..0e3c345 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument2.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument3.png b/packages/website/frontend/static/blog/nagragoodrich/argument3.png new file mode 100755 index 0000000..bfec536 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument3.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument4.png b/packages/website/frontend/static/blog/nagragoodrich/argument4.png new file mode 100755 index 0000000..8a5d215 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument4.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument5.png b/packages/website/frontend/static/blog/nagragoodrich/argument5.png new file mode 100755 index 0000000..e350e81 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument5.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument6.png b/packages/website/frontend/static/blog/nagragoodrich/argument6.png new file mode 100755 index 0000000..306c5c4 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument6.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument7.png b/packages/website/frontend/static/blog/nagragoodrich/argument7.png new file mode 100755 index 0000000..31a0730 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument7.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument8.png b/packages/website/frontend/static/blog/nagragoodrich/argument8.png new file mode 100755 index 0000000..46c8f16 Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument8.png differ diff --git a/packages/website/frontend/static/blog/nagragoodrich/argument9.png b/packages/website/frontend/static/blog/nagragoodrich/argument9.png new file mode 100755 index 0000000..570bc3b Binary files /dev/null and b/packages/website/frontend/static/blog/nagragoodrich/argument9.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta.png b/packages/website/frontend/static/blog/plantbasedmeta.png new file mode 100755 index 0000000..21b6db0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image10.png b/packages/website/frontend/static/blog/plantbasedmeta/image10.png new file mode 100755 index 0000000..e51aa5e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image10.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image100.png b/packages/website/frontend/static/blog/plantbasedmeta/image100.png new file mode 100755 index 0000000..a72c762 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image100.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image101.png b/packages/website/frontend/static/blog/plantbasedmeta/image101.png new file mode 100755 index 0000000..5f409e7 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image101.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image102.png b/packages/website/frontend/static/blog/plantbasedmeta/image102.png new file mode 100755 index 0000000..99e6d14 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image102.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image103.png b/packages/website/frontend/static/blog/plantbasedmeta/image103.png new file mode 100755 index 0000000..85a2579 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image103.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image104.png b/packages/website/frontend/static/blog/plantbasedmeta/image104.png new file mode 100755 index 0000000..facd08f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image104.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image105.png b/packages/website/frontend/static/blog/plantbasedmeta/image105.png new file mode 100755 index 0000000..fadaab8 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image105.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image106.png b/packages/website/frontend/static/blog/plantbasedmeta/image106.png new file mode 100755 index 0000000..499403f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image106.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image107.png b/packages/website/frontend/static/blog/plantbasedmeta/image107.png new file mode 100755 index 0000000..76f94f2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image107.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image108.png b/packages/website/frontend/static/blog/plantbasedmeta/image108.png new file mode 100755 index 0000000..bec01e0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image108.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image109.png b/packages/website/frontend/static/blog/plantbasedmeta/image109.png new file mode 100755 index 0000000..5c5aaad Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image109.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image11.png b/packages/website/frontend/static/blog/plantbasedmeta/image11.png new file mode 100755 index 0000000..c1f7b96 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image11.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image110.png b/packages/website/frontend/static/blog/plantbasedmeta/image110.png new file mode 100755 index 0000000..348d760 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image110.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image111.png b/packages/website/frontend/static/blog/plantbasedmeta/image111.png new file mode 100755 index 0000000..ee1634c Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image111.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image112.png b/packages/website/frontend/static/blog/plantbasedmeta/image112.png new file mode 100755 index 0000000..8bb67ce Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image112.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image113.png b/packages/website/frontend/static/blog/plantbasedmeta/image113.png new file mode 100755 index 0000000..405949a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image113.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image114.png b/packages/website/frontend/static/blog/plantbasedmeta/image114.png new file mode 100755 index 0000000..77398d1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image114.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image115.png b/packages/website/frontend/static/blog/plantbasedmeta/image115.png new file mode 100755 index 0000000..40e9d88 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image115.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image116.png b/packages/website/frontend/static/blog/plantbasedmeta/image116.png new file mode 100755 index 0000000..2a4cada Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image116.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image117.png b/packages/website/frontend/static/blog/plantbasedmeta/image117.png new file mode 100755 index 0000000..403f026 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image117.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image118.png b/packages/website/frontend/static/blog/plantbasedmeta/image118.png new file mode 100755 index 0000000..e8bedbb Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image118.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image119.png b/packages/website/frontend/static/blog/plantbasedmeta/image119.png new file mode 100755 index 0000000..d46bbbd Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image119.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image12.png b/packages/website/frontend/static/blog/plantbasedmeta/image12.png new file mode 100755 index 0000000..e2c039c Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image12.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image120.png b/packages/website/frontend/static/blog/plantbasedmeta/image120.png new file mode 100755 index 0000000..9ef9752 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image120.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image121.png b/packages/website/frontend/static/blog/plantbasedmeta/image121.png new file mode 100755 index 0000000..8abbacb Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image121.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image122.png b/packages/website/frontend/static/blog/plantbasedmeta/image122.png new file mode 100755 index 0000000..d95847f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image122.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image123.png b/packages/website/frontend/static/blog/plantbasedmeta/image123.png new file mode 100755 index 0000000..33914e9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image123.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image124.png b/packages/website/frontend/static/blog/plantbasedmeta/image124.png new file mode 100755 index 0000000..491ba06 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image124.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image125.png b/packages/website/frontend/static/blog/plantbasedmeta/image125.png new file mode 100755 index 0000000..267121a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image125.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image126.png b/packages/website/frontend/static/blog/plantbasedmeta/image126.png new file mode 100755 index 0000000..a5701d5 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image126.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image127.png b/packages/website/frontend/static/blog/plantbasedmeta/image127.png new file mode 100755 index 0000000..fbf7bc2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image127.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image128.png b/packages/website/frontend/static/blog/plantbasedmeta/image128.png new file mode 100755 index 0000000..4b4ae88 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image128.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image129.png b/packages/website/frontend/static/blog/plantbasedmeta/image129.png new file mode 100755 index 0000000..66a94f1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image129.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image13.png b/packages/website/frontend/static/blog/plantbasedmeta/image13.png new file mode 100755 index 0000000..a90f724 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image13.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image130.png b/packages/website/frontend/static/blog/plantbasedmeta/image130.png new file mode 100755 index 0000000..2a21b9f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image130.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image131.png b/packages/website/frontend/static/blog/plantbasedmeta/image131.png new file mode 100755 index 0000000..3c87d75 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image131.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image132.png b/packages/website/frontend/static/blog/plantbasedmeta/image132.png new file mode 100755 index 0000000..19339ee Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image132.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image133.png b/packages/website/frontend/static/blog/plantbasedmeta/image133.png new file mode 100755 index 0000000..d4fac63 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image133.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image134.png b/packages/website/frontend/static/blog/plantbasedmeta/image134.png new file mode 100755 index 0000000..363b8c3 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image134.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image135.png b/packages/website/frontend/static/blog/plantbasedmeta/image135.png new file mode 100755 index 0000000..43dad14 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image135.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image136.png b/packages/website/frontend/static/blog/plantbasedmeta/image136.png new file mode 100755 index 0000000..9392553 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image136.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image137.png b/packages/website/frontend/static/blog/plantbasedmeta/image137.png new file mode 100755 index 0000000..ebd6864 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image137.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image138.png b/packages/website/frontend/static/blog/plantbasedmeta/image138.png new file mode 100755 index 0000000..40b6a8f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image138.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image139.png b/packages/website/frontend/static/blog/plantbasedmeta/image139.png new file mode 100755 index 0000000..a70d04e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image139.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image14.png b/packages/website/frontend/static/blog/plantbasedmeta/image14.png new file mode 100755 index 0000000..5942a86 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image14.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image140.png b/packages/website/frontend/static/blog/plantbasedmeta/image140.png new file mode 100755 index 0000000..e391929 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image140.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image141.png b/packages/website/frontend/static/blog/plantbasedmeta/image141.png new file mode 100755 index 0000000..358f65f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image141.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image142.png b/packages/website/frontend/static/blog/plantbasedmeta/image142.png new file mode 100755 index 0000000..5727b93 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image142.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image143.png b/packages/website/frontend/static/blog/plantbasedmeta/image143.png new file mode 100755 index 0000000..bd2da0b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image143.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image144.png b/packages/website/frontend/static/blog/plantbasedmeta/image144.png new file mode 100755 index 0000000..738e880 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image144.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image145.png b/packages/website/frontend/static/blog/plantbasedmeta/image145.png new file mode 100755 index 0000000..e5c75eb Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image145.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image146.png b/packages/website/frontend/static/blog/plantbasedmeta/image146.png new file mode 100755 index 0000000..7ce6bf0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image146.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image147.png b/packages/website/frontend/static/blog/plantbasedmeta/image147.png new file mode 100755 index 0000000..f37ba0f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image147.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image148.png b/packages/website/frontend/static/blog/plantbasedmeta/image148.png new file mode 100755 index 0000000..532744e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image148.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image149.png b/packages/website/frontend/static/blog/plantbasedmeta/image149.png new file mode 100755 index 0000000..804dee4 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image149.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image15.png b/packages/website/frontend/static/blog/plantbasedmeta/image15.png new file mode 100755 index 0000000..0ce6cba Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image15.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image150.png b/packages/website/frontend/static/blog/plantbasedmeta/image150.png new file mode 100755 index 0000000..3cb20d8 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image150.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image151.png b/packages/website/frontend/static/blog/plantbasedmeta/image151.png new file mode 100755 index 0000000..f7cbca2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image151.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image152.png b/packages/website/frontend/static/blog/plantbasedmeta/image152.png new file mode 100755 index 0000000..e6345f6 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image152.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image153.png b/packages/website/frontend/static/blog/plantbasedmeta/image153.png new file mode 100755 index 0000000..e1bc61d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image153.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image154.png b/packages/website/frontend/static/blog/plantbasedmeta/image154.png new file mode 100755 index 0000000..771c03e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image154.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image155.png b/packages/website/frontend/static/blog/plantbasedmeta/image155.png new file mode 100755 index 0000000..19aa8c6 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image155.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image156.png b/packages/website/frontend/static/blog/plantbasedmeta/image156.png new file mode 100755 index 0000000..9f59f0b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image156.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image157.png b/packages/website/frontend/static/blog/plantbasedmeta/image157.png new file mode 100755 index 0000000..79710a1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image157.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image158.png b/packages/website/frontend/static/blog/plantbasedmeta/image158.png new file mode 100755 index 0000000..4b535a5 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image158.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image159.png b/packages/website/frontend/static/blog/plantbasedmeta/image159.png new file mode 100755 index 0000000..7150ead Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image159.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image16.png b/packages/website/frontend/static/blog/plantbasedmeta/image16.png new file mode 100755 index 0000000..f7662d0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image16.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image160.png b/packages/website/frontend/static/blog/plantbasedmeta/image160.png new file mode 100755 index 0000000..691ff0b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image160.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image161.png b/packages/website/frontend/static/blog/plantbasedmeta/image161.png new file mode 100755 index 0000000..7353d32 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image161.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image162.png b/packages/website/frontend/static/blog/plantbasedmeta/image162.png new file mode 100755 index 0000000..320543b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image162.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image163.png b/packages/website/frontend/static/blog/plantbasedmeta/image163.png new file mode 100755 index 0000000..63c099a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image163.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image164.png b/packages/website/frontend/static/blog/plantbasedmeta/image164.png new file mode 100755 index 0000000..14d6956 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image164.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image165.png b/packages/website/frontend/static/blog/plantbasedmeta/image165.png new file mode 100755 index 0000000..fe97d4d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image165.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image166.png b/packages/website/frontend/static/blog/plantbasedmeta/image166.png new file mode 100755 index 0000000..e718250 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image166.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image167.png b/packages/website/frontend/static/blog/plantbasedmeta/image167.png new file mode 100755 index 0000000..4c34b03 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image167.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image168.png b/packages/website/frontend/static/blog/plantbasedmeta/image168.png new file mode 100755 index 0000000..f7b61fa Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image168.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image169.png b/packages/website/frontend/static/blog/plantbasedmeta/image169.png new file mode 100755 index 0000000..07d6f20 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image169.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image17.png b/packages/website/frontend/static/blog/plantbasedmeta/image17.png new file mode 100755 index 0000000..07a8bf9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image17.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image170.png b/packages/website/frontend/static/blog/plantbasedmeta/image170.png new file mode 100755 index 0000000..4850fba Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image170.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image171.png b/packages/website/frontend/static/blog/plantbasedmeta/image171.png new file mode 100755 index 0000000..b205102 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image171.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image172.png b/packages/website/frontend/static/blog/plantbasedmeta/image172.png new file mode 100755 index 0000000..0d0da05 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image172.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image173.png b/packages/website/frontend/static/blog/plantbasedmeta/image173.png new file mode 100755 index 0000000..e514fda Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image173.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image174.png b/packages/website/frontend/static/blog/plantbasedmeta/image174.png new file mode 100755 index 0000000..99873e9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image174.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image175.png b/packages/website/frontend/static/blog/plantbasedmeta/image175.png new file mode 100755 index 0000000..bdc75ab Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image175.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image176.png b/packages/website/frontend/static/blog/plantbasedmeta/image176.png new file mode 100755 index 0000000..4e09d1f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image176.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image177.png b/packages/website/frontend/static/blog/plantbasedmeta/image177.png new file mode 100755 index 0000000..61af542 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image177.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image178.png b/packages/website/frontend/static/blog/plantbasedmeta/image178.png new file mode 100755 index 0000000..acc11f1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image178.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image179.png b/packages/website/frontend/static/blog/plantbasedmeta/image179.png new file mode 100755 index 0000000..7ba4dd4 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image179.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image18.png b/packages/website/frontend/static/blog/plantbasedmeta/image18.png new file mode 100755 index 0000000..d7b330d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image18.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image180.png b/packages/website/frontend/static/blog/plantbasedmeta/image180.png new file mode 100755 index 0000000..dd45cec Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image180.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image181.png b/packages/website/frontend/static/blog/plantbasedmeta/image181.png new file mode 100755 index 0000000..2626b48 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image181.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image182.png b/packages/website/frontend/static/blog/plantbasedmeta/image182.png new file mode 100755 index 0000000..2fc50b1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image182.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image183.png b/packages/website/frontend/static/blog/plantbasedmeta/image183.png new file mode 100755 index 0000000..ac55948 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image183.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image184.png b/packages/website/frontend/static/blog/plantbasedmeta/image184.png new file mode 100755 index 0000000..9a168ed Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image184.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image185.png b/packages/website/frontend/static/blog/plantbasedmeta/image185.png new file mode 100755 index 0000000..b113b89 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image185.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image186.png b/packages/website/frontend/static/blog/plantbasedmeta/image186.png new file mode 100755 index 0000000..c663813 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image186.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image19.png b/packages/website/frontend/static/blog/plantbasedmeta/image19.png new file mode 100755 index 0000000..2cbe25b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image19.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image20.png b/packages/website/frontend/static/blog/plantbasedmeta/image20.png new file mode 100755 index 0000000..529c5d2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image20.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image21.png b/packages/website/frontend/static/blog/plantbasedmeta/image21.png new file mode 100755 index 0000000..7828dc2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image21.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image22.png b/packages/website/frontend/static/blog/plantbasedmeta/image22.png new file mode 100755 index 0000000..cb36c6e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image22.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image23.png b/packages/website/frontend/static/blog/plantbasedmeta/image23.png new file mode 100755 index 0000000..a2d8f45 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image23.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image24.png b/packages/website/frontend/static/blog/plantbasedmeta/image24.png new file mode 100755 index 0000000..dbf451d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image24.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image25.png b/packages/website/frontend/static/blog/plantbasedmeta/image25.png new file mode 100755 index 0000000..33dde19 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image25.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image26.png b/packages/website/frontend/static/blog/plantbasedmeta/image26.png new file mode 100755 index 0000000..1bb5c42 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image26.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image27.png b/packages/website/frontend/static/blog/plantbasedmeta/image27.png new file mode 100755 index 0000000..711ced0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image27.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image28.png b/packages/website/frontend/static/blog/plantbasedmeta/image28.png new file mode 100755 index 0000000..0e9185a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image28.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image29.png b/packages/website/frontend/static/blog/plantbasedmeta/image29.png new file mode 100755 index 0000000..32f729c Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image29.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image30.png b/packages/website/frontend/static/blog/plantbasedmeta/image30.png new file mode 100755 index 0000000..5fc0726 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image30.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image31.png b/packages/website/frontend/static/blog/plantbasedmeta/image31.png new file mode 100755 index 0000000..8453b88 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image31.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image32.png b/packages/website/frontend/static/blog/plantbasedmeta/image32.png new file mode 100755 index 0000000..a5f73e9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image32.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image33.png b/packages/website/frontend/static/blog/plantbasedmeta/image33.png new file mode 100755 index 0000000..b60643a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image33.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image34.png b/packages/website/frontend/static/blog/plantbasedmeta/image34.png new file mode 100755 index 0000000..9c0a792 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image34.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image35.png b/packages/website/frontend/static/blog/plantbasedmeta/image35.png new file mode 100755 index 0000000..a456bc1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image35.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image36.png b/packages/website/frontend/static/blog/plantbasedmeta/image36.png new file mode 100755 index 0000000..7704444 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image36.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image37.png b/packages/website/frontend/static/blog/plantbasedmeta/image37.png new file mode 100755 index 0000000..dddfd2e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image37.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image38.png b/packages/website/frontend/static/blog/plantbasedmeta/image38.png new file mode 100755 index 0000000..19d0880 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image38.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image39.png b/packages/website/frontend/static/blog/plantbasedmeta/image39.png new file mode 100755 index 0000000..39e04e2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image39.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image40.png b/packages/website/frontend/static/blog/plantbasedmeta/image40.png new file mode 100755 index 0000000..d48fdbd Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image40.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image41.png b/packages/website/frontend/static/blog/plantbasedmeta/image41.png new file mode 100755 index 0000000..f26a6a9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image41.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image42.png b/packages/website/frontend/static/blog/plantbasedmeta/image42.png new file mode 100755 index 0000000..7e7b2db Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image42.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image43.png b/packages/website/frontend/static/blog/plantbasedmeta/image43.png new file mode 100755 index 0000000..3e6a35b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image43.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image44.png b/packages/website/frontend/static/blog/plantbasedmeta/image44.png new file mode 100755 index 0000000..8ec7503 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image44.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image45.png b/packages/website/frontend/static/blog/plantbasedmeta/image45.png new file mode 100755 index 0000000..198d584 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image45.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image46.png b/packages/website/frontend/static/blog/plantbasedmeta/image46.png new file mode 100755 index 0000000..258f931 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image46.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image47.png b/packages/website/frontend/static/blog/plantbasedmeta/image47.png new file mode 100755 index 0000000..fe7d4cb Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image47.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image48.png b/packages/website/frontend/static/blog/plantbasedmeta/image48.png new file mode 100755 index 0000000..56f4c9a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image48.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image49.png b/packages/website/frontend/static/blog/plantbasedmeta/image49.png new file mode 100755 index 0000000..e912303 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image49.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image5.png b/packages/website/frontend/static/blog/plantbasedmeta/image5.png new file mode 100755 index 0000000..bf458d4 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image5.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image50.png b/packages/website/frontend/static/blog/plantbasedmeta/image50.png new file mode 100755 index 0000000..a9d6d41 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image50.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image51.png b/packages/website/frontend/static/blog/plantbasedmeta/image51.png new file mode 100755 index 0000000..e103e86 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image51.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image52.png b/packages/website/frontend/static/blog/plantbasedmeta/image52.png new file mode 100755 index 0000000..3858140 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image52.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image53.png b/packages/website/frontend/static/blog/plantbasedmeta/image53.png new file mode 100755 index 0000000..56b5e8e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image53.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image54.png b/packages/website/frontend/static/blog/plantbasedmeta/image54.png new file mode 100755 index 0000000..b0ec631 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image54.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image55.png b/packages/website/frontend/static/blog/plantbasedmeta/image55.png new file mode 100755 index 0000000..11b171a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image55.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image56.png b/packages/website/frontend/static/blog/plantbasedmeta/image56.png new file mode 100755 index 0000000..f84295b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image56.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image57.png b/packages/website/frontend/static/blog/plantbasedmeta/image57.png new file mode 100755 index 0000000..78f0010 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image57.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image58.png b/packages/website/frontend/static/blog/plantbasedmeta/image58.png new file mode 100755 index 0000000..18c3f3a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image58.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image59.png b/packages/website/frontend/static/blog/plantbasedmeta/image59.png new file mode 100755 index 0000000..b5dbcb7 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image59.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image6.png b/packages/website/frontend/static/blog/plantbasedmeta/image6.png new file mode 100755 index 0000000..c51b30b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image6.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image60.png b/packages/website/frontend/static/blog/plantbasedmeta/image60.png new file mode 100755 index 0000000..adc4eb9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image60.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image61.png b/packages/website/frontend/static/blog/plantbasedmeta/image61.png new file mode 100755 index 0000000..ad69498 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image61.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image62.png b/packages/website/frontend/static/blog/plantbasedmeta/image62.png new file mode 100755 index 0000000..8c2d0fd Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image62.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image63.png b/packages/website/frontend/static/blog/plantbasedmeta/image63.png new file mode 100755 index 0000000..cff37ba Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image63.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image64.png b/packages/website/frontend/static/blog/plantbasedmeta/image64.png new file mode 100755 index 0000000..19330a9 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image64.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image65.png b/packages/website/frontend/static/blog/plantbasedmeta/image65.png new file mode 100755 index 0000000..28a55b1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image65.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image66.png b/packages/website/frontend/static/blog/plantbasedmeta/image66.png new file mode 100755 index 0000000..7353887 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image66.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image67.png b/packages/website/frontend/static/blog/plantbasedmeta/image67.png new file mode 100755 index 0000000..6bbd4b2 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image67.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image68.png b/packages/website/frontend/static/blog/plantbasedmeta/image68.png new file mode 100755 index 0000000..051cdd1 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image68.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image69.png b/packages/website/frontend/static/blog/plantbasedmeta/image69.png new file mode 100755 index 0000000..f215716 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image69.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image7.png b/packages/website/frontend/static/blog/plantbasedmeta/image7.png new file mode 100755 index 0000000..2c4f901 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image7.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image70.png b/packages/website/frontend/static/blog/plantbasedmeta/image70.png new file mode 100755 index 0000000..32cf3cf Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image70.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image71.png b/packages/website/frontend/static/blog/plantbasedmeta/image71.png new file mode 100755 index 0000000..2832269 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image71.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image72.png b/packages/website/frontend/static/blog/plantbasedmeta/image72.png new file mode 100755 index 0000000..9f1c118 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image72.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image73.png b/packages/website/frontend/static/blog/plantbasedmeta/image73.png new file mode 100755 index 0000000..4198a5e Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image73.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image74.png b/packages/website/frontend/static/blog/plantbasedmeta/image74.png new file mode 100755 index 0000000..8a70ee3 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image74.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image75.png b/packages/website/frontend/static/blog/plantbasedmeta/image75.png new file mode 100755 index 0000000..c2db249 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image75.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image76.png b/packages/website/frontend/static/blog/plantbasedmeta/image76.png new file mode 100755 index 0000000..f9aa618 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image76.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image77.png b/packages/website/frontend/static/blog/plantbasedmeta/image77.png new file mode 100755 index 0000000..3ec4f38 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image77.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image78.png b/packages/website/frontend/static/blog/plantbasedmeta/image78.png new file mode 100755 index 0000000..33f8bee Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image78.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image79.png b/packages/website/frontend/static/blog/plantbasedmeta/image79.png new file mode 100755 index 0000000..4ef7a4f Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image79.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image8.png b/packages/website/frontend/static/blog/plantbasedmeta/image8.png new file mode 100755 index 0000000..129a910 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image8.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image80.png b/packages/website/frontend/static/blog/plantbasedmeta/image80.png new file mode 100755 index 0000000..4b0e21a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image80.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image81.png b/packages/website/frontend/static/blog/plantbasedmeta/image81.png new file mode 100755 index 0000000..d333e4a Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image81.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image82.png b/packages/website/frontend/static/blog/plantbasedmeta/image82.png new file mode 100755 index 0000000..4af49f0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image82.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image83.png b/packages/website/frontend/static/blog/plantbasedmeta/image83.png new file mode 100755 index 0000000..78459d4 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image83.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image84.png b/packages/website/frontend/static/blog/plantbasedmeta/image84.png new file mode 100755 index 0000000..2e7c2be Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image84.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image85.png b/packages/website/frontend/static/blog/plantbasedmeta/image85.png new file mode 100755 index 0000000..e0999f0 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image85.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image86.png b/packages/website/frontend/static/blog/plantbasedmeta/image86.png new file mode 100755 index 0000000..5549067 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image86.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image87.png b/packages/website/frontend/static/blog/plantbasedmeta/image87.png new file mode 100755 index 0000000..15fa6be Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image87.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image88.png b/packages/website/frontend/static/blog/plantbasedmeta/image88.png new file mode 100755 index 0000000..4b4f4c6 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image88.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image89.png b/packages/website/frontend/static/blog/plantbasedmeta/image89.png new file mode 100755 index 0000000..1db65f3 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image89.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image9.png b/packages/website/frontend/static/blog/plantbasedmeta/image9.png new file mode 100755 index 0000000..7dc3698 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image9.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image90.png b/packages/website/frontend/static/blog/plantbasedmeta/image90.png new file mode 100755 index 0000000..9725a8b Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image90.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image91.png b/packages/website/frontend/static/blog/plantbasedmeta/image91.png new file mode 100755 index 0000000..3d40782 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image91.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image92.png b/packages/website/frontend/static/blog/plantbasedmeta/image92.png new file mode 100755 index 0000000..205f56d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image92.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image93.png b/packages/website/frontend/static/blog/plantbasedmeta/image93.png new file mode 100755 index 0000000..8683110 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image93.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image94.png b/packages/website/frontend/static/blog/plantbasedmeta/image94.png new file mode 100755 index 0000000..9ca54a3 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image94.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image95.png b/packages/website/frontend/static/blog/plantbasedmeta/image95.png new file mode 100755 index 0000000..70cf37c Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image95.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image96.png b/packages/website/frontend/static/blog/plantbasedmeta/image96.png new file mode 100755 index 0000000..cdfaedd Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image96.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image97.png b/packages/website/frontend/static/blog/plantbasedmeta/image97.png new file mode 100755 index 0000000..f9042b7 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image97.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image98.png b/packages/website/frontend/static/blog/plantbasedmeta/image98.png new file mode 100755 index 0000000..d55af52 Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image98.png differ diff --git a/packages/website/frontend/static/blog/plantbasedmeta/image99.png b/packages/website/frontend/static/blog/plantbasedmeta/image99.png new file mode 100755 index 0000000..3012a6d Binary files /dev/null and b/packages/website/frontend/static/blog/plantbasedmeta/image99.png differ diff --git a/packages/website/frontend/static/blog/quacksmashing.png b/packages/website/frontend/static/blog/quacksmashing.png new file mode 100755 index 0000000..af60fc3 Binary files /dev/null and b/packages/website/frontend/static/blog/quacksmashing.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet.png b/packages/website/frontend/static/blog/sapiendiet.png new file mode 100755 index 0000000..7060da9 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/argument1.png b/packages/website/frontend/static/blog/sapiendiet/argument1.png new file mode 100755 index 0000000..29688e0 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/argument1.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image1.png b/packages/website/frontend/static/blog/sapiendiet/image1.png new file mode 100755 index 0000000..65b6147 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image1.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image10.png b/packages/website/frontend/static/blog/sapiendiet/image10.png new file mode 100755 index 0000000..13cee7b Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image10.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image11.png b/packages/website/frontend/static/blog/sapiendiet/image11.png new file mode 100755 index 0000000..311c9d5 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image11.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image12.png b/packages/website/frontend/static/blog/sapiendiet/image12.png new file mode 100755 index 0000000..4f7b616 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image12.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image13.png b/packages/website/frontend/static/blog/sapiendiet/image13.png new file mode 100755 index 0000000..f5288ce Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image13.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image14.png b/packages/website/frontend/static/blog/sapiendiet/image14.png new file mode 100755 index 0000000..6da9259 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image14.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image15.png b/packages/website/frontend/static/blog/sapiendiet/image15.png new file mode 100755 index 0000000..bc7aacb Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image15.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image16.png b/packages/website/frontend/static/blog/sapiendiet/image16.png new file mode 100755 index 0000000..6991f14 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image16.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image17.png b/packages/website/frontend/static/blog/sapiendiet/image17.png new file mode 100755 index 0000000..ff1f5b7 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image17.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image18.png b/packages/website/frontend/static/blog/sapiendiet/image18.png new file mode 100755 index 0000000..a9a6ac4 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image18.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image19.png b/packages/website/frontend/static/blog/sapiendiet/image19.png new file mode 100755 index 0000000..c7499a8 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image19.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image2.png b/packages/website/frontend/static/blog/sapiendiet/image2.png new file mode 100755 index 0000000..271c1e2 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image2.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image20.png b/packages/website/frontend/static/blog/sapiendiet/image20.png new file mode 100755 index 0000000..cc617b2 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image20.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image21.png b/packages/website/frontend/static/blog/sapiendiet/image21.png new file mode 100755 index 0000000..e431ec8 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image21.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image22.png b/packages/website/frontend/static/blog/sapiendiet/image22.png new file mode 100755 index 0000000..58aca57 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image22.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image23.png b/packages/website/frontend/static/blog/sapiendiet/image23.png new file mode 100755 index 0000000..3769c21 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image23.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image24.png b/packages/website/frontend/static/blog/sapiendiet/image24.png new file mode 100755 index 0000000..d394803 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image24.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image25.png b/packages/website/frontend/static/blog/sapiendiet/image25.png new file mode 100755 index 0000000..fa16660 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image25.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image3.png b/packages/website/frontend/static/blog/sapiendiet/image3.png new file mode 100755 index 0000000..eac23dd Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image3.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image4.png b/packages/website/frontend/static/blog/sapiendiet/image4.png new file mode 100755 index 0000000..f7557f0 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image4.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image5.png b/packages/website/frontend/static/blog/sapiendiet/image5.png new file mode 100755 index 0000000..af8cc17 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image5.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image6.png b/packages/website/frontend/static/blog/sapiendiet/image6.png new file mode 100755 index 0000000..cbe50dc Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image6.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image7.png b/packages/website/frontend/static/blog/sapiendiet/image7.png new file mode 100755 index 0000000..bcfae16 Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image7.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image8.png b/packages/website/frontend/static/blog/sapiendiet/image8.png new file mode 100755 index 0000000..63dbb5f Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image8.png differ diff --git a/packages/website/frontend/static/blog/sapiendiet/image9.png b/packages/website/frontend/static/blog/sapiendiet/image9.png new file mode 100755 index 0000000..f675e1f Binary files /dev/null and b/packages/website/frontend/static/blog/sapiendiet/image9.png differ diff --git a/packages/website/frontend/static/blog/seedoils.png b/packages/website/frontend/static/blog/seedoils.png new file mode 100755 index 0000000..ca3ba8b Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image1.png b/packages/website/frontend/static/blog/seedoils/image1.png new file mode 100755 index 0000000..3b327f3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image1.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image10.png b/packages/website/frontend/static/blog/seedoils/image10.png new file mode 100755 index 0000000..06d291e Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image10.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image11.png b/packages/website/frontend/static/blog/seedoils/image11.png new file mode 100755 index 0000000..8cf911d Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image11.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image12.png b/packages/website/frontend/static/blog/seedoils/image12.png new file mode 100755 index 0000000..dc44820 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image12.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image13.png b/packages/website/frontend/static/blog/seedoils/image13.png new file mode 100755 index 0000000..582991f Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image13.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image14.png b/packages/website/frontend/static/blog/seedoils/image14.png new file mode 100755 index 0000000..ab1374b Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image14.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image15.png b/packages/website/frontend/static/blog/seedoils/image15.png new file mode 100755 index 0000000..6fa6fd4 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image15.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image16.png b/packages/website/frontend/static/blog/seedoils/image16.png new file mode 100755 index 0000000..4d332c3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image16.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image17.png b/packages/website/frontend/static/blog/seedoils/image17.png new file mode 100755 index 0000000..9c4f912 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image17.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image18.png b/packages/website/frontend/static/blog/seedoils/image18.png new file mode 100755 index 0000000..138bbe5 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image18.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image19.png b/packages/website/frontend/static/blog/seedoils/image19.png new file mode 100755 index 0000000..041e38a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image19.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image2.png b/packages/website/frontend/static/blog/seedoils/image2.png new file mode 100755 index 0000000..3112e50 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image2.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image20.png b/packages/website/frontend/static/blog/seedoils/image20.png new file mode 100755 index 0000000..889a7db Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image20.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image21.png b/packages/website/frontend/static/blog/seedoils/image21.png new file mode 100755 index 0000000..5278dc3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image21.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image22.png b/packages/website/frontend/static/blog/seedoils/image22.png new file mode 100755 index 0000000..f9170a3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image22.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image23.png b/packages/website/frontend/static/blog/seedoils/image23.png new file mode 100755 index 0000000..b1f0a9e Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image23.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image24.png b/packages/website/frontend/static/blog/seedoils/image24.png new file mode 100755 index 0000000..2d405f5 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image24.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image25.png b/packages/website/frontend/static/blog/seedoils/image25.png new file mode 100755 index 0000000..a2cd8e9 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image25.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image26.png b/packages/website/frontend/static/blog/seedoils/image26.png new file mode 100755 index 0000000..a970b69 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image26.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image27.png b/packages/website/frontend/static/blog/seedoils/image27.png new file mode 100755 index 0000000..482d6e1 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image27.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image28.png b/packages/website/frontend/static/blog/seedoils/image28.png new file mode 100755 index 0000000..ee49706 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image28.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image29.png b/packages/website/frontend/static/blog/seedoils/image29.png new file mode 100755 index 0000000..4abb2b6 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image29.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image3.png b/packages/website/frontend/static/blog/seedoils/image3.png new file mode 100755 index 0000000..8675eac Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image3.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image30.png b/packages/website/frontend/static/blog/seedoils/image30.png new file mode 100755 index 0000000..493e2ba Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image30.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image31.png b/packages/website/frontend/static/blog/seedoils/image31.png new file mode 100755 index 0000000..64470d4 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image31.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image32.png b/packages/website/frontend/static/blog/seedoils/image32.png new file mode 100755 index 0000000..b1c453d Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image32.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image33.png b/packages/website/frontend/static/blog/seedoils/image33.png new file mode 100755 index 0000000..d19e817 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image33.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image34.png b/packages/website/frontend/static/blog/seedoils/image34.png new file mode 100755 index 0000000..efbc053 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image34.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image35.png b/packages/website/frontend/static/blog/seedoils/image35.png new file mode 100755 index 0000000..385464e Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image35.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image36.png b/packages/website/frontend/static/blog/seedoils/image36.png new file mode 100755 index 0000000..e0d124f Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image36.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image37.png b/packages/website/frontend/static/blog/seedoils/image37.png new file mode 100755 index 0000000..8cc125f Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image37.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image38.png b/packages/website/frontend/static/blog/seedoils/image38.png new file mode 100755 index 0000000..95a58bf Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image38.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image39.png b/packages/website/frontend/static/blog/seedoils/image39.png new file mode 100755 index 0000000..abdbc07 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image39.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image4.png b/packages/website/frontend/static/blog/seedoils/image4.png new file mode 100755 index 0000000..c6a6fa9 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image4.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image40.png b/packages/website/frontend/static/blog/seedoils/image40.png new file mode 100755 index 0000000..9d679d3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image40.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image42.png b/packages/website/frontend/static/blog/seedoils/image42.png new file mode 100755 index 0000000..cca3b4a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image42.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image43.png b/packages/website/frontend/static/blog/seedoils/image43.png new file mode 100755 index 0000000..2db2009 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image43.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image44.png b/packages/website/frontend/static/blog/seedoils/image44.png new file mode 100755 index 0000000..5d3422a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image44.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image45.png b/packages/website/frontend/static/blog/seedoils/image45.png new file mode 100755 index 0000000..28a80e0 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image45.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image46.png b/packages/website/frontend/static/blog/seedoils/image46.png new file mode 100755 index 0000000..98e7adf Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image46.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image47.png b/packages/website/frontend/static/blog/seedoils/image47.png new file mode 100755 index 0000000..5708ca8 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image47.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image48.png b/packages/website/frontend/static/blog/seedoils/image48.png new file mode 100755 index 0000000..8630215 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image48.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image49.png b/packages/website/frontend/static/blog/seedoils/image49.png new file mode 100755 index 0000000..643c2e0 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image49.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image5.png b/packages/website/frontend/static/blog/seedoils/image5.png new file mode 100755 index 0000000..d4818da Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image5.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image50.png b/packages/website/frontend/static/blog/seedoils/image50.png new file mode 100755 index 0000000..6b61385 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image50.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image51.png b/packages/website/frontend/static/blog/seedoils/image51.png new file mode 100755 index 0000000..723ac60 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image51.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image52.png b/packages/website/frontend/static/blog/seedoils/image52.png new file mode 100755 index 0000000..2ff7140 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image52.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image53.png b/packages/website/frontend/static/blog/seedoils/image53.png new file mode 100755 index 0000000..aeb407d Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image53.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image54.png b/packages/website/frontend/static/blog/seedoils/image54.png new file mode 100755 index 0000000..41456db Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image54.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image55.png b/packages/website/frontend/static/blog/seedoils/image55.png new file mode 100755 index 0000000..8a3c408 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image55.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image56.png b/packages/website/frontend/static/blog/seedoils/image56.png new file mode 100755 index 0000000..5fb1b5a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image56.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image57.png b/packages/website/frontend/static/blog/seedoils/image57.png new file mode 100755 index 0000000..1d3fcbf Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image57.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image58.png b/packages/website/frontend/static/blog/seedoils/image58.png new file mode 100755 index 0000000..d8c061c Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image58.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image59.png b/packages/website/frontend/static/blog/seedoils/image59.png new file mode 100755 index 0000000..9f1b662 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image59.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image6.png b/packages/website/frontend/static/blog/seedoils/image6.png new file mode 100755 index 0000000..05bae7e Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image6.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image60.png b/packages/website/frontend/static/blog/seedoils/image60.png new file mode 100755 index 0000000..009d696 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image60.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image61.png b/packages/website/frontend/static/blog/seedoils/image61.png new file mode 100755 index 0000000..cdcc0e3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image61.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image62.png b/packages/website/frontend/static/blog/seedoils/image62.png new file mode 100755 index 0000000..d5632b5 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image62.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image63.png b/packages/website/frontend/static/blog/seedoils/image63.png new file mode 100755 index 0000000..c60cb6a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image63.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image64.png b/packages/website/frontend/static/blog/seedoils/image64.png new file mode 100755 index 0000000..c868620 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image64.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image65.png b/packages/website/frontend/static/blog/seedoils/image65.png new file mode 100755 index 0000000..b37c2bd Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image65.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image66.png b/packages/website/frontend/static/blog/seedoils/image66.png new file mode 100755 index 0000000..1cf6257 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image66.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image67.png b/packages/website/frontend/static/blog/seedoils/image67.png new file mode 100755 index 0000000..d1a3013 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image67.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image68.png b/packages/website/frontend/static/blog/seedoils/image68.png new file mode 100755 index 0000000..0041ba6 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image68.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image69.png b/packages/website/frontend/static/blog/seedoils/image69.png new file mode 100755 index 0000000..b6428f5 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image69.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image7.png b/packages/website/frontend/static/blog/seedoils/image7.png new file mode 100755 index 0000000..90ba7bf Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image7.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image70.png b/packages/website/frontend/static/blog/seedoils/image70.png new file mode 100755 index 0000000..3e709ce Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image70.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image71.png b/packages/website/frontend/static/blog/seedoils/image71.png new file mode 100755 index 0000000..2aa2e03 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image71.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image72.png b/packages/website/frontend/static/blog/seedoils/image72.png new file mode 100755 index 0000000..cd5ed48 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image72.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image73.png b/packages/website/frontend/static/blog/seedoils/image73.png new file mode 100755 index 0000000..70b08f3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image73.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image74.png b/packages/website/frontend/static/blog/seedoils/image74.png new file mode 100755 index 0000000..b228e25 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image74.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image75.png b/packages/website/frontend/static/blog/seedoils/image75.png new file mode 100755 index 0000000..107ec8c Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image75.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image76.png b/packages/website/frontend/static/blog/seedoils/image76.png new file mode 100755 index 0000000..98773f2 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image76.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image77.png b/packages/website/frontend/static/blog/seedoils/image77.png new file mode 100755 index 0000000..1234e2f Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image77.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image78.png b/packages/website/frontend/static/blog/seedoils/image78.png new file mode 100755 index 0000000..e2add9c Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image78.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image79.png b/packages/website/frontend/static/blog/seedoils/image79.png new file mode 100755 index 0000000..e015e7a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image79.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image8.png b/packages/website/frontend/static/blog/seedoils/image8.png new file mode 100755 index 0000000..dc29369 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image8.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image80.png b/packages/website/frontend/static/blog/seedoils/image80.png new file mode 100755 index 0000000..42f4f27 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image80.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image81.png b/packages/website/frontend/static/blog/seedoils/image81.png new file mode 100755 index 0000000..4598855 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image81.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image82.png b/packages/website/frontend/static/blog/seedoils/image82.png new file mode 100755 index 0000000..74be554 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image82.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image83.png b/packages/website/frontend/static/blog/seedoils/image83.png new file mode 100755 index 0000000..bcc4d3f Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image83.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image84.png b/packages/website/frontend/static/blog/seedoils/image84.png new file mode 100755 index 0000000..5ff71a6 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image84.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image85.png b/packages/website/frontend/static/blog/seedoils/image85.png new file mode 100755 index 0000000..6bb8bc4 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image85.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image86.png b/packages/website/frontend/static/blog/seedoils/image86.png new file mode 100755 index 0000000..be23e50 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image86.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image87.png b/packages/website/frontend/static/blog/seedoils/image87.png new file mode 100755 index 0000000..adcda5a Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image87.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image88.png b/packages/website/frontend/static/blog/seedoils/image88.png new file mode 100755 index 0000000..ad032b2 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image88.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image89.png b/packages/website/frontend/static/blog/seedoils/image89.png new file mode 100755 index 0000000..cdcf370 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image89.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image9.png b/packages/website/frontend/static/blog/seedoils/image9.png new file mode 100755 index 0000000..a609041 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image9.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image90.png b/packages/website/frontend/static/blog/seedoils/image90.png new file mode 100755 index 0000000..c5aa7fe Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image90.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image91.png b/packages/website/frontend/static/blog/seedoils/image91.png new file mode 100755 index 0000000..82c02f4 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image91.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image92.png b/packages/website/frontend/static/blog/seedoils/image92.png new file mode 100755 index 0000000..a77aed3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image92.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image93.png b/packages/website/frontend/static/blog/seedoils/image93.png new file mode 100755 index 0000000..cf2a7db Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image93.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image94.png b/packages/website/frontend/static/blog/seedoils/image94.png new file mode 100755 index 0000000..70f6607 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image94.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image95.png b/packages/website/frontend/static/blog/seedoils/image95.png new file mode 100755 index 0000000..12ad9b3 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image95.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image96.png b/packages/website/frontend/static/blog/seedoils/image96.png new file mode 100755 index 0000000..5189fd7 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image96.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image97.png b/packages/website/frontend/static/blog/seedoils/image97.png new file mode 100755 index 0000000..faae68e Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image97.png differ diff --git a/packages/website/frontend/static/blog/seedoils/image98.png b/packages/website/frontend/static/blog/seedoils/image98.png new file mode 100755 index 0000000..06e8ae5 Binary files /dev/null and b/packages/website/frontend/static/blog/seedoils/image98.png differ diff --git a/packages/website/frontend/static/blog/shenanigans.png b/packages/website/frontend/static/blog/shenanigans.png new file mode 100755 index 0000000..3a4b661 Binary files /dev/null and b/packages/website/frontend/static/blog/shenanigans.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception.png b/packages/website/frontend/static/blog/sweetdeception.png new file mode 100755 index 0000000..71bd784 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image1.png b/packages/website/frontend/static/blog/sweetdeception/image1.png new file mode 100755 index 0000000..5e340ad Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image1.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image10.png b/packages/website/frontend/static/blog/sweetdeception/image10.png new file mode 100755 index 0000000..58f45cc Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image10.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image11.png b/packages/website/frontend/static/blog/sweetdeception/image11.png new file mode 100755 index 0000000..2ef6d89 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image11.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image12.png b/packages/website/frontend/static/blog/sweetdeception/image12.png new file mode 100755 index 0000000..2b95c93 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image12.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image13.png b/packages/website/frontend/static/blog/sweetdeception/image13.png new file mode 100755 index 0000000..c0eba9f Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image13.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image14.png b/packages/website/frontend/static/blog/sweetdeception/image14.png new file mode 100755 index 0000000..27fc7c8 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image14.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image2.png b/packages/website/frontend/static/blog/sweetdeception/image2.png new file mode 100755 index 0000000..c6a65bc Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image2.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image3.png b/packages/website/frontend/static/blog/sweetdeception/image3.png new file mode 100755 index 0000000..610f467 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image3.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image4.png b/packages/website/frontend/static/blog/sweetdeception/image4.png new file mode 100755 index 0000000..610f467 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image4.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image5.png b/packages/website/frontend/static/blog/sweetdeception/image5.png new file mode 100755 index 0000000..88e026c Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image5.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image6.png b/packages/website/frontend/static/blog/sweetdeception/image6.png new file mode 100755 index 0000000..c35cee2 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image6.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image7.png b/packages/website/frontend/static/blog/sweetdeception/image7.png new file mode 100755 index 0000000..412bd9f Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image7.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image8.png b/packages/website/frontend/static/blog/sweetdeception/image8.png new file mode 100755 index 0000000..7184970 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image8.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/image9.png b/packages/website/frontend/static/blog/sweetdeception/image9.png new file mode 100755 index 0000000..b5ced7d Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/image9.png differ diff --git a/packages/website/frontend/static/blog/sweetdeception/shenanigans.png b/packages/website/frontend/static/blog/sweetdeception/shenanigans.png new file mode 100755 index 0000000..3a4b661 Binary files /dev/null and b/packages/website/frontend/static/blog/sweetdeception/shenanigans.png differ diff --git a/packages/website/frontend/static/blog/thumbs/bigfatsurprise.png b/packages/website/frontend/static/blog/thumbs/bigfatsurprise.png new file mode 100755 index 0000000..851654d Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/bigfatsurprise.png differ diff --git a/packages/website/frontend/static/blog/thumbs/everettvegans.png b/packages/website/frontend/static/blog/thumbs/everettvegans.png new file mode 100755 index 0000000..2a5f0da Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/everettvegans.png differ diff --git a/packages/website/frontend/static/blog/thumbs/huntergatherers.png b/packages/website/frontend/static/blog/thumbs/huntergatherers.png new file mode 100755 index 0000000..8109d1b Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/huntergatherers.png differ diff --git a/packages/website/frontend/static/blog/thumbs/meatapologetics.png b/packages/website/frontend/static/blog/thumbs/meatapologetics.png new file mode 100755 index 0000000..d30c37e Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/meatapologetics.png differ diff --git a/packages/website/frontend/static/blog/thumbs/nagragoodrich.png b/packages/website/frontend/static/blog/thumbs/nagragoodrich.png new file mode 100755 index 0000000..5953f90 Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/nagragoodrich.png differ diff --git a/packages/website/frontend/static/blog/thumbs/plantbasedmeta.png b/packages/website/frontend/static/blog/thumbs/plantbasedmeta.png new file mode 100755 index 0000000..84c8d68 Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/plantbasedmeta.png differ diff --git a/packages/website/frontend/static/blog/thumbs/quacksmashing.png b/packages/website/frontend/static/blog/thumbs/quacksmashing.png new file mode 100755 index 0000000..ca378ab Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/quacksmashing.png differ diff --git a/packages/website/frontend/static/blog/thumbs/sapiendiet.png b/packages/website/frontend/static/blog/thumbs/sapiendiet.png new file mode 100755 index 0000000..323e045 Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/sapiendiet.png differ diff --git a/packages/website/frontend/static/blog/thumbs/seedoils.png b/packages/website/frontend/static/blog/thumbs/seedoils.png new file mode 100755 index 0000000..4926318 Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/seedoils.png differ diff --git a/packages/website/frontend/static/blog/thumbs/shenanigans.png b/packages/website/frontend/static/blog/thumbs/shenanigans.png new file mode 100755 index 0000000..36699d9 Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/shenanigans.png differ diff --git a/packages/website/frontend/static/blog/thumbs/sweetdeception.png b/packages/website/frontend/static/blog/thumbs/sweetdeception.png new file mode 100755 index 0000000..54f8f2d Binary files /dev/null and b/packages/website/frontend/static/blog/thumbs/sweetdeception.png differ diff --git a/packages/website/frontend/static/contact/discord.png b/packages/website/frontend/static/contact/discord.png new file mode 100755 index 0000000..f731098 Binary files /dev/null and b/packages/website/frontend/static/contact/discord.png differ diff --git a/packages/website/frontend/static/contact/email.png b/packages/website/frontend/static/contact/email.png new file mode 100755 index 0000000..101e893 Binary files /dev/null and b/packages/website/frontend/static/contact/email.png differ diff --git a/packages/website/frontend/static/cucks/adamsinger/adamsinger.png b/packages/website/frontend/static/cucks/adamsinger/adamsinger.png new file mode 100755 index 0000000..b9321dd Binary files /dev/null and b/packages/website/frontend/static/cucks/adamsinger/adamsinger.png differ diff --git a/packages/website/frontend/static/cucks/adamsinger/receipt1.png b/packages/website/frontend/static/cucks/adamsinger/receipt1.png new file mode 100755 index 0000000..2195487 Binary files /dev/null and b/packages/website/frontend/static/cucks/adamsinger/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/adamsinger/receipt2.png b/packages/website/frontend/static/cucks/adamsinger/receipt2.png new file mode 100755 index 0000000..76731d9 Binary files /dev/null and b/packages/website/frontend/static/cucks/adamsinger/receipt2.png differ diff --git a/packages/website/frontend/static/cucks/allengreen/allengreen.png b/packages/website/frontend/static/cucks/allengreen/allengreen.png new file mode 100755 index 0000000..11624f8 Binary files /dev/null and b/packages/website/frontend/static/cucks/allengreen/allengreen.png differ diff --git a/packages/website/frontend/static/cucks/amberohearn/amberohearn.png b/packages/website/frontend/static/cucks/amberohearn/amberohearn.png new file mode 100755 index 0000000..a35f93d Binary files /dev/null and b/packages/website/frontend/static/cucks/amberohearn/amberohearn.png differ diff --git a/packages/website/frontend/static/cucks/amberohearn/receipt1.png b/packages/website/frontend/static/cucks/amberohearn/receipt1.png new file mode 100755 index 0000000..30ee2c9 Binary files /dev/null and b/packages/website/frontend/static/cucks/amberohearn/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/annchilders/annchilders.png b/packages/website/frontend/static/cucks/annchilders/annchilders.png new file mode 100755 index 0000000..f21885f Binary files /dev/null and b/packages/website/frontend/static/cucks/annchilders/annchilders.png differ diff --git a/packages/website/frontend/static/cucks/annchilders/receipt1.png b/packages/website/frontend/static/cucks/annchilders/receipt1.png new file mode 100755 index 0000000..f1e64f1 Binary files /dev/null and b/packages/website/frontend/static/cucks/annchilders/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/anthonygustin/anthonygustin.png b/packages/website/frontend/static/cucks/anthonygustin/anthonygustin.png new file mode 100755 index 0000000..2d974f4 Binary files /dev/null and b/packages/website/frontend/static/cucks/anthonygustin/anthonygustin.png differ diff --git a/packages/website/frontend/static/cucks/anthonygustin/receipt1.png b/packages/website/frontend/static/cucks/anthonygustin/receipt1.png new file mode 100755 index 0000000..bfe4a74 Binary files /dev/null and b/packages/website/frontend/static/cucks/anthonygustin/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/ashwanigarg/ashwanigarg.png b/packages/website/frontend/static/cucks/ashwanigarg/ashwanigarg.png new file mode 100755 index 0000000..b858006 Binary files /dev/null and b/packages/website/frontend/static/cucks/ashwanigarg/ashwanigarg.png differ diff --git a/packages/website/frontend/static/cucks/ashwanigarg/receipt1.png b/packages/website/frontend/static/cucks/ashwanigarg/receipt1.png new file mode 100755 index 0000000..d5f0ce9 Binary files /dev/null and b/packages/website/frontend/static/cucks/ashwanigarg/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/austinherbert/austinherbert.png b/packages/website/frontend/static/cucks/austinherbert/austinherbert.png new file mode 100755 index 0000000..134f5c3 Binary files /dev/null and b/packages/website/frontend/static/cucks/austinherbert/austinherbert.png differ diff --git a/packages/website/frontend/static/cucks/austinherbert/receipt1.png b/packages/website/frontend/static/cucks/austinherbert/receipt1.png new file mode 100755 index 0000000..ccbf626 Binary files /dev/null and b/packages/website/frontend/static/cucks/austinherbert/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/austinhiggs/austinhiggs.png b/packages/website/frontend/static/cucks/austinhiggs/austinhiggs.png new file mode 100755 index 0000000..4422a4b Binary files /dev/null and b/packages/website/frontend/static/cucks/austinhiggs/austinhiggs.png differ diff --git a/packages/website/frontend/static/cucks/bartkay/bartkay.png b/packages/website/frontend/static/cucks/bartkay/bartkay.png new file mode 100755 index 0000000..e13ad5c Binary files /dev/null and b/packages/website/frontend/static/cucks/bartkay/bartkay.png differ diff --git a/packages/website/frontend/static/cucks/bartkay/receipt1.png b/packages/website/frontend/static/cucks/bartkay/receipt1.png new file mode 100755 index 0000000..9f01d43 Binary files /dev/null and b/packages/website/frontend/static/cucks/bartkay/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/benbikman/benbikman.png b/packages/website/frontend/static/cucks/benbikman/benbikman.png new file mode 100755 index 0000000..75cacc9 Binary files /dev/null and b/packages/website/frontend/static/cucks/benbikman/benbikman.png differ diff --git a/packages/website/frontend/static/cucks/benbikman/receipt1.png b/packages/website/frontend/static/cucks/benbikman/receipt1.png new file mode 100755 index 0000000..c8f2640 Binary files /dev/null and b/packages/website/frontend/static/cucks/benbikman/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bennymalone/bennymalone.png b/packages/website/frontend/static/cucks/bennymalone/bennymalone.png new file mode 100755 index 0000000..a2f1066 Binary files /dev/null and b/packages/website/frontend/static/cucks/bennymalone/bennymalone.png differ diff --git a/packages/website/frontend/static/cucks/bennymalone/receipt1.png b/packages/website/frontend/static/cucks/bennymalone/receipt1.png new file mode 100755 index 0000000..b9bb5df Binary files /dev/null and b/packages/website/frontend/static/cucks/bennymalone/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bowtiedox/bowtiedox.png b/packages/website/frontend/static/cucks/bowtiedox/bowtiedox.png new file mode 100755 index 0000000..2437c7f Binary files /dev/null and b/packages/website/frontend/static/cucks/bowtiedox/bowtiedox.png differ diff --git a/packages/website/frontend/static/cucks/bradcampbell/bradcampbell.png b/packages/website/frontend/static/cucks/bradcampbell/bradcampbell.png new file mode 100755 index 0000000..a3f9296 Binary files /dev/null and b/packages/website/frontend/static/cucks/bradcampbell/bradcampbell.png differ diff --git a/packages/website/frontend/static/cucks/bradcampbell/receipt1.png b/packages/website/frontend/static/cucks/bradcampbell/receipt1.png new file mode 100755 index 0000000..1705fd4 Binary files /dev/null and b/packages/website/frontend/static/cucks/bradcampbell/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bradcohn/bradcohn.png b/packages/website/frontend/static/cucks/bradcohn/bradcohn.png new file mode 100755 index 0000000..f9a2b0a Binary files /dev/null and b/packages/website/frontend/static/cucks/bradcohn/bradcohn.png differ diff --git a/packages/website/frontend/static/cucks/bradcohn/receipt1.png b/packages/website/frontend/static/cucks/bradcohn/receipt1.png new file mode 100755 index 0000000..9862b94 Binary files /dev/null and b/packages/website/frontend/static/cucks/bradcohn/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bradmarshall/bradmarshall.png b/packages/website/frontend/static/cucks/bradmarshall/bradmarshall.png new file mode 100755 index 0000000..1ed91f3 Binary files /dev/null and b/packages/website/frontend/static/cucks/bradmarshall/bradmarshall.png differ diff --git a/packages/website/frontend/static/cucks/bradmarshall/receipt1.png b/packages/website/frontend/static/cucks/bradmarshall/receipt1.png new file mode 100755 index 0000000..44854fe Binary files /dev/null and b/packages/website/frontend/static/cucks/bradmarshall/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bretscher/bretscher.png b/packages/website/frontend/static/cucks/bretscher/bretscher.png new file mode 100755 index 0000000..5c5e43f Binary files /dev/null and b/packages/website/frontend/static/cucks/bretscher/bretscher.png differ diff --git a/packages/website/frontend/static/cucks/bretweinstein/bretweinstein.png b/packages/website/frontend/static/cucks/bretweinstein/bretweinstein.png new file mode 100755 index 0000000..b8e6bc6 Binary files /dev/null and b/packages/website/frontend/static/cucks/bretweinstein/bretweinstein.png differ diff --git a/packages/website/frontend/static/cucks/bretweinstein/receipt1.png b/packages/website/frontend/static/cucks/bretweinstein/receipt1.png new file mode 100755 index 0000000..6fc3559 Binary files /dev/null and b/packages/website/frontend/static/cucks/bretweinstein/receipt1.png differ diff --git a/packages/website/frontend/static/cucks/bretweinstein/receipt2.png b/packages/website/frontend/static/cucks/bretweinstein/receipt2.png new file mode 100755 index 0000000..beb31f5 Binary files /dev/null and b/packages/website/frontend/static/cucks/bretweinstein/receipt2.png differ diff --git a/packages/website/frontend/static/cucks/bretweinstein/receipt3.png b/packages/website/frontend/static/cucks/bretweinstein/receipt3.png new file mode 100755 index 0000000..ce396d0 Binary files /dev/null and b/packages/website/frontend/static/cucks/bretweinstein/receipt3.png differ diff --git a/packages/website/frontend/static/cucks/briankateman/briankateman.png b/packages/website/frontend/static/cucks/briankateman/briankateman.png new file mode 100755 index 0000000..bd878a3 Binary files /dev/null and b/packages/website/frontend/static/cucks/briankateman/briankateman.png differ diff --git a/packages/website/frontend/static/cucks/briankerley/briankerley.png b/packages/website/frontend/static/cucks/briankerley/briankerley.png new file mode 100755 index 0000000..98ec43f Binary files /dev/null and b/packages/website/frontend/static/cucks/briankerley/briankerley.png differ diff --git a/packages/website/frontend/static/cucks/cameronruggles/cameronruggles.png b/packages/website/frontend/static/cucks/cameronruggles/cameronruggles.png new file mode 100755 index 0000000..5be3d53 Binary files /dev/null and b/packages/website/frontend/static/cucks/cameronruggles/cameronruggles.png differ diff --git a/packages/website/frontend/static/cucks/carnivoreaurelius/carnivoreaurelius.png b/packages/website/frontend/static/cucks/carnivoreaurelius/carnivoreaurelius.png new file mode 100755 index 0000000..06d0f8c Binary files /dev/null and b/packages/website/frontend/static/cucks/carnivoreaurelius/carnivoreaurelius.png differ diff --git a/packages/website/frontend/static/cucks/carykelly/carykelly.png b/packages/website/frontend/static/cucks/carykelly/carykelly.png new file mode 100755 index 0000000..c0cd9b5 Binary files /dev/null and b/packages/website/frontend/static/cucks/carykelly/carykelly.png differ diff --git a/packages/website/frontend/static/cucks/cateshanahan/cateshanahan.png b/packages/website/frontend/static/cucks/cateshanahan/cateshanahan.png new file mode 100755 index 0000000..399042b Binary files /dev/null and b/packages/website/frontend/static/cucks/cateshanahan/cateshanahan.png differ diff --git a/packages/website/frontend/static/cucks/chrisboettcher/chrisboettcher.png b/packages/website/frontend/static/cucks/chrisboettcher/chrisboettcher.png new file mode 100755 index 0000000..992acba Binary files /dev/null and b/packages/website/frontend/static/cucks/chrisboettcher/chrisboettcher.png differ diff --git a/packages/website/frontend/static/cucks/claraaboel/claraaboel.png b/packages/website/frontend/static/cucks/claraaboel/claraaboel.png new file mode 100755 index 0000000..78a8c7f Binary files /dev/null and b/packages/website/frontend/static/cucks/claraaboel/claraaboel.png differ diff --git a/packages/website/frontend/static/cucks/cliffharvey/cliffharvey.png b/packages/website/frontend/static/cucks/cliffharvey/cliffharvey.png new file mode 100755 index 0000000..654046c Binary files /dev/null and b/packages/website/frontend/static/cucks/cliffharvey/cliffharvey.png differ diff --git a/packages/website/frontend/static/cucks/daltongraham/daltongraham.png b/packages/website/frontend/static/cucks/daltongraham/daltongraham.png new file mode 100755 index 0000000..a1e91b5 Binary files /dev/null and b/packages/website/frontend/static/cucks/daltongraham/daltongraham.png differ diff --git a/packages/website/frontend/static/cucks/davecali/davecali.png b/packages/website/frontend/static/cucks/davecali/davecali.png new file mode 100755 index 0000000..40f9838 Binary files /dev/null and b/packages/website/frontend/static/cucks/davecali/davecali.png differ diff --git a/packages/website/frontend/static/cucks/davefeldman/davefeldman.png b/packages/website/frontend/static/cucks/davefeldman/davefeldman.png new file mode 100755 index 0000000..d93f52b Binary files /dev/null and b/packages/website/frontend/static/cucks/davefeldman/davefeldman.png differ diff --git a/packages/website/frontend/static/cucks/davidberuh/davidberuh.png b/packages/website/frontend/static/cucks/davidberuh/davidberuh.png new file mode 100755 index 0000000..4a3bf44 Binary files /dev/null and b/packages/website/frontend/static/cucks/davidberuh/davidberuh.png differ diff --git a/packages/website/frontend/static/cucks/daviddiamond/daviddiamond.png b/packages/website/frontend/static/cucks/daviddiamond/daviddiamond.png new file mode 100755 index 0000000..b25f8e1 Binary files /dev/null and b/packages/website/frontend/static/cucks/daviddiamond/daviddiamond.png differ diff --git a/packages/website/frontend/static/cucks/davidgornoski/davidgornoski.png b/packages/website/frontend/static/cucks/davidgornoski/davidgornoski.png new file mode 100755 index 0000000..8492a37 Binary files /dev/null and b/packages/website/frontend/static/cucks/davidgornoski/davidgornoski.png differ diff --git a/packages/website/frontend/static/cucks/davidzarkov/davidzarkov.png b/packages/website/frontend/static/cucks/davidzarkov/davidzarkov.png new file mode 100755 index 0000000..81c5384 Binary files /dev/null and b/packages/website/frontend/static/cucks/davidzarkov/davidzarkov.png differ diff --git a/packages/website/frontend/static/cucks/devanandprabhu/devanandprabhu.png b/packages/website/frontend/static/cucks/devanandprabhu/devanandprabhu.png new file mode 100755 index 0000000..d25ae9e Binary files /dev/null and b/packages/website/frontend/static/cucks/devanandprabhu/devanandprabhu.png differ diff --git a/packages/website/frontend/static/cucks/dianarodgers/dianarodgers.png b/packages/website/frontend/static/cucks/dianarodgers/dianarodgers.png new file mode 100755 index 0000000..b7877bf Binary files /dev/null and b/packages/website/frontend/static/cucks/dianarodgers/dianarodgers.png differ diff --git a/packages/website/frontend/static/cucks/edserrano/edserrano.png b/packages/website/frontend/static/cucks/edserrano/edserrano.png new file mode 100755 index 0000000..12ed319 Binary files /dev/null and b/packages/website/frontend/static/cucks/edserrano/edserrano.png differ diff --git a/packages/website/frontend/static/cucks/edwardgoeke/edwardgoeke.png b/packages/website/frontend/static/cucks/edwardgoeke/edwardgoeke.png new file mode 100755 index 0000000..832aff4 Binary files /dev/null and b/packages/website/frontend/static/cucks/edwardgoeke/edwardgoeke.png differ diff --git a/packages/website/frontend/static/cucks/eliejarrouge/eliejarrouge.png b/packages/website/frontend/static/cucks/eliejarrouge/eliejarrouge.png new file mode 100755 index 0000000..b4f22a5 Binary files /dev/null and b/packages/website/frontend/static/cucks/eliejarrouge/eliejarrouge.png differ diff --git a/packages/website/frontend/static/cucks/ericsartori/ericsartori.png b/packages/website/frontend/static/cucks/ericsartori/ericsartori.png new file mode 100755 index 0000000..5783472 Binary files /dev/null and b/packages/website/frontend/static/cucks/ericsartori/ericsartori.png differ diff --git a/packages/website/frontend/static/cucks/garrylee/garrylee.png b/packages/website/frontend/static/cucks/garrylee/garrylee.png new file mode 100755 index 0000000..58ddaaa Binary files /dev/null and b/packages/website/frontend/static/cucks/garrylee/garrylee.png differ diff --git a/packages/website/frontend/static/cucks/garybrecka/garybrecka.png b/packages/website/frontend/static/cucks/garybrecka/garybrecka.png new file mode 100755 index 0000000..1ccb1c7 Binary files /dev/null and b/packages/website/frontend/static/cucks/garybrecka/garybrecka.png differ diff --git a/packages/website/frontend/static/cucks/garyfettke/garyfettke.png b/packages/website/frontend/static/cucks/garyfettke/garyfettke.png new file mode 100755 index 0000000..3a77b94 Binary files /dev/null and b/packages/website/frontend/static/cucks/garyfettke/garyfettke.png differ diff --git a/packages/website/frontend/static/cucks/garytaubes/garytaubes.png b/packages/website/frontend/static/cucks/garytaubes/garytaubes.png new file mode 100755 index 0000000..d655567 Binary files /dev/null and b/packages/website/frontend/static/cucks/garytaubes/garytaubes.png differ diff --git a/packages/website/frontend/static/cucks/georgemartin/georgemartin.png b/packages/website/frontend/static/cucks/georgemartin/georgemartin.png new file mode 100755 index 0000000..f45ca88 Binary files /dev/null and b/packages/website/frontend/static/cucks/georgemartin/georgemartin.png differ diff --git a/packages/website/frontend/static/cucks/guyaustin/guyaustin.png b/packages/website/frontend/static/cucks/guyaustin/guyaustin.png new file mode 100755 index 0000000..bd81ce8 Binary files /dev/null and b/packages/website/frontend/static/cucks/guyaustin/guyaustin.png differ diff --git a/packages/website/frontend/static/cucks/ivorcummins/ivorcummins.png b/packages/website/frontend/static/cucks/ivorcummins/ivorcummins.png new file mode 100755 index 0000000..9c4c71a Binary files /dev/null and b/packages/website/frontend/static/cucks/ivorcummins/ivorcummins.png differ diff --git a/packages/website/frontend/static/cucks/jaimiedrew/jaimiedrew.png b/packages/website/frontend/static/cucks/jaimiedrew/jaimiedrew.png new file mode 100755 index 0000000..a127ed5 Binary files /dev/null and b/packages/website/frontend/static/cucks/jaimiedrew/jaimiedrew.png differ diff --git a/packages/website/frontend/static/cucks/jakemey/jakemey.png b/packages/website/frontend/static/cucks/jakemey/jakemey.png new file mode 100755 index 0000000..7c50e7b Binary files /dev/null and b/packages/website/frontend/static/cucks/jakemey/jakemey.png differ diff --git a/packages/website/frontend/static/cucks/jamesdinicolantonio/jamesdinicolantonio.png b/packages/website/frontend/static/cucks/jamesdinicolantonio/jamesdinicolantonio.png new file mode 100755 index 0000000..f4c7e43 Binary files /dev/null and b/packages/website/frontend/static/cucks/jamesdinicolantonio/jamesdinicolantonio.png differ diff --git a/packages/website/frontend/static/cucks/josepheverett/josepheverett.png b/packages/website/frontend/static/cucks/josepheverett/josepheverett.png new file mode 100755 index 0000000..b12222e Binary files /dev/null and b/packages/website/frontend/static/cucks/josepheverett/josepheverett.png differ diff --git a/packages/website/frontend/static/cucks/justinmares/justinmares.png b/packages/website/frontend/static/cucks/justinmares/justinmares.png new file mode 100755 index 0000000..a5ea73d Binary files /dev/null and b/packages/website/frontend/static/cucks/justinmares/justinmares.png differ diff --git a/packages/website/frontend/static/cucks/kaitmalthaner/kaitmalthaner.png b/packages/website/frontend/static/cucks/kaitmalthaner/kaitmalthaner.png new file mode 100755 index 0000000..cbbb7b3 Binary files /dev/null and b/packages/website/frontend/static/cucks/kaitmalthaner/kaitmalthaner.png differ diff --git a/packages/website/frontend/static/cucks/kemminnick/kemminnick.png b/packages/website/frontend/static/cucks/kemminnick/kemminnick.png new file mode 100755 index 0000000..c894c65 Binary files /dev/null and b/packages/website/frontend/static/cucks/kemminnick/kemminnick.png differ diff --git a/packages/website/frontend/static/cucks/kenberry/kenberry.png b/packages/website/frontend/static/cucks/kenberry/kenberry.png new file mode 100755 index 0000000..f48c54e Binary files /dev/null and b/packages/website/frontend/static/cucks/kenberry/kenberry.png differ diff --git a/packages/website/frontend/static/cucks/kevinstock/kevinstock.png b/packages/website/frontend/static/cucks/kevinstock/kevinstock.png new file mode 100755 index 0000000..de35445 Binary files /dev/null and b/packages/website/frontend/static/cucks/kevinstock/kevinstock.png differ diff --git a/packages/website/frontend/static/cucks/kylemamounis/kylemamounis.png b/packages/website/frontend/static/cucks/kylemamounis/kylemamounis.png new file mode 100755 index 0000000..587f2cc Binary files /dev/null and b/packages/website/frontend/static/cucks/kylemamounis/kylemamounis.png differ diff --git a/packages/website/frontend/static/cucks/lewiswhitfield.png b/packages/website/frontend/static/cucks/lewiswhitfield.png new file mode 100755 index 0000000..79c02c7 Binary files /dev/null and b/packages/website/frontend/static/cucks/lewiswhitfield.png differ diff --git a/packages/website/frontend/static/cucks/lewiswhitfield/lewiswhitfield.png b/packages/website/frontend/static/cucks/lewiswhitfield/lewiswhitfield.png new file mode 100755 index 0000000..7ee80b7 Binary files /dev/null and b/packages/website/frontend/static/cucks/lewiswhitfield/lewiswhitfield.png differ diff --git a/packages/website/frontend/static/cucks/macrofour/macrofour.png b/packages/website/frontend/static/cucks/macrofour/macrofour.png new file mode 100755 index 0000000..ae61fd1 Binary files /dev/null and b/packages/website/frontend/static/cucks/macrofour/macrofour.png differ diff --git a/packages/website/frontend/static/cucks/marionholman/marionholman.png b/packages/website/frontend/static/cucks/marionholman/marionholman.png new file mode 100755 index 0000000..53f237f Binary files /dev/null and b/packages/website/frontend/static/cucks/marionholman/marionholman.png differ diff --git a/packages/website/frontend/static/cucks/markbski/markbski.png b/packages/website/frontend/static/cucks/markbski/markbski.png new file mode 100755 index 0000000..b908f64 Binary files /dev/null and b/packages/website/frontend/static/cucks/markbski/markbski.png differ diff --git a/packages/website/frontend/static/cucks/marksisson/marksisson.png b/packages/website/frontend/static/cucks/marksisson/marksisson.png new file mode 100755 index 0000000..79d5630 Binary files /dev/null and b/packages/website/frontend/static/cucks/marksisson/marksisson.png differ diff --git a/packages/website/frontend/static/cucks/martykendall/martykendall.png b/packages/website/frontend/static/cucks/martykendall/martykendall.png new file mode 100755 index 0000000..f859ab5 Binary files /dev/null and b/packages/website/frontend/static/cucks/martykendall/martykendall.png differ diff --git a/packages/website/frontend/static/cucks/maxlugavere/maxlugavere.png b/packages/website/frontend/static/cucks/maxlugavere/maxlugavere.png new file mode 100755 index 0000000..f1ffe19 Binary files /dev/null and b/packages/website/frontend/static/cucks/maxlugavere/maxlugavere.png differ diff --git a/packages/website/frontend/static/cucks/michaelkummer/michaelkummer.png b/packages/website/frontend/static/cucks/michaelkummer/michaelkummer.png new file mode 100755 index 0000000..3d11cd4 Binary files /dev/null and b/packages/website/frontend/static/cucks/michaelkummer/michaelkummer.png differ diff --git a/packages/website/frontend/static/cucks/michaelmanderville/michaelmanderville.png b/packages/website/frontend/static/cucks/michaelmanderville/michaelmanderville.png new file mode 100755 index 0000000..afa72d0 Binary files /dev/null and b/packages/website/frontend/static/cucks/michaelmanderville/michaelmanderville.png differ diff --git a/packages/website/frontend/static/cucks/miguelespejel/miguelespejel.png b/packages/website/frontend/static/cucks/miguelespejel/miguelespejel.png new file mode 100755 index 0000000..2d8709d Binary files /dev/null and b/packages/website/frontend/static/cucks/miguelespejel/miguelespejel.png differ diff --git a/packages/website/frontend/static/cucks/mikemutzel/mikemutzel.png b/packages/website/frontend/static/cucks/mikemutzel/mikemutzel.png new file mode 100755 index 0000000..1355c5a Binary files /dev/null and b/packages/website/frontend/static/cucks/mikemutzel/mikemutzel.png differ diff --git a/packages/website/frontend/static/cucks/mikesweeney/mikesweeney.png b/packages/website/frontend/static/cucks/mikesweeney/mikesweeney.png new file mode 100755 index 0000000..675c6aa Binary files /dev/null and b/packages/website/frontend/static/cucks/mikesweeney/mikesweeney.png differ diff --git a/packages/website/frontend/static/cucks/nickeggleton/nickeggleton.png b/packages/website/frontend/static/cucks/nickeggleton/nickeggleton.png new file mode 100755 index 0000000..b50e65b Binary files /dev/null and b/packages/website/frontend/static/cucks/nickeggleton/nickeggleton.png differ diff --git a/packages/website/frontend/static/cucks/ninateicholz/ninateicholz.png b/packages/website/frontend/static/cucks/ninateicholz/ninateicholz.png new file mode 100755 index 0000000..84fe876 Binary files /dev/null and b/packages/website/frontend/static/cucks/ninateicholz/ninateicholz.png differ diff --git a/packages/website/frontend/static/cucks/ninateicholz/ninateicholz1.png b/packages/website/frontend/static/cucks/ninateicholz/ninateicholz1.png new file mode 100755 index 0000000..2e182f1 Binary files /dev/null and b/packages/website/frontend/static/cucks/ninateicholz/ninateicholz1.png differ diff --git a/packages/website/frontend/static/cucks/nocarbsnation/nocarbsnation.png b/packages/website/frontend/static/cucks/nocarbsnation/nocarbsnation.png new file mode 100755 index 0000000..ae4dbe1 Binary files /dev/null and b/packages/website/frontend/static/cucks/nocarbsnation/nocarbsnation.png differ diff --git a/packages/website/frontend/static/cucks/norstrongchris/norstrongchris.png b/packages/website/frontend/static/cucks/norstrongchris/norstrongchris.png new file mode 100755 index 0000000..480b8b2 Binary files /dev/null and b/packages/website/frontend/static/cucks/norstrongchris/norstrongchris.png differ diff --git a/packages/website/frontend/static/cucks/paulmason/paulmason.png b/packages/website/frontend/static/cucks/paulmason/paulmason.png new file mode 100755 index 0000000..7070d9a Binary files /dev/null and b/packages/website/frontend/static/cucks/paulmason/paulmason.png differ diff --git a/packages/website/frontend/static/cucks/paulsaladino/paulsaladino.png b/packages/website/frontend/static/cucks/paulsaladino/paulsaladino.png new file mode 100755 index 0000000..8f2a34c Binary files /dev/null and b/packages/website/frontend/static/cucks/paulsaladino/paulsaladino.png differ diff --git a/packages/website/frontend/static/cucks/peterfaber/peterfaber.png b/packages/website/frontend/static/cucks/peterfaber/peterfaber.png new file mode 100755 index 0000000..4c5b705 Binary files /dev/null and b/packages/website/frontend/static/cucks/peterfaber/peterfaber.png differ diff --git a/packages/website/frontend/static/cucks/philipovadia/philipovadia.png b/packages/website/frontend/static/cucks/philipovadia/philipovadia.png new file mode 100755 index 0000000..88d5fb1 Binary files /dev/null and b/packages/website/frontend/static/cucks/philipovadia/philipovadia.png differ diff --git a/packages/website/frontend/static/cucks/philippestephenson/philippestephenson.png b/packages/website/frontend/static/cucks/philippestephenson/philippestephenson.png new file mode 100755 index 0000000..82a6257 Binary files /dev/null and b/packages/website/frontend/static/cucks/philippestephenson/philippestephenson.png differ diff --git a/packages/website/frontend/static/cucks/ralphnapolitano/ralphnapolitano.png b/packages/website/frontend/static/cucks/ralphnapolitano/ralphnapolitano.png new file mode 100755 index 0000000..7070777 Binary files /dev/null and b/packages/website/frontend/static/cucks/ralphnapolitano/ralphnapolitano.png differ diff --git a/packages/website/frontend/static/cucks/raphaelsirtoli/raphaelsirtoli.png b/packages/website/frontend/static/cucks/raphaelsirtoli/raphaelsirtoli.png new file mode 100755 index 0000000..dde10e8 Binary files /dev/null and b/packages/website/frontend/static/cucks/raphaelsirtoli/raphaelsirtoli.png differ diff --git a/packages/website/frontend/static/cucks/robbwolf/robbwolf.png b/packages/website/frontend/static/cucks/robbwolf/robbwolf.png new file mode 100755 index 0000000..a7905ac Binary files /dev/null and b/packages/website/frontend/static/cucks/robbwolf/robbwolf.png differ diff --git a/packages/website/frontend/static/cucks/robmeijer/robmeijer.png b/packages/website/frontend/static/cucks/robmeijer/robmeijer.png new file mode 100755 index 0000000..7b23e19 Binary files /dev/null and b/packages/website/frontend/static/cucks/robmeijer/robmeijer.png differ diff --git a/packages/website/frontend/static/cucks/samtsimikas/samtsimikas.png b/packages/website/frontend/static/cucks/samtsimikas/samtsimikas.png new file mode 100755 index 0000000..c09b885 Binary files /dev/null and b/packages/website/frontend/static/cucks/samtsimikas/samtsimikas.png differ diff --git a/packages/website/frontend/static/cucks/scottpsysher/scottpsysher.png b/packages/website/frontend/static/cucks/scottpsysher/scottpsysher.png new file mode 100755 index 0000000..efc6b88 Binary files /dev/null and b/packages/website/frontend/static/cucks/scottpsysher/scottpsysher.png differ diff --git a/packages/website/frontend/static/cucks/sebastianramirez/sebastianramirez.png b/packages/website/frontend/static/cucks/sebastianramirez/sebastianramirez.png new file mode 100755 index 0000000..7dd610a Binary files /dev/null and b/packages/website/frontend/static/cucks/sebastianramirez/sebastianramirez.png differ diff --git a/packages/website/frontend/static/cucks/shawnbaker/shawnbaker.png b/packages/website/frontend/static/cucks/shawnbaker/shawnbaker.png new file mode 100755 index 0000000..c5c7639 Binary files /dev/null and b/packages/website/frontend/static/cucks/shawnbaker/shawnbaker.png differ diff --git a/packages/website/frontend/static/cucks/simongoddek/simongoddek.png b/packages/website/frontend/static/cucks/simongoddek/simongoddek.png new file mode 100755 index 0000000..fe3ddcf Binary files /dev/null and b/packages/website/frontend/static/cucks/simongoddek/simongoddek.png differ diff --git a/packages/website/frontend/static/cucks/stevenarena/stevenarena.png b/packages/website/frontend/static/cucks/stevenarena/stevenarena.png new file mode 100755 index 0000000..41b65b1 Binary files /dev/null and b/packages/website/frontend/static/cucks/stevenarena/stevenarena.png differ diff --git a/packages/website/frontend/static/cucks/stevenbelknap/stevenbelknap.png b/packages/website/frontend/static/cucks/stevenbelknap/stevenbelknap.png new file mode 100755 index 0000000..c0ef099 Binary files /dev/null and b/packages/website/frontend/static/cucks/stevenbelknap/stevenbelknap.png differ diff --git a/packages/website/frontend/static/cucks/therealtruther/therealtruther.png b/packages/website/frontend/static/cucks/therealtruther/therealtruther.png new file mode 100755 index 0000000..af53bbb Binary files /dev/null and b/packages/website/frontend/static/cucks/therealtruther/therealtruther.png differ diff --git a/packages/website/frontend/static/cucks/thomasdayspring/thomasdayspring.png b/packages/website/frontend/static/cucks/thomasdayspring/thomasdayspring.png new file mode 100755 index 0000000..e16794c Binary files /dev/null and b/packages/website/frontend/static/cucks/thomasdayspring/thomasdayspring.png differ diff --git a/packages/website/frontend/static/cucks/travisstatham/travisstatham.png b/packages/website/frontend/static/cucks/travisstatham/travisstatham.png new file mode 100755 index 0000000..0f51d33 Binary files /dev/null and b/packages/website/frontend/static/cucks/travisstatham/travisstatham.png differ diff --git a/packages/website/frontend/static/cucks/tristanhaggard/tristanhaggard.png b/packages/website/frontend/static/cucks/tristanhaggard/tristanhaggard.png new file mode 100755 index 0000000..5df951a Binary files /dev/null and b/packages/website/frontend/static/cucks/tristanhaggard/tristanhaggard.png differ diff --git a/packages/website/frontend/static/cucks/trokalayjian/trokalayjian.png b/packages/website/frontend/static/cucks/trokalayjian/trokalayjian.png new file mode 100755 index 0000000..1299313 Binary files /dev/null and b/packages/website/frontend/static/cucks/trokalayjian/trokalayjian.png differ diff --git a/packages/website/frontend/static/cucks/tuckergoodrich/tuckergoodrich.png b/packages/website/frontend/static/cucks/tuckergoodrich/tuckergoodrich.png new file mode 100755 index 0000000..c663a19 Binary files /dev/null and b/packages/website/frontend/static/cucks/tuckergoodrich/tuckergoodrich.png differ diff --git a/packages/website/frontend/static/cucks/zoeharcombe/zoeharcombe.png b/packages/website/frontend/static/cucks/zoeharcombe/zoeharcombe.png new file mode 100755 index 0000000..804a1d0 Binary files /dev/null and b/packages/website/frontend/static/cucks/zoeharcombe/zoeharcombe.png differ diff --git a/packages/website/frontend/static/cucks/zsófiaclemens/zsófiaclemens.png b/packages/website/frontend/static/cucks/zsófiaclemens/zsófiaclemens.png new file mode 100755 index 0000000..ef02513 Binary files /dev/null and b/packages/website/frontend/static/cucks/zsófiaclemens/zsófiaclemens.png differ diff --git a/packages/website/frontend/static/debate/arguments.png b/packages/website/frontend/static/debate/arguments.png new file mode 100755 index 0000000..ee24700 Binary files /dev/null and b/packages/website/frontend/static/debate/arguments.png differ diff --git a/packages/website/frontend/static/debate/cucklist.png b/packages/website/frontend/static/debate/cucklist.png new file mode 100755 index 0000000..cab53f2 Binary files /dev/null and b/packages/website/frontend/static/debate/cucklist.png differ diff --git a/packages/website/frontend/static/debate/cucklist1.png b/packages/website/frontend/static/debate/cucklist1.png new file mode 100755 index 0000000..1032bcb Binary files /dev/null and b/packages/website/frontend/static/debate/cucklist1.png differ diff --git a/packages/website/frontend/static/debate/gibberish.png b/packages/website/frontend/static/debate/gibberish.png new file mode 100755 index 0000000..c79f573 Binary files /dev/null and b/packages/website/frontend/static/debate/gibberish.png differ diff --git a/packages/website/frontend/static/donate/cardano.png b/packages/website/frontend/static/donate/cardano.png new file mode 100755 index 0000000..8ad57c3 Binary files /dev/null and b/packages/website/frontend/static/donate/cardano.png differ diff --git a/packages/website/frontend/static/donate/checkmark.png b/packages/website/frontend/static/donate/checkmark.png new file mode 100755 index 0000000..0d365d1 Binary files /dev/null and b/packages/website/frontend/static/donate/checkmark.png differ diff --git a/packages/website/frontend/static/donate/ex.png b/packages/website/frontend/static/donate/ex.png new file mode 100755 index 0000000..6b58b9b Binary files /dev/null and b/packages/website/frontend/static/donate/ex.png differ diff --git a/packages/website/frontend/static/donate/gibberish.gif b/packages/website/frontend/static/donate/gibberish.gif new file mode 100755 index 0000000..d9fe209 Binary files /dev/null and b/packages/website/frontend/static/donate/gibberish.gif differ diff --git a/packages/website/frontend/static/donate/kofi.png b/packages/website/frontend/static/donate/kofi.png new file mode 100755 index 0000000..8ba1b24 Binary files /dev/null and b/packages/website/frontend/static/donate/kofi.png differ diff --git a/packages/website/frontend/static/donate/liberapay.png b/packages/website/frontend/static/donate/liberapay.png new file mode 100755 index 0000000..a2b85d4 Binary files /dev/null and b/packages/website/frontend/static/donate/liberapay.png differ diff --git a/packages/website/frontend/static/donate/merchandise.png b/packages/website/frontend/static/donate/merchandise.png new file mode 100755 index 0000000..af49dae Binary files /dev/null and b/packages/website/frontend/static/donate/merchandise.png differ diff --git a/packages/website/frontend/static/donate/patreon.png b/packages/website/frontend/static/donate/patreon.png new file mode 100755 index 0000000..c939708 Binary files /dev/null and b/packages/website/frontend/static/donate/patreon.png differ diff --git a/packages/website/frontend/static/donate/paypal.png b/packages/website/frontend/static/donate/paypal.png new file mode 100755 index 0000000..aca4d98 Binary files /dev/null and b/packages/website/frontend/static/donate/paypal.png differ diff --git a/packages/website/frontend/static/donate/question.png b/packages/website/frontend/static/donate/question.png new file mode 100755 index 0000000..820d581 Binary files /dev/null and b/packages/website/frontend/static/donate/question.png differ diff --git a/packages/website/frontend/static/donate/stripe.png b/packages/website/frontend/static/donate/stripe.png new file mode 100755 index 0000000..5faf7a6 Binary files /dev/null and b/packages/website/frontend/static/donate/stripe.png differ diff --git a/packages/website/frontend/static/donate/youtube.png b/packages/website/frontend/static/donate/youtube.png new file mode 100755 index 0000000..f6d08e0 Binary files /dev/null and b/packages/website/frontend/static/donate/youtube.png differ diff --git a/packages/website/frontend/static/gibberish/epistemology.png b/packages/website/frontend/static/gibberish/epistemology.png new file mode 100755 index 0000000..05a7611 Binary files /dev/null and b/packages/website/frontend/static/gibberish/epistemology.png differ diff --git a/packages/website/frontend/static/gibberish/gibberish.png b/packages/website/frontend/static/gibberish/gibberish.png new file mode 100755 index 0000000..91244e7 Binary files /dev/null and b/packages/website/frontend/static/gibberish/gibberish.png differ diff --git a/packages/website/frontend/static/gibberish/metaphysics.png b/packages/website/frontend/static/gibberish/metaphysics.png new file mode 100755 index 0000000..124e629 Binary files /dev/null and b/packages/website/frontend/static/gibberish/metaphysics.png differ diff --git a/packages/website/frontend/static/gibberish/normativity.png b/packages/website/frontend/static/gibberish/normativity.png new file mode 100755 index 0000000..3a5e1b3 Binary files /dev/null and b/packages/website/frontend/static/gibberish/normativity.png differ diff --git a/packages/website/frontend/static/gibberish/ontology.png b/packages/website/frontend/static/gibberish/ontology.png new file mode 100755 index 0000000..5c80581 Binary files /dev/null and b/packages/website/frontend/static/gibberish/ontology.png differ diff --git a/packages/website/frontend/static/gibberish/philosophyoflanguage.png b/packages/website/frontend/static/gibberish/philosophyoflanguage.png new file mode 100755 index 0000000..8157c7a Binary files /dev/null and b/packages/website/frontend/static/gibberish/philosophyoflanguage.png differ diff --git a/packages/website/frontend/static/gibberish/philosophyofmind.png b/packages/website/frontend/static/gibberish/philosophyofmind.png new file mode 100755 index 0000000..a6e9c6f Binary files /dev/null and b/packages/website/frontend/static/gibberish/philosophyofmind.png differ diff --git a/packages/website/frontend/static/gibberish/theology.png b/packages/website/frontend/static/gibberish/theology.png new file mode 100755 index 0000000..a566592 Binary files /dev/null and b/packages/website/frontend/static/gibberish/theology.png differ diff --git a/packages/website/frontend/static/interviews/drshawnbakerpodcast.png b/packages/website/frontend/static/interviews/drshawnbakerpodcast.png new file mode 100755 index 0000000..f0ff674 Binary files /dev/null and b/packages/website/frontend/static/interviews/drshawnbakerpodcast.png differ diff --git a/packages/website/frontend/static/interviews/fitandfurious.png b/packages/website/frontend/static/interviews/fitandfurious.png new file mode 100755 index 0000000..41ddb19 Binary files /dev/null and b/packages/website/frontend/static/interviews/fitandfurious.png differ diff --git a/packages/website/frontend/static/interviews/foolproofmastery.png b/packages/website/frontend/static/interviews/foolproofmastery.png new file mode 100755 index 0000000..48d5398 Binary files /dev/null and b/packages/website/frontend/static/interviews/foolproofmastery.png differ diff --git a/packages/website/frontend/static/interviews/ketogeekspodcast.png b/packages/website/frontend/static/interviews/ketogeekspodcast.png new file mode 100755 index 0000000..b77cfb7 Binary files /dev/null and b/packages/website/frontend/static/interviews/ketogeekspodcast.png differ diff --git a/packages/website/frontend/static/interviews/legendarylifepodcast.png b/packages/website/frontend/static/interviews/legendarylifepodcast.png new file mode 100755 index 0000000..e7a9daa Binary files /dev/null and b/packages/website/frontend/static/interviews/legendarylifepodcast.png differ diff --git a/packages/website/frontend/static/interviews/markbellspowerproject.png b/packages/website/frontend/static/interviews/markbellspowerproject.png new file mode 100755 index 0000000..52d92ae Binary files /dev/null and b/packages/website/frontend/static/interviews/markbellspowerproject.png differ diff --git a/packages/website/frontend/static/interviews/musclememoirspodcast.png b/packages/website/frontend/static/interviews/musclememoirspodcast.png new file mode 100755 index 0000000..7dfd2ec Binary files /dev/null and b/packages/website/frontend/static/interviews/musclememoirspodcast.png differ diff --git a/packages/website/frontend/static/interviews/sigmanutritionradio.png b/packages/website/frontend/static/interviews/sigmanutritionradio.png new file mode 100755 index 0000000..330eb90 Binary files /dev/null and b/packages/website/frontend/static/interviews/sigmanutritionradio.png differ diff --git a/packages/website/frontend/static/interviews/strenuouslifepodcast.png b/packages/website/frontend/static/interviews/strenuouslifepodcast.png new file mode 100755 index 0000000..6af4ab3 Binary files /dev/null and b/packages/website/frontend/static/interviews/strenuouslifepodcast.png differ diff --git a/packages/website/frontend/static/misc/seedoilphylogeny.html b/packages/website/frontend/static/misc/seedoilphylogeny.html new file mode 100755 index 0000000..816ff43 --- /dev/null +++ b/packages/website/frontend/static/misc/seedoilphylogeny.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website/frontend/static/navbar/arguments-dark.png b/packages/website/frontend/static/navbar/arguments-dark.png new file mode 100755 index 0000000..af20f4c Binary files /dev/null and b/packages/website/frontend/static/navbar/arguments-dark.png differ diff --git a/packages/website/frontend/static/navbar/arguments.png b/packages/website/frontend/static/navbar/arguments.png new file mode 100755 index 0000000..f81cf3b Binary files /dev/null and b/packages/website/frontend/static/navbar/arguments.png differ diff --git a/packages/website/frontend/static/navbar/community-dark.png b/packages/website/frontend/static/navbar/community-dark.png new file mode 100755 index 0000000..1580bc7 Binary files /dev/null and b/packages/website/frontend/static/navbar/community-dark.png differ diff --git a/packages/website/frontend/static/navbar/community.png b/packages/website/frontend/static/navbar/community.png new file mode 100755 index 0000000..e27ea6d Binary files /dev/null and b/packages/website/frontend/static/navbar/community.png differ diff --git a/packages/website/frontend/static/navbar/contact-dark.png b/packages/website/frontend/static/navbar/contact-dark.png new file mode 100755 index 0000000..d3d15fe Binary files /dev/null and b/packages/website/frontend/static/navbar/contact-dark.png differ diff --git a/packages/website/frontend/static/navbar/contact.png b/packages/website/frontend/static/navbar/contact.png new file mode 100755 index 0000000..e24e881 Binary files /dev/null and b/packages/website/frontend/static/navbar/contact.png differ diff --git a/packages/website/frontend/static/navbar/cucklist-dark.png b/packages/website/frontend/static/navbar/cucklist-dark.png new file mode 100755 index 0000000..a1aca83 Binary files /dev/null and b/packages/website/frontend/static/navbar/cucklist-dark.png differ diff --git a/packages/website/frontend/static/navbar/cucklist.png b/packages/website/frontend/static/navbar/cucklist.png new file mode 100755 index 0000000..3838466 Binary files /dev/null and b/packages/website/frontend/static/navbar/cucklist.png differ diff --git a/packages/website/frontend/static/navbar/cucklist1.png b/packages/website/frontend/static/navbar/cucklist1.png new file mode 100755 index 0000000..8c115ae Binary files /dev/null and b/packages/website/frontend/static/navbar/cucklist1.png differ diff --git a/packages/website/frontend/static/navbar/cucklist2.png b/packages/website/frontend/static/navbar/cucklist2.png new file mode 100755 index 0000000..3bbd9e4 Binary files /dev/null and b/packages/website/frontend/static/navbar/cucklist2.png differ diff --git a/packages/website/frontend/static/navbar/debate-dark.png b/packages/website/frontend/static/navbar/debate-dark.png new file mode 100755 index 0000000..b263626 Binary files /dev/null and b/packages/website/frontend/static/navbar/debate-dark.png differ diff --git a/packages/website/frontend/static/navbar/debate.png b/packages/website/frontend/static/navbar/debate.png new file mode 100755 index 0000000..21b2af6 Binary files /dev/null and b/packages/website/frontend/static/navbar/debate.png differ diff --git a/packages/website/frontend/static/navbar/discord-light.png b/packages/website/frontend/static/navbar/discord-light.png new file mode 100755 index 0000000..bfb8246 Binary files /dev/null and b/packages/website/frontend/static/navbar/discord-light.png differ diff --git a/packages/website/frontend/static/navbar/discord.png b/packages/website/frontend/static/navbar/discord.png new file mode 100755 index 0000000..c9d568b Binary files /dev/null and b/packages/website/frontend/static/navbar/discord.png differ diff --git a/packages/website/frontend/static/navbar/donate-dark.png b/packages/website/frontend/static/navbar/donate-dark.png new file mode 100755 index 0000000..7f39a1b Binary files /dev/null and b/packages/website/frontend/static/navbar/donate-dark.png differ diff --git a/packages/website/frontend/static/navbar/donate.png b/packages/website/frontend/static/navbar/donate.png new file mode 100755 index 0000000..773611a Binary files /dev/null and b/packages/website/frontend/static/navbar/donate.png differ diff --git a/packages/website/frontend/static/navbar/gibberish-dark.png b/packages/website/frontend/static/navbar/gibberish-dark.png new file mode 100755 index 0000000..3f4a501 Binary files /dev/null and b/packages/website/frontend/static/navbar/gibberish-dark.png differ diff --git a/packages/website/frontend/static/navbar/gibberish.png b/packages/website/frontend/static/navbar/gibberish.png new file mode 100755 index 0000000..574aec3 Binary files /dev/null and b/packages/website/frontend/static/navbar/gibberish.png differ diff --git a/packages/website/frontend/static/navbar/gitlab-light.png b/packages/website/frontend/static/navbar/gitlab-light.png new file mode 100755 index 0000000..69bee86 Binary files /dev/null and b/packages/website/frontend/static/navbar/gitlab-light.png differ diff --git a/packages/website/frontend/static/navbar/gitlab.png b/packages/website/frontend/static/navbar/gitlab.png new file mode 100755 index 0000000..38876e9 Binary files /dev/null and b/packages/website/frontend/static/navbar/gitlab.png differ diff --git a/packages/website/frontend/static/navbar/home-dark.png b/packages/website/frontend/static/navbar/home-dark.png new file mode 100755 index 0000000..8320dae Binary files /dev/null and b/packages/website/frontend/static/navbar/home-dark.png differ diff --git a/packages/website/frontend/static/navbar/home.png b/packages/website/frontend/static/navbar/home.png new file mode 100755 index 0000000..8568836 Binary files /dev/null and b/packages/website/frontend/static/navbar/home.png differ diff --git a/packages/website/frontend/static/navbar/hyperblog-dark.png b/packages/website/frontend/static/navbar/hyperblog-dark.png new file mode 100755 index 0000000..869ab68 Binary files /dev/null and b/packages/website/frontend/static/navbar/hyperblog-dark.png differ diff --git a/packages/website/frontend/static/navbar/hyperblog.png b/packages/website/frontend/static/navbar/hyperblog.png new file mode 100755 index 0000000..14bcbc2 Binary files /dev/null and b/packages/website/frontend/static/navbar/hyperblog.png differ diff --git a/packages/website/frontend/static/navbar/interviews-dark.png b/packages/website/frontend/static/navbar/interviews-dark.png new file mode 100755 index 0000000..5c20202 Binary files /dev/null and b/packages/website/frontend/static/navbar/interviews-dark.png differ diff --git a/packages/website/frontend/static/navbar/interviews.png b/packages/website/frontend/static/navbar/interviews.png new file mode 100755 index 0000000..6f2cbfe Binary files /dev/null and b/packages/website/frontend/static/navbar/interviews.png differ diff --git a/packages/website/frontend/static/navbar/mastodon-light.png b/packages/website/frontend/static/navbar/mastodon-light.png new file mode 100755 index 0000000..7372c8b Binary files /dev/null and b/packages/website/frontend/static/navbar/mastodon-light.png differ diff --git a/packages/website/frontend/static/navbar/mastodon.png b/packages/website/frontend/static/navbar/mastodon.png new file mode 100755 index 0000000..75a7270 Binary files /dev/null and b/packages/website/frontend/static/navbar/mastodon.png differ diff --git a/packages/website/frontend/static/navbar/nutridex-dark.png b/packages/website/frontend/static/navbar/nutridex-dark.png new file mode 100755 index 0000000..55661ab Binary files /dev/null and b/packages/website/frontend/static/navbar/nutridex-dark.png differ diff --git a/packages/website/frontend/static/navbar/nutridex.png b/packages/website/frontend/static/navbar/nutridex.png new file mode 100755 index 0000000..e4eb8d5 Binary files /dev/null and b/packages/website/frontend/static/navbar/nutridex.png differ diff --git a/packages/website/frontend/static/navbar/nutrivorelogo.png b/packages/website/frontend/static/navbar/nutrivorelogo.png new file mode 100755 index 0000000..e56c949 Binary files /dev/null and b/packages/website/frontend/static/navbar/nutrivorelogo.png differ diff --git a/packages/website/frontend/static/navbar/services-dark.png b/packages/website/frontend/static/navbar/services-dark.png new file mode 100755 index 0000000..8260f27 Binary files /dev/null and b/packages/website/frontend/static/navbar/services-dark.png differ diff --git a/packages/website/frontend/static/navbar/services.png b/packages/website/frontend/static/navbar/services.png new file mode 100755 index 0000000..f8d8a4a Binary files /dev/null and b/packages/website/frontend/static/navbar/services.png differ diff --git a/packages/website/frontend/static/navbar/twitter-light.png b/packages/website/frontend/static/navbar/twitter-light.png new file mode 100755 index 0000000..f5d964a Binary files /dev/null and b/packages/website/frontend/static/navbar/twitter-light.png differ diff --git a/packages/website/frontend/static/navbar/twitter.png b/packages/website/frontend/static/navbar/twitter.png new file mode 100755 index 0000000..415fa9a Binary files /dev/null and b/packages/website/frontend/static/navbar/twitter.png differ diff --git a/packages/website/frontend/static/navbar/upRootNutrition1.ps b/packages/website/frontend/static/navbar/upRootNutrition1.ps new file mode 100755 index 0000000..6b02df4 --- /dev/null +++ b/packages/website/frontend/static/navbar/upRootNutrition1.ps @@ -0,0 +1,3340 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[32 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + upRootNutrition1 + + + 2024-12-02T18:04:09+05:00 + 2024-12-02T18:04:09+05:00 + 2024-12-02T18:04:09+06:00 + Adobe Illustrator 28.0 (Windows) + + + + 256 + 44 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+IMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJ AAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1IUCAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAz ZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwA AAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAA A9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RS QwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1Q YWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAS c1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAA AAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNj AAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5p ZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAA AAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAA AAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBp biBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDP FAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAA AAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMA KAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCy ALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIB WQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4 AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oD ZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATT BOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowG nQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiq CL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsL Igs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3e DfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPUR ExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSL FK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUY ihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzM HPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUh oSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3 JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDks biyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJj Mpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5 BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/i QCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVH e0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9J T5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX 4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2Cq YPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFq SGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQU dHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+ wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZ if6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSV X5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFH obaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1Erbiu La6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsu u6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJ Osm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc 1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3m lucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe 9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf///+4ADkFkb2JlAGTAAAAAAf/bAIQA BgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8f Hx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f Hx8fHx8fHx8fHx8fHx8f/8AAEQgALAEAAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQF AwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMB AgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdU ZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eX p7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUE BQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PS NeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG 1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/a AAwDAQACEQMRAD8A9U4q7FVqSxSFhG6uUPF+JBow7GnQ4quxV2KuxV2KuxV2KuxV2KuxV2KuxV2K vO9Q80aRpXn+W9iVxZtF9U1y5VWKC4HL0PhpuwEDLVc0mTURx6uxyIqR8/4fjs7fHglk0tHmDcfd /F970TN26h2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvO73XtF8t/mPPQmK1vbTnqvE MyrcDlKj8RU8ig6Ad8hkyCETI8gzhAykIjmWcaRrGm6vYpfadMLi1kJCyAMu6mhBVgrD6RkcGeGW PFA3Flmwyxy4ZCijMtanYq7FXYq7FXYq7FXYq7FXYqlHmTzHaaJZerJ+8upQwtLZalpHVa70rRR+ 036yQDTnzjGLLbhwmZoPG0h1i4mayWQzxalJBM60QpK92nqW0klwjMFkdU5IVDKD1rVs5OYyymY/ ziPt+m5dDttzH2vTQ8OMBL+aD9n1UO7ffl9z0/8AL/zTYappNvaLKfrUEdIg5BM0KHisiNyfmAKK xqfi9iCem0eoE4gfxB57VYDCV9GWZmOK7FXYq7FXYq7FXYq7FXYqlckeiPqzw3c1vPfzqpgtJTGZ FiQH7CMS1K8iSB+rKjhiSSd20ZSAANmAfmXqlkIdLXy1cWzy3Ms0ZFkkM3NlCUUstaU59PfNH20T DgGPaUr5Ab8ncdkjj4jPcCuZSnyx57uL280qx1DT4vTu5RZ/XYYoAzSkqOTK8Tio9ReVKeOYui7T 4pQjOETxGrrr+C5Os7O4RKUJkULpNtU84LaXt/8AorRV1TT9Mb0726ljhVFblQ8fSiXaoIqSfGmd N4EP5o+TzvjT7z81HzZrkWp2fl5tBuPqEeqTD1Le3VYmSWJlBaV1of3bNsKAftfKQjGI2ACDKUuZ t6hphnOnWzTyGaZo1LysgjZiRWrICwU+NDhjKwCxkKNLdX1KLTNLutRmVnitImldEpyIQVIFaDIZ 8oxwMzyiLZ4cRyTER1KDvPMtpa6TYak8btFqD28cSDjyBuaca702rvlU9XGMIzraVf7JthpjKcod Y39jzky6BfeW7m61jUIrLXNTvJby2uJI2kVDBJ6aIAA3wUSm/j3zJIvYuODSXaVq/mCz1SG70FYp ri8uJYJkgUx2d76MSyFljcJwk61K07e9dFrIS0+WMsA3ndx6Gv0u50s458Uhm5QqpdRbNn/MJbxt Gjsf9GvLjUI7TVdPnX99CGB5LQ0PUbNT8dsuPafHwCO0jMRlE8x+O9qHZ3Dx8W8REmJHIs4zcOqd irsVdirsVdirsVdirsVeVfmjNKnnXRER2VJLecSKCQGAtrsio775r9V/eR/HQudpvoP46hJ/K87r caFAIXZJY/LTNOKcEKWTUVu9X5bfI5pxL9+BXXFv/ml2pj+5Jvpl+8MY/IDUr+bzdZWUzsLeztXS CIk8aP683Lj0rWZt8zOz5EzA7h+txNdECBPeX0pm8dO7FXYq7FXYq7FXYq7FVk00cMLzStxiiUu7 HsqipP3YJSAFnkmIJNB5h5usfM1p50u9T0+OCcahZi3tZJpY4zAHQIzcXdCCCrEE7b/RhQlumfl5 qNzrllZRXpgtNOtvUbUrSRCTcOebenxbmN3C1IGy5otXosmfUg7xhGO0h3u50usx4dORtKcjyPcg dCttJ8q+dNWh1Te4sI5ZNGaTZGlYVi9uTIwpXYHNbo8eLT6qUcv8P0/j3Ow1c8mfTROP+L6vx707 t/y58wHyUfSeS212SeSae29Xis0bUT05KNwOy8hXbcjvnXvLN6Z5N12fUYNS1qwtNLjiVbSCztEj T1HnPpPKyxll5Kjs1a/sjamU5/pr+dt8/wBjbh+q+7f5PVsuamJz+f8Aypd20kDepcQ3FuzPGUqr I8XMo2/VlPH55r46/DlIhz4v0udLRZcY4+XD+hjulp+W8ElrevHeRmHlcW1tcSSyxRmEycSoDMp/ uH47npgx9lYYyBo7chZpM+0ssgRtvz2Fom41jyLa6I2ly6fPd6Wjs1XXkVeRZJWINQ60ZCpI6fLL 9Vq44ADIHf8AU06bSyzEiNKkF75OsnsSrXs66O9y8RduYgMccokU13IpbtxXMPLq8MpRkbuHF8Nj f+5LlYtLmjExFVOvjyr71+o6p5Qu9bg1S906aG+09/U+tEcDxjkeOsij4m4GKvEio6ZVlzYJZBOU SJR6/Ejf5NuPFmjjMIyBjLp8B+tkOm+c9E1HUI7C3aT6xIpYB4yoBUuCpP8AN+6b7szsWvx5JCIu /wC39RcLLoskI8R5f2frT3M1xHYq7FXYq7FXYq7FXYqwj8xfy/vPMjW9/pl+bHVbJWWAkAo1VdaG oPaVgajf265i6nTme4NEOTgziGxFgsW0qyu9LurOzuoJFurRtDj+rhayyCwtpIp3ijUkyIp/aWo/ HNT4Exl5fxY/9iDbs/GicfPpk/2RFJr+Wn5WTaBNY6rqDCLUbe0Fs8EZDhjVzzdh8IIEvHitfsg8 u2bLTaXgonnTr9RqeKwOVvS8znDdirsVdirsVdirsVQ2o6haafam7u3EdurRo8h2VfUdYwzE7BQW 3PYYqxy9/MXywFmt1Ju34yKIQFKyhQ3SpPJHC7NQrTAQCKKQa3CCTzl5RjaZL/TEtHib0zyiTiWo Sy1dY6Mu1VPjt3yvwIfzR8mfjT7z818vnPyInqcLRJGiI5qIIwQDIsbMwNCoXnWrU2x8CH80fJfG n3n5qM2teRbl4JrvRYvTkldLe7aCJkaOFHdpVkWo4qY6FSe4PTK5aPDLcwj8gzjqsseUpfNGDzT5 Ia7e2S1ikNQLd44onE5aT0R6NN3rJtUbZZ4EP5o+TDxp95+alH538pW885Nh9VuLOR0P7qJZAEkM Luqqefj0GEYoA2APkg5ZEUSUyg8+6DcRPLbiadIg7SmKP1AqRBS7koWWg9Qd65YwTZNE0dLgXCWU CzKhjVxGooprUDbvU1yoYICXEIi205pkUSaVjYWJfmbaIuQy8uC1o/2xWnRu/jlrU5dPsF+zbRL8 Ij2RR8ABAXp0ox298BiDzSCRyaOm6cSxNrCSzFmPpruxUqSduvFiPlkPCh3D5MvFl3lcbOzMnqGC Myb/AB8Fruanenjvh8ON3QRxy5W6GxsoeJht44ygonBFXiN9hQbfaOMccRyASckjzJVsmwdirsVd irsVdiqhfzywWNxPDH6ssUTvHEKksyqSF233OCRoJiLLyZvzR846vbiys9Ka1up4IpWkh5rLFzvp IFJMiOiq8cPVl/arQgZrvzU5CgPxbn/loR3J/FKtr+Z3ni10tUk0N9RuYLa1d7lllRpJJUUuGVIu PL1GMI4j7akmi4RqsgH03sPx+hB08CedIeXzt+Ylvr0dzJC89gYLyc2ccLCLnaWd1LHGTxL/AL5v T7/aXbrkTnyiV9N/sBSMOMxrrt9pCb2vn/zjeemx04W8NxJAVpHJzSMtbc/tgg8vrB3I6A/PLRqJ np+Nv1tZwQHX8bpfH+Z/nm0SZrjRjeMY5ZkKxyIi+lYQXCxqFQmrPK1eTfskA9sgNVkHMX/YCz/L wPX8WXpnl/UbrUdGtry7gFvcyqfVhFSFZWKmnIA0NKiuZ2ORlEEuHkiAaCYZNg7FXYq7FXYq7FVq xxqzsqhWcguwABYgUBPjsMVXYq7FXUH3dMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQ kP6L/Sd16PpfpP0ofrnHj6vpVk9D1KfFxr6nGvvkRVnvZG68kXkmLsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVf/9k= + + + + uuid:284acf14-21d5-467c-a4cc-7ff053b61871 + xmp.did:1e6b69a4-aca4-4f44-967f-03e801d35322 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:593c3f81-b59f-4ed4-a601-11f9441e4f46 + xmp.did:4a10e5c1-906a-0d4e-96e5-2652a54bc3b3 + uuid:5D20892493BFDB11914A8590D31508C8 + default + + + + + saved + xmp.iid:193f220b-bc15-064d-b07e-aad815753e3a + 2024-12-02T17:59:50+05:00 + Adobe Illustrator 28.0 (Windows) + / + + + saved + xmp.iid:1e6b69a4-aca4-4f44-967f-03e801d35322 + 2024-12-02T18:01:31+05:00 + Adobe Illustrator 28.0 (Windows) + / + + + + Document + Print + AIRobin + False + True + 1 + + 1280.000000 + 769.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 29 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + Adobe PDF library 17.00 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 1280.0 769.0]/Type/Page/PieceInfo<>>> endobj 31 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 1280.0 769.0]/Type/Page/PieceInfo<>>> endobj 34 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 1280.0 769.0]/Type/Page/PieceInfo<>>> endobj 43 0 obj <>stream +HWI$+}j$z@M/ճCx.p73w!##~wG u7_>>~>/8 ֑K)|W?>Rx֐Z9g#8GXC8Wh%3ŰQC?L9T1Bր.ӆ;;f>hRfO_s0ׇylۆ.atzWb-ZpE + +ePTcCQMB]DH$UD‘>^H8uD}FThQs$jL7Q@4[N2>ޒXv*!W1KkZTEz]Řp-*B)7 -?"bY蘜T Jp e@C3 YL [rՎK;rYk{N ֭nma0[;w׃-2~͜Bˠj7-{S*y0uO-U!WT;*kk箭z-jY;:j̝]_ZsmbѪ://%nZ(R/%Y-V0q|n-Nk>7۳~˱MG|^:!HDhWQR2&[ޒ.Xwl"}n<`pJ8-tT矙{ߩKc7kLhfYߥ1kS1$Ia[ +S*/K}ɿJ_7|/I_ORKߥ/7ˬ'w80R !/2 7v灮l&ExCF>EULWbdڸ4ڇD1BN Si +ut'ķR=@ov0T`nFH:>Ydao E4גB2LUcIw,̢5ľm7"W*R +(]J`JGͨBʕb^[9b~D)¨FC,ۨ|mY&ECBK/ZN2P$Wr vF^}!~#b83C5Rd_̀6nn[qfEeś^09]b5 4SF]WE򼀍=y wk>>[T.*":пj= .NSmI!y4VҮ4W lOC/7sl[B/IR~ր,3Z$\^)tUy ] f*lc茕(~\ r'/iDx/e@uA[! wo$ +1=uywFǽ:ɠGms_qRmGAULG%ăRgB0*}W(EFgFJo>è9s}!ً* w4& U\}"fSV=Jk>ȩî[{3{H}nЎEU9}UFV&ކ(l@q ylCބV8ݨ>ͨn N}>"j̩󏖲 ^ɧ(ݞs)Lzg4랮N<|Vm >ansm[8gG^kQrR[z-'#ŲBDMgۤ<Pro2~(kriU^^dB#rc鶆zoDؑW>Oy6O/ 3(D|09H{2?50j D'dg8McAD,>_ +rYl[⌜ͬĻ2v +#耽 +D m8®/滅][weabn6KǏat;jnJuf&6u6.+6w%z.'Vhh}H䳞&ϥlO:%Z]/MDO{"ȷH=#:臙* h2IGPA"r+uJd@ٷb6`i$Ir$QOQ(hHb!zEYdV,e<="TVKҢlD8[lK8B 3йx:8^VvL6l$kdbFe3Ʒ'!Cg5X  9/#EpX0d7A^_ʆ)%^5q lļe/Ʀo|U6Ύ1a4Բ+VYB˩uw+K1O./%MP-Z?1&YQ +i0;5zVsṩ*HY$KhLn$ylsL[;49C(X+h'dӎa59hx!BAY2Ū4\yuŠ2_]8_ֱCXa))Ȇ) ^v |t xNx/yGW3/5R!X%sɒfЊϝ*,dK97W;I yvVѓh[]˩/m Y UJюy'޺ + \}7N]\\d7GUˌABݚszən#iv^ +ĒqgNH1j5Nn㴙.E6c-JP[1xK=?6Hhi}11XM=w=PpcgOhx[׎#lЈ@:3m%. # ?qLQ%`K9dm@:Zp{Bc@L-d+#(`YՎT,g_ԻȺ)}Tv'\2&ՙQ^9161jDV%aS{]ec 5NLG%&L|ʟyn]:'$%•h9=WcAn=G'c׍8N;)NT6=!qD>1orgJm)\Y|/ 1D+R*~b4ڠ^K Q}rw3iYݠםPFm Jp* mRYH֞/m5sę@3M{NI•*9xUWLWmєn N8‚T7v'ٵGd+/vߨvd.lrxp0 +=J]wAX  m;# $Wxhj ⿤>>C=+kIy8 },lG^ޚ♱r$ьq,j]47Ka꛾a*6GZ9F#xtTN +CƓcdb:a/dV*-XdӖ?ER*Vu[c%}:[tWZ +-q7oĒK#0e'fEqC#,]N<-VSj91JV}hU~Μ:hԒЬ}8Mđ8~W!PHu"lCq>7N2Vʲ/Y1#Р&wkk_ .~A5 /uTϪ0[zj^foS3 Ҹy4hN4 7#|,ui!Hy +5\*?ȋM:mwN0a^O\V ocBDWhLϓ8ҿo>a63ʗvylx}o_? +endstream endobj 44 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 28.0.0 +%%For: (Hp zBoOk) () +%%Title: (upRootNutrition1.ai) +%%CreationDate: 12/2/2024 6:04 PM +%%Canvassize: 16383 +%%BoundingBox: 344 -651 3664 -118 +%%HiResBoundingBox: 344.832362721818 -650.330708661419 3663.81714782616 -118.669291338582 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 88 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 0 -769 1280 0 +%AI3_TemplateBox: 640.5 -384.5 640.5 -384.5 +%AI3_TileBox: 244 -690.5 1036 -78.5 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: 431.362204724409 876.858267716536 0.440972222222222 1897 917 18 1 0 5 108 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:334 -780 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 13 0 obj <>stream +%%BoundingBox: 344 -651 3664 -118 +%%HiResBoundingBox: 344.832362721818 -650.330708661419 3663.81714782616 -118.669291338582 +%AI7_Thumbnail: 128 24 8 +%%BeginData: 3232 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD3DFF99CAFD7EFFC9A0FD7EFFA79FFD7DFFA89F98A0FD48FFA87D +%FD32FFA79FCF98FD29FFCACFCACFCACFCACFCACFCACFCACFCACFCAFFA8FD +%0DFF7D84FD31FFFD049FA1FD28FFC9CAFFFFFF9999A0FFA8FFA8CAA8FFFF +%FF7D7DA8FD0CFFA87DFD30FFA89F989F99A7FD28FFCFFD04FF9F92989FA0 +%A8FFA87D7DFFFF7D52CAFD0CFFA852A7A1FD2DFFA8A09FA098A099A1FD2C +%FF99986E9892C9A87D52527DFF527DCAFD0CFF7D7D75BAC9FD2CFFA1A0A7 +%A0C8A1A0A0A7FD26FFA8A8FF7EA1BAA0C19F98C9A87DFFFD047DA1FD0CFF +%A87DA87DA19FA0FFFFFFCFFD26FFCA75A07CC2A0A14BA075FD26FF7D7DA8 +%52A1989F989899FF527D7D7DA8A852A7CAFD0BFF7DA8FF7D7DA198A0FFFF +%C9C9FD25FFA8757CA1A0C9A0754AA0FD26FF52A87D7D9F98A09F92CFAF52 +%A8A852A8597DCAFD07FFC9A7FFA7C97DAFFFFF7D7D999899FF9FC9FD25FF +%A851A07C9F98C94A4A75FD26FFA8527DA89F9FFFA798A1A852FFFF7D527D +%A8CAFD07FF9FC9FFC99F84A8FD047DC2C9C29FC2C9FD25FFA87C7CA19FC2 +%A1754AA0FD24FFCAFFCAA8A8FFA1FFFFFF98989FCFFD05FFCFCAFD07FFC9 +%98A098C97DA8A87D52FF98CFFFA06EC9FD25FFA84AA07CC2A0C9757575FD +%24FFCFA7CAA7CAA7CAA7CFCAC999C2CACAA7CFCACAA7FD09FFCFA0C9FD04 +%FFAFA8A8CACFFFFFCACAFD25FFCA764AA1C2C9A07C7CA1FD3DFFA8FFCAFF +%A8FD05FFA8CFCAFFA8FFA8CAA8FFCAFFCFFD23FFA87C7CC2A0A075A8A8FD +%24FFA87DA8A8FFA8FFA8FFA8A8A8FD05FFA8FFA8FFA8FFA8FFC8A0C2A17D +%A8A87DA87DA099C9A0C2A0C8A0C2A0C8A0C2FD25FFCAA0C9A0FD23FFA8A8 +%7DA87DA87DA87DA87DA87DA87D7D7DA87DA8A8A87DA87DA87DA87D9FC29F +%A87EA87DA87DA8A7C9A0C8A7C9A7C9A1C9A0C9A0FD27FFA8FD24FFFD0EA8 +%FFFD05A8FFFD04A87DA8A8FFFFCAFD35FFA1A8FD04FFA1A8FFFFCAFFCAFF +%A8FD6DFFCF7CA17C7575A1A1A17C754AA77CA07CA1767C7DA1A1FD6AFFA7 +%FD0475A0757C75A07C7576757CA0A0A0757575A0FD6BFFA1767CCAFD05A7 +%A8A1A8A1A8A7CAA7A8A1A7A7FD6CFFA8FDC9FFFF +%%EndData + +endstream endobj 14 0 obj <>stream +%AI12_CompressedDataxiǕ&}?4`Z{ܭz<Ac RY"9d,yE*DxȈg}9_gf?>:}/^7O~ӝ +:b"}n_˟7O۷{|t?^z߼~_TgZcJ cv>o%yϾ _NMow]l:h5_LaWV-*(f핗_ݬy/߾~wߝ^xNrg_gyū/}| Xo)#v__o,// wy=|oopOY˱ +^e'ʯ_}ͳw`i7ͷ/dN{?GjكP|h]ۿ>w~6Z;Mq__>zymW_ݾ7Kܼx&!COo߀^\峿rTo}W&SFA0z8-9=ÓN{t٩y E"erj;M<߼~?7r=DW+_{<Z}+ܬ~+ioܾ̫z>"i8_^}C*N/%hūӻ?=\o _h~K^_/~{/_}/^'?p;Jz?PTtnw~={=~ /\?s]_bt^>{-/eokr~z+?sW|Ko}˗O~ Z7|w߬$Xg<mŧb쳧ObW!˗Ͼt:֫zw{dJ{ғ0<i8L4]᮴2Vy賳ZA ndOZi'ijċ>`Y_􍙠'C0pLҽ9;YeK[g v{'{{@1pYwP]uZ{>/o! 6*a p p~$\`z 7X(qq9GadX. <1Șe,eʐ\$\ƥOkMH +ih QSkhw*:ѤD'PQ +D+'V4CI44P nv2H?OEJT$tSPF$%iɓ>5EzZ)*Ҕh*SUT#e@]?B]+}E +멬3RRp8~49LR8GK{lP P("E+ =d&2Utqxؤ D2KED\'4q*>($HRց)&ViRMGNäa$$m7ԍ+;;uϑ"#5GZ&%G)4$I\J?R-i֋#ހF 3*С)\@m(y Ȁn\0}# ز`2GJt' 2 t>]YRŃ-` |>_7`_ 3M\n7'q 82u3]n.r9dg[\GjW>Gi9d=n1Ls;auƌ=X=<:Md< uxF'x^M@^'1=N)87g3vXCXO9^pfO8b;qpƮq./ +;x>3cg-nB݀/Gz0eMkP \&1yЏidnG`tgA}T8Tyu.@tnϠ#zQbzPkP>KeI859Β{GxGxM?}q|-fv ZYx>`E-OW&!ayzIYNTrv˲IAmyC:wV9>;N{QJaԓ{xyud^o}Oc]w>,2{K43nxƌma +M=B(蓛gm_r z+6؞8n/ȲB"%ឯ!$Zo^?{?'i{Ea/Uçu~רCoYbr A d і/k jAV[I[4fȴ9_]:\7; ]G98nHf,(ǫR{ăWC?pEh\+v*_+- +γ&A <ѣS I~o(E+Ykz i5q>+rGI4ijfLnY'Qq]i8_ =m_[r\ٷ.> h\9EM͏yDmaw-}ŎkEqbg3_9ވֆKHG+ 6P C)z屌CK52B5|bTB+֜IUS~1Sp Xr+~MiG,fDY׿MfHc=cYQ=c)ҫh[=3 5 uDR.Wp]YuU>K8.I:˸D;Gyčqۣ$*'I|GQ "DtPK4 /g$ rv,g*8Wl_9m_7 +3sEj۲[%\%]IgImըD/d=BiIA|Zy a{b~Ⱦ f?#z4~ z6ۘIP؞?_RXaU88K1D&Mik[===\(2I`&Eh.n2DDB +Q([26qz%>4J)/>.l=bP{dNs ~ ҝOo"~oϿ~y-=KL(m}L{ãAo ZKCUsNkBCIJ<͋1yie83솹lP0F^v.]ܒk h0 3j>kvaه>>Oc2fGn!Iq8G#G#}đ>HqG#M<#MqZt]{;>hǔƥ:qDrNG% &MKoB<6DEJ%G**1xuU'1D-ߞ|P"q#g1!Z`Y)'!:*xx-% qXC!TC> +lAi$Vd*̬YZQh#Fڥv,'1KS H،c8Y%\2.T06]m]o;]:U>%X@؀mрL%-֜K%! :Whk3di2 +ٻJtSH[5U0ؾlg9q=Ī]!%з8'[ S8 /2HH>crAJD~=("VX8QM(YDGŃ Z*  >6xt2CB\Wu؋S7kp-؏21)&ؕCMD_R+*kb!" +{3FSXRVz÷QyJzv?=nDV7:J$BCX&# 9^/NM.f&$#loVwH).OgVqqNwO]/9;H~eeQДv[f Dz3)Ә{+Ӷ&9 $+`NgUHЌ,b32*t5 S ~pUc:W1)G2@vQqZkK3fE쁮d. &B](kVUz7h|I*(gCS?RKDH|L|K5ϋu WG~AYVbj7}?I됬Wܴ_łu.%%Y'iҚ=-Z+W% 9#ЅѺ3fE&+"ڌ4Ok7" ]5d"" O;k)WPVD-љ29J~o%0$zGg3zEDu$yC/${B$ϳ$?#>#=!cux툾SsD/\L1;9[ z6_#{6zw4U~iڧ!f[i(;yLg&Yg.Ӽw^ӫ|W,nĂjFԚS bYG܌m]:w܌ׂoͺYa_δoFIC@3:ĿG7J1K=G]۸sV8$_-cEzBxtGӡek[6;wXK}lЖ*vBkbPW$](ZRcߖqGe 8w a@9cԿ C}9tlruos[P~y61ܒۜ59fI+{(sD/{(EȻI7.Ϣ9IF`N)_xKr,/X{3ՙ:W;ǒGvT݊Զt\65ѦT>tcҍ3.*YޜRC58U#{jHioƋ6`8VpD7%Pr:i%U9$(BGsE뇊/]YKV9"ܮAU.#Zu̮1s:>$Hd6Wre\TKYˢa~`)⻧Bua8,:QXJnȇRcɐM=zX'[|Rkx y?,.FMA渐њ5@'Ȫ]]OhRf /f̴80We5`K:lZ-z$qvr2䏩fFW<Ȅi]=@.}RSk򪠮*լ +nUV/`ESR[S3W* ?JTf +U f [X dޤ SF!\@xQ"BF(t,@sQM;qG,9ļX3S쐝KRܹm<,q벒i`$2͌xek1c5Ā&Y>1rBm:NTZAm'[@ TTkV[htJE]bI^/P S6 .nfݙzRHA2.z|5vs\)M;Y &I]qMHU寡FV>ͅB<\5W\im*TSjY2袚dgjS 2(F jiϨ@T>uP)9u7;;l)#kw- FH +~TGŏ"=]2;2JY~˼]oK;5;V굽U׋ުe-v-='퐼X1uI˸q?涖HDϕTJU}Ag1R+z蒄`!i s zI|e{9b_KK7Mln\.tor/v?N7r IJ +Sv0v B9IN虔 \)#gÖ՝%k4 +?Ȯ$(t?7vS6&-O~^X@1rmv<:wBǧ+>vLaJJ9fV4;fXQjN\b-Yg8M WY8")z8kg(W;ZA6rȥv?ًeֲ~Q)Qq!hR6!0%HK"hĈG$CPPVt7A%.7UxWc]QR@5XX3TrN6p;A9 wW-B*oj0fO= qbűAЍ <97Y9A!$j`fgvuA5^Hb1WbQ\ w[/a"ff58! +8-[ |Ni `~bvcS>\Қ`;pp&pdnBpLnRj;LV{wdO%32&E{];6Ӛ{*iPj!01nEpJ X0*ұ`)HNFɒukA(uQźN™}ԋ7Uö.C^)gaUqhM|% isз6C>:ZXZU7!C5;#<?T=&@`h8(uYltY;7)AǏW;9Gבּ|Kgۯq z6b[~o}Cq, elk7[V㏩RtjVJz`cn\nAot!ԛڷw_1~"1+˼?+Hs#}>ݘ{AAڄf&1:.yCg5P^{Qp`+IaF-!<AlČb9#O>f:'p*5V[cj[Hĥuŷodox?Nm QCZ9~baT~8! 䣉: 'uPʻ0/A3M}ݫkdwb>Vя7|bRSfgHfj>>Hvi~LzLzLzLĮ^111KZRlJW]$GbuAwIIs&4EؒTY1#YDWECDVAtafULB ?s3v>c-b⨘"QpȨˌ3ϰP19! Htc`4^hhb5h`Q_r*B>unmU:q):RiL}b.klȡi9r.-GHp䐚xP6#]DUk4i!;6C޲qFI$ G`]<80yLjRiXW*)^nsUMQ/P2 0gئ24|F11 'z*~h9wSa Z'_ow֪/&PzѽIdɣ +NJ&@>3 ys1tm՞W-r)h_kL`mQ̱l%_:"b1Kg DӈyVِrvԥkB;ѧ4Wᦸrkj_!5{#NVӈ{^.N9n{]g"Vnɟp1K'q=KնT*Hm%Uۊ]'Rs+tm)GR)c*g:q]A{.:;zcD=́c_PPS4鐆S$x.WK*J[zXRWiala$: {Fve2TA؂&0E .*`b\)؃->&h +.Pה *N6@B3'qGBC]X# dK.-J&*:L7S;z;u9:J5"%Bm&$,p5} 0*aQ2qMUwPP1--Q=|y1F\`m9ѺM!}EqI Tcۓ`IPfX!LH7%/r+v+ewMIC\ :4\8Xjm4ٰ@sAfais]Ycq샞g޷ +nݰXF)ߛ\r0כhz>SwYwu˸jCm>aG9Ǔsw1<6iz\գ.~Nour؉z 𖻺7?Md!eqfRZIIXeSXaFydE7oXf:z wrzjA~?%-ٕ +-ųvn:Z:}g𳉇VEx 8 I+nw탫Tޕr{WmnKl ^2nMj}_VK85ިs|&$[$/mvTJVt& t]]t*)զ1!5\/)-UJ/ՒTR#@J"LJ{װf%WiwVwN,)-\74͹3<|}( տ|vɒS%ۘǒr$GߖJj;ޒ-%!)7n}ȿ+o.(UEA(+uξoTMf4=B`C[.TB#VꈯL0=u'IEqI)$#gcس)*[+=$V !%"͙oeexQ]-5~GA| +OzY E,مi) LuqU2z-D=ӈBcF.Lˢmϼ ȚuDE/Xk,ǚCZ )OЯXPhQ tr;Cv3p+jWǛE^'xg `fm01%>N(tMᓨb1ϦL}x{X +c*ksU >VA|X +c*U n] +c*U >VA|X +c*`D*yu ~:nRTfVջwl Z`uTmeQQuX\Qԯ;oc*F354X;Z7VIqTD\Khh1[g#b48Rc/gDq7@Pb +UrGxCîμ_FUS=)4؎;EeKDDcW: B*TnQ]XihbB0 Ub>4(FA:QRH'J5LM Pʹ$եRlZvqWU-NSjrcm=\uf:NWh<$^rIݚ(]Q:QLe89rxw4wR{JTN_FYԣUX'JQ^ioQ@{݈4IFck22eo;X?֭t>FTq^U_!n\1q7?}2 W̸5ǰ6)'`.maR5)Wd^;wA{,~D_x/4'NL(j )JȠDH ,n}mw}uTo\0=d.V~0Bw{3+N'=4k+}]]1[W\15w Nk|YBRU =` h:Y_:Cq;NDf t fhg<0@&X<8RM?A0ɘЀ?$._]Xu4ŠZM]ʬrjbb %FjĠcdљ5Ϩ4Jf6L\67JRU__+ +3+޹]¡ރ]KG[݉b6nYm+, +1̃~Ll +7z.KN XrTRu&x]}IN2kW\ r_ p9^SL9VƸ`6MqOpʾGNQ㭳-JLֱ!|UU7ncvV9e<%y䚨9#4UQhfwEkCڔzk$CcEciM{Mެk54pڰ{~ݬtC t v=GaQRA 0){hum?dMD\a_5Xx4}v߱[&}׌5_Rwwk 845{S>0;ap뼕nShʾo8c;C_]Pa.*ԅ4 no;"/FWvZ+-Ks-VM4 >)t ]vmSC<ֱ_ +|2SXn-P&ny+0)S`ZIUjJyAU3Ui$* 9QcXIh.I/_+\ϾMks_.eo%1buUuXCuc8=RPwlD:ko;WRʪ/2̕8+ϻTJ?+6`<^…<I|7++Y]C m8Y^9<,prNGhpJyFY&K^%'$'1 һ"'nRp UQ.t:}뼙&pIU*tS.)cI:ksII^qK)_$~G#sۆzf;ΛJv+{wtŤIrn߲4ht"m'DLi=͢ImLQ|m{˟c*ܩtcE_nUs9}OJn1rs9i*l+%>֊9H"I\f%*S -X1b58J-GoK F-Q╌UuZ[VlLUq<ϝk]Um:>9Ֆ?@3TNC)zm׫Qrs(hPFjHqXy +73[,>*e9o͔ܥJʓL8,B*ӘPjF 0C~򷯟|ן}V;O[y~͛/a޼z׷4Z;eKv;=tW tX 3aC[J>!KPQ7^VkݿiSO~މ~`ܼn%/<~]?;zb/qW8>/أ/~Owokc  =o&*ԋ9ʳ!(c'Խ@76|!h $X,f/{vwj{lV&ÚzpO7'1bTfe"p-$k; xa|mר]/['OܳV) |bރ 5}]pf3쌔/y[WzXo}Pxu\.̏sX+??E;i> XEV~}E4}Sz؝Sa`acYb.voc.bvOcO0hdv2! q.!<Ę ̘3uO`W) d` +ѴqOo1A^rnNq.X${2@8Zx(WPt4L@ܼb7w>&S4"IOų(`X thv7#Bғ=(e({61{8vPQb +`&[yI+")&ՅAg@"vzr{/3$1 =e +g^n +185`8vL8_+;Ҁqa4<@Yw'= XlWfLyV# ph:Y: *_ JݽԜ5:.بppoFYaj;xZvhgD$SpZ' |Oh8)4>d* `0sX.f<ɤ dR=>3hO`ۅń|&Ͱ&wO˝(bqnv(a8ZTp@Kz[0qgq' +p+`N (q!GJur!NFdžvgNbT/D3|+|glA6=U\*gd&*Μ)3aXl'g_dA~b-1pW,β+>8Ѹf/ق76h܉!AMBkV6 ;L\P8ȒJ(],N83l<=bl BRU'//*p|\-ujQ`,;⬸ SAB1yS <ƻ'SpcԤq?}"8@4L \ +gj3utEQeI!׼g*@P~Vٰ(~, +̉U`.K =]01Xu4@Al~ 1EwrBhS]P96;cvG;^xW3%_p?@j0]>7eTOy'/ + +vz +q9YX# eb?A\ְΒui;>ÀspLu(aN®Tf7~4v:X<> jD dJ\% -"Rhք[f9NC;3lċ.-XX#l``♡-dafK$4O wиWԶ lcGYm!, ϸ)`GcrP;rW״q4t=p7G}߂)dK fz'S{J#v8qLP~-F硇PZy(q;(`PIJ&DbYpU,1?N)=a-8 */gq%aSP4E_ <0Q/ߍ3$ixc}a`9=7 )4DLЛ O2 N!fґj.Ti[cVUթf}=L7zؐK]=xc<ͻ*. bIdyO-!"Zk "w]va<*47KO6z5Ely][;Kc(SŃTbx^p'9~! .A34]`D+X"q@e,]ah& d~ CPi^EQ>v%g:hO0g!P.LWEʞ'qЫigqkജD\_`KØv>3kl#DtCp9 +Mb#CUFSP&z]`b~[O사7q2dkWi)X!";ưU+y:rt Zp[{į-?nH& Z=px!=Dn0/N(ȍjJBVQ)OKEAy\硐t8߿Ljx7?39L|xG+(:id9(e#W;B߲$Ylxt1ZjqG_ޠQ - `j`+q=5ldbHKƱmr!~r4` ^ +R)%r;1FxFw9n 1Zέqtn\rS3l U2G;q<ƒ\˵dvNR0;O8dofD!lε\wy0dRr(^eN@Ѣ"hCհ2Y,2O*oԂ2*b$oyS$ݧ~AM`̈́; Eꨶ7KMe\3CD)m8yBdﲖaj̖.oW!:qjIEYK  +_,,"$%+JŢq((@$)y8oV"AΊlpT0w\/$C;Ac\, ,:d`UQ/7tx7+!i\Y%K kAW,sc Τas3*{~1+ 3 CXǵdz؊i.vfDxrLwnPs#m&&H\lHf2e<~gBiv\15>*!̃%J cvIϦ::m޾gH@f90DTȒB)@qЍ W@7e0\b1 ^/y7HQzucƷc x9{\Ȁ;A ]4QCK!8ֱ,Sbt1Ct`8S>(Gu&O|nj:|"9粁 , ;sq-um@$(XE(B F^ەcETm:GFvܟ 9P^ZZ8 :U+ЂfHAE~t@;a{04 NAO #qاa0)' +=S YbC#/U{${5-ѕ1l aT+r;yNá>PLd 0.g|֌Sv49Ą ' L7(9C?3 ~*ϴq1 -ڞ{##n()5V㸙rcF,>AN)G_!.'cJe2:<~ughtཊN;IC˹M64|@s "j9r0Rh6c<<] +ჩ>N*R<\ ;`q5HdER.,N%:fop'jcbd{e{FAѨv%;u-%vNH 1Z' 4A%Sb _ )X3|H2j7,*z{]13?G\ȌqH@GVu Vm-/ڝ2|l4Vxd'ichmAx7eh+o(EmGH)\f$B&m=.bgCf<de;CYPlkL6Y`UϢ:y2a(fω`E@n>{%7 ẓsUK9VThETK=I{H91FŹ@hE]䂦bjDulc1;EԂ +N}E#2`mȔx`D%pE'c*"n bа#y[v bd'B?0u @ p ب"[Sx!NJ @mx\5-@<.T5 2HX/Os%4_Z!(:cĮG?6MM׷F^(abe6ehjG)ړ<Cw8[}x8C9oәM mV57\w{ `lKKdوؔ#¢#6#"0ɠS `md ZNdhlUfPNRp϶f83ÉR:]JyƉuA; AY€ 6+l@i4lĦ-7~ 3o&{޶U"v +>[:|8} 2=4spWMGfgɀ,ta3W}G:[;0knŃo)ozsT 97*;@pyg/tv{>`vCD`H;![a;1~j CddH CfL;cfS,wCd]I3BVԶdUlXmž<-(Q =u2dzE:0-J@ܳ\5EG%">4YryFu e(!x`r +v2K7j3 +DM#b:A|q̛[㶐9brOsՄ{ǯ}yx>tJ1qI`z{C26H3a 0}W?Kf0lwK1 ąk,T5MD\*[@KQT)D@Ċ'C@hօ$Ks`0s0]i9$d XeRwqDz4I6Ε}WƂ8bR Ǭ֩?[))0s; Pj\sj>X?M,)0-'YA5$DxЄ  /Ὅ 9N}rJmc$3@' #v' +{Zc1Jʹ}D"oBX zfX Htq +Iee2\hX؞{qzR uB$/el1퓵~#F=} +=6=m*lA]ZLFWo=th䏞wh[8F<_"&i60JTE [G#`ЊTRrhEC" dz+5h3#+9BA\tЮV(q'\JG cS0uZ NV!#=KT)@T)"ggM:3I";iJ 0.-eހta +v ߟcRLx Jmi 3EHtC7r=OaH{%bpG&@AX[uV6횸Q.l\Z,!U ^@2jk1c6ւu e3 hNt;SA:㝤+;d1{2usp )HllGKw"3bGwK#ݥ`|n~0 潘DayLYn@N2b+F6a:}m"QS:H[1u֦ +Swxb*$n0؍F% >E\W6B}YTʙ <0 ņHEք +< +K>vaAi<\w#-O~QP,C9vݡbY3G3qK_ruvG.D";A0z$+hJ%Q`JePPK XnZq"6ʤDs\{BQ3eLjPt-qS6J'O>&$AZ=؉4J(gc-3U3)%Y'=uԁI7&N4P9.x'4SrZ]vxiH4(LP>+\1, +AHF9vi3&*L~fš|`D/a3K#:"f S=>XT+55Ӹ<=8o90S(hB!`Xh= 6#& -NmߟnPߘ[o]{)Yku m +BFxO&|t, Bl$'TE*ql2611 IU,j+fafvIo|kH! %ΰC@;$DB*APP 'n"ĻYN6Vbd.f`!vҍMIc.1%:[jux6Ҙ7JEt" U:eD%#O|J[C-Y2[RܷᨍO8_yi3a{Sv|` xFޓ@B/G֠Us/w>{sp/v]f3q6$n'^vv$+ON?P`3kXs{"9?&KrXʲ|@:+{e E*`!zcEr h,eNJ2f+19 f,I>qrc*z_\}WIY9a[ ]8]r\ 5QjltJrM Z4td0UX\FC[w\c>b[-88/ yⅩCea +ORx+H{b t3Wcqr(XθȵK\j@ꅅR6h_b,Dr|^kz8=.!݄CNHĜ fY0L \79fhE+XT,5pa&8.PM agҁڋv<3K6-(C]%6ACdt{MO`^P`ƀ~S:p+U3[;6#Yt >H|QucJrJfGe}D>lʯKڄ{ Z+V] H6 +%Ӆ{0l͠p$6 -\pM,B󑹓%Ó)jpL0hcHsm$aD#C=101 +L;ź3)|zva;5SFNwî٢%hqI}Hn;zTBB맪id% u>Ѿ/Y ggbq&\)#3a=wB* (%bpW0m;$X +db +b'܊vQ, X@uWNr kXJp΢3!Ԍve)[iWpK&1[3W!zuHG(Ejyǒ$>,/7dzԳVnnSiѤnDqG˞έDN܁DC9_ͦoD`H͚v%kЮڑHd8 +5bh;.ɽX[H3zԈUnȁ N*F.'3M2R+ .W|bhlZ vnzOROwh{(1ɏ܋xbuJK፦n|,a\vA066B #Ei0(K3T7_ngտ[[5kTɟX8e,@$%3uz)FROVAt~7հVZhI Wc*^JجWR&O΂mO@,wU }˧ll9_,&GUWQlN%s؉GXR:}yLil>g6B8NY; $a͌.ĸRO:ƆvYEil' 7fdn־F/ވ|?L"~sqJw:c;JqܦuZrTKέ\W*kӁiڮɸtl]2vY'nXtQL +bYXD2bS>W Df:u q'+1HEsi-ŎxJBV+SL`zQ<yUYhUݢR6D!j1uhcᵊ&36;\\aЫ}F-*3>hO0+J6DySjMki]AfXClAݰ+Kl'ȁWrT,#ht[:a 1ڷr:J$ )G}GÑn0ľ2$؏[e# 4Qvle,IbRT2LSCV:6fwR=ɍs^ +012Yc3vaM =C;"CkVWueLY_<,K?Ov@mgАmq!&<"l ]k]C'8tY6FןTk[B6*\+<ìKg_FDWn8ô m,F{F鼾UF1p+%8("r|ELfg2FRy>0i}/yANe{;]$خih(U(5RfYBCYt4Ɗ` ](P,ϡY:۵ʷR ƢklmKLgP..q\dvceK)9$6;xln)uPȕج'LBP_pb'&9^tpcCA^#G_fei e/Ee~ 8),fA# +P|tPƅ:=t(ʬJfyNޮ1;CA܎ج;~/Mb`l,`K uY8[kCl e;[p`H̓d_sdUM]:Хu4ZRK;k hJ3dPd<9"W1T4>zlS/Tv3T~}mֱO}D ev5\mwnn0z r}? >9bpnċ`7oCz@PwY3Ui'ݪo+d`(AVvP>dMzpTA" cM=VeJecvP~7zhP+&]m#OlڧzCC7rbtB=.k mWB+R6:/zH/Hi)=nơ xh퍾vA c ׈Q 7#nTnHfv c@==tph:`W7]5;`3Dvڿ;qx=@wB7߻3\zp(mG#һ1K~/%^`<.f>hv/ +l,}%ʢb/sCk%P)9`vh-Y؃) + lX@*T_^3PG_Eu͓F`a$AV!|P^tR diq-%Zi9)2M:O1F}Lt!Hy>X9.factܠ>:f@v>;]Dۄ{ϱ35d@ȸw^GRG3F ̀d}f@*inhOJ*\O'0`B Y%}2Hŀ$g]j7gHe¸&Åu;?\ݗz#cNjhd}k1zbC~ ׿H:#7>9cX߂hcq@Y+4ߺʒ\Wz 8*53Ml2,Hl0Mўf EAY;2T(fe͌8=YUu*{x쫝c7 /Sz%ُLy~.D=K=<3W^z?lVZy{3Ž64:~??}~sEx q,y-zHII2ݑDU+o{[S s{OlyWf33{k@gT N1ʬIeGJHvxyXD@b:(ClԷ H_8D;5xRKcl)~RMlYe($P/ jrˈxe7u"ثK:W7C =ju- +ȹx*- ]}A +@sX_ qp +zy I5 ̆qWjڶز8㛌C؛4 u+ ʪ-W̋3< B_x^W‹ ){$x˰Ղ M<~8-!j'.<8&!0 r,0QwAI}qw8A9g]\i45pqnie`M+$MvP AOJS]-D-"&E\]/o:Џ +ֽ" +C*ٽQ7N$N3YyK3?L;}X" wP1 hh wX$3Xն5X7 +eL Ro&$B*x.hD5P^Q'OtKl-(Ր\LY(8t4Sî/dKK[?44߮=vyڝ-r u`6{yI0BAQT ʊPX65.B`wsJT>\yK@6!LS$i?>y[렙.N%@c¿۩^`Lv-p/msgɶaq4}oْnwnWBUQ+VѻysoG +8YYr]Aک2g ?BNCyDhN<9%x((B`xTqi(Pg+} Ƭ(!A^bɢe3-\$-+We+ԃ|| lHfBB8ˆ;R>vːR*l0 t4t/B @m,TwƩH 2s^J0p+Kz@7JB`vbm(ZMnkkZ`<|L_v@v ,`Fyr6\ +,C?,,,5,pUf5@O` +oEp8Olrfs+s?ݻ(54&jt"n"NjX`p9<7q +< $B +zBvMDBL!=<(7>3}q~f`ϟCa~-붕 c.o-@.J[d24`/~iT;LBP/tABp83$;1Rak@V0tq%*댼r8l0ː lޭ٬wC +`n̕ eK>Q2%ŘsyA/ rCo< 6|2m;&:-66mܪc4YnםIZI3A#). iX5#R@ @.3тlx3H<.%{O([T \N0 `, :}qh؆̘!bแj-՝X^]peq4י-}" $ ,nh 8Wor;7H]H06dIg &XtwE}(!cJ YE2e Z0s:95l쫯9D*sZYWնM>vWQmU)vcDiW{X2Λ;(, `'T6ɮ1HRۋ;`~VD0!-+f`hw'p\\(-o8qt|+PfeloFDzvU4G`FQ #{E\:ݬS#+i=\8Nmᅑt5 4>mlDCmGdӢe|_ 0iENm~EP&ڡ=S'C`,ȕN ~ώMdP[Q=he)Оa*g>n^5#+<`+ ^Ԃ=<ՆέVb |֑= +E86 1{gN(޲icy_N[/TaOYenv KniflE05SfdȌ)W.8A,^gc~Cl"uYzܨ\&4+y7FΞ{ +쑫 EAlWx4M{X2[MӾR]7İʌ|]qx-,c_rB@C/Yh2ZD 1z+ :b Y|hLTnɖjC*vI"Rכc^ܗNC +-i[߷xH&)OYp=*y 3_-lMc33Ӷ鐢*E]HЃ"*`ȿBT ]ѧR&Nl Ah471tU kh: ♐CӢ%Ur#ZZxÈ\3 ^J5ZW.e'~I(~]1zڲ@Π4|ͰEc9jnT!*JsSV5JzZ=Q>Tv'E̶5+0fئ_rPr᝞Aldqi 'Cpe L|F?ZF@[2S?ad5LMTs~2cC@أ]Dċ(o/mMdyqxXc@1beJ*yOG!]FAʿH]*h21Fǜ=T{|c$P4%I7m:^|\JXB4lx ȸ+*TC:*: +hHj: z$,~!G*c)@ Bj +0X^Xf2-P/I5Ļ⽪Y4cV;eXEs " }!E!_ҪҪv4skE * Ĉ#oKL䟣[ACIHaU̬ Fyn6gB4o#|Mg\o$t>(3Ic*8S":׫rntZL;, q_(N1Mb~c=ónҵeGQ`d?oEvɓv+c3} cTq'Nag'Z\j+Llh5- q]6ŢwH [~=!)Fl7" cB W'0Axx3=7 i#nv%2l̫Tq% opgE{i>> +Z0[ +NS$ kp䴔"TUÇ56x +^<% +A%_cTQ[HH.$! +W)bJDT~@AEYn,RRwmXqtm)zW[,4 +t*[1"p:29δmHMJsVV{s@F4*׍`3"6Ȧ؅ +;fQ?#6'EgPsJ#xX&wB\?5#UnX3 SN`>$;*$G'C<;a,}V-$jUl\_Xnj/\ʍRE#if\]çTdRpc$'9ǶC _)Y2BeK*n}"q1 +9qres[hcE|4  X. +;)kA*2\a& 1/v*܄C@ +QIo..UK Oq9T 6(`H=T$x-)9T0?sBO)ogV,u`X &'=eE./3$&m*;BNX㬝#dx*vxUH s+,ƣ9 Sr8i[p.Vf%N5qevCaA[ N ~NbTG,׶{s C>1B@ N:SA2!x_ԷH΁vU_5*/n{PHo'^] ~Ȝę@oEt]Ţc[5*ܪDSˇ86f{pϿQ~N+̈́sI)&E+FS g]fVX-@XS V@wm}o.;^ޫx.ڄx'-@<6e0b%/İ兺Y n)ѩOJ)we7ixh֞y-S{Fw-\6?@뱧^?UMi롦vX>T,+<_K Ȅk;\.0l"ހX߈i#$3"%؈j v&c*lf:rPatPz1)8 +N+/ Яl-6O.96/H> +xaNq-c;/dX2_/A!ouB^y@ IІ&`qQYVD-^esxaC9#3:W,eS 0!ו_3CY#WJ0L.􄩄P1 sXV`\ +~<0- +ya$ʲF_Bu2u0yPh @W ZuQ"rrZôT(jW.0*av*ٳu ̮^C 0Fn|/0z.apݼ Qn\@QlSzmci yڢS8ˆr-:^Z'G%WGܚɍVsX0 !ò)P#ʎlB_AL}8ߢp2 _ۯ+i;hؾUCmh;**n{ten^ik;}'?=76 g6@"T3#2AO*QB +qV *B^v 3$46Lu|CIXMlu!c({?n'J zb<"r?Fö!UGrՋPWnw~Eqαd&~~ "0IvY#`]\\fbm&1,=K_\Q}Li[|׮.Qӳl+qghpE ayhfK[zۗjʥQǬ-ay|B>wcEǦ ohyJ8LmGǦ)WvV| TL;d6Ӿ b`_0z|&".zQZM;Jh߮zOMg;Ka*]Py8Z|~k0Df`t쮿`20ca4H\m` n?5RM"*x&:T\̀7%<(Ix! 4tF;fvh$}ORNY25NR`ip$Ebazt VuӴҖ)UVU#M8˷+ I'.ZٝT 2KT6 E+"h5/]6*#NП5g٦#&b Ck +&UtF_#` +Xxl 4&Hw7e*PvIĩ>fKܤJK,Wy;Ԣmtz)M_ë:̿PcC + x|&ϡtX86"K8aH,Ȏ|ݣY/P[xȂo |EfxiC<_q08f^ /LHʡ;x l(KImڽ@u20Ȱ$NZK%^Or=')h"lh0Px0ȧD4e;LC8ajN[2IfVziot K<[ 'C `h Sp +Ѿ}h/bٺ%ѮϋwG2}]rE_9oo=P8Y!^d|l 0WR8 <-`R02uQ4g936q2g95\`ID* CV+:xڝC=+E+`U>R TWmCh'-` qǏJ*趁ےC`#hA/1zc'zh.9Hsub| d<+3lLFK#rh= +&vEC< +%Wٱf vt_ʑe}o|ŏ(e,]+*~ey P'eD#R o-FF`' .&z!aZڒ\ˏ\4͂5%'S;|HɽFO6Mѵ3++H,Jwl*Bр˧遏`+~{nR4MX_SNRON=i҉&qˣbC6bT}~>/&iE] md۾xroi:53ǂ@{}p~W-He4KE;@?$Q3IbC9:,Ol7ua; 1ز7A&{jMvXvu@E\8^LNk&3dzM^){ּ]8.QHn=m~fH/:"-N|Ɵg F\3paDSlѤϛvҭ<:U$WEKn"A!yHb,"cو _dbu('5f5-^O8D $ƄhmK@ɒ9cX׽ QEL|CWA XWyEUbbm򡝃(=+Bes1d)v*p@kʜRLl[ k\X +d*{lչϡ̇d$(W,tA$7-Hͪ wIsle Kޞ]b@{췩@D ,ǮgN$S4з!O Uq Ϟ`+z"KՒ -"ȺcBkLےCc;|(ܫ\T Z͑:M,f š _CTP~H\a%` giN?!$ +X@fZ3~+K `DϾ| $HHg{9Ap򫝥:"H*"H UUI25v9,|mxS&eS[ޞj}Qp|ؾآ'K:sѨ(ӳeGsMfU++C1`PH+s&H Ϯ`#d̈́ oYY}uqt %o^NL3GGڃt\t(tP0Aޢm;Z(H)xapNR͠g[rwfNc\ Qՠ^W6MT sEەՎ!qJxه +1Z [ i Dh4ty> syuB>GXW!W{f[f /#BM2;M`eh@ڋG 9hkB4%IC z9u˰h_"CA>?t -rsAE$LHpcH;p}B@tտ &a5Ͱ0Xjё=V~G`@w1lh͇맃 !ytV>$L-͉f~t[O"; +[2%EUݧ!CuրSHƬyĠna1k3]ۻ T"sրri4 ; &̬%t``G}$nUuB;6e|Ro:\ztzLrBP1I~S`KyJyN2@^̉䁟Ү)uQ^4OXJ\ZF6 ]d62y) +J2{9}wԵ\r UBI<_ ڶK'4-GĹFWa?( ?w )AՐ_2o0z1q ,C'BҸLb1#u!ޡ~hYa90IӠvAa 8T<;Fi8#l,sPհ 2ӂo.3J_EPi2_򆚋m!My"':ZCdVN}C F2\E`SW%auSL>\GPłΥj{isUkM1mWN4_LG/G 2M)c>UÑ9^fI邘ɨ~DpeWs7h"c˾H Akmx΀+#w)`ˊtG+9C Ҡ"L8Ch'x?Ѳ$<:+֩Eћ%6ʌLG-ͼQҋ)*SAQn$t16m{N_l} x9'^ڽim^3+HL2OG!ܫ , }LzPL$+q~G!~#~Π~ᙘ:4uēCSTH.z}ȺmqpR +JU` ܒ5$d<*m@Ϩy fd{|*d?p.Ȇ1vd-v ͱ:\{P $u.'rYcK! fۿ +`ڵ-ao?J Guy >µt$ Tpbh,qqW3wKQLۙQʔu4H2i(NJ"|& γۛX2 yQB{AL#uMWɉ;$ ?;~_"Zms[:$Hy&(ؙУu>]&m9㧜Wu/&'w 2!4عd^;޶"%k srSSfSv$Vb=aqxMAU_xEQfn/FyK FBb +S$C*>Xtv~ꮀ+ NԂ({aJ0Q˨IrOiUGQY ӫL/vI62\Ţ`X-t`*"^XŇd+#s&6!Ӎ3Svnq/ L4ҙ'-){aNE㷮o ](6~ ˋh)mPգ%@IXMPg_Z$f.ϡαU>~d5.K%. adq%!t[t)y \H!RT晅eY?UKʼ̭)6ض-R~E1b F4qI A7jWȜy7>yvUUQG{Af&7pupaZ& /ւ{P&Xͨn+Hn6ɩ VBݗ[$6>)Oeh䥀)$hX^u Φ%/yPQD>;-&&m'?{:k oI>T}{#e쮊ޥ0xp xaB̎$H`%K>R%rMV,DrB˙n``"eṗCC8{J~+Q?tD-hXU^t +=LEf͙`!\|{T/ N~Mv7|wK#8$ٱڂ ElÉ3?w7J`-lTȽ;b;y o9* *S¶va I#nR.!B~- @۾`˖CjYyR6(?XebyBդؤLEcfBh_ `(D:"01Zb +11ʳM\I3peAtAbp"C=@Xu媇*`Gv)j <ƿ7ob/Q龰[(X[EOa'.- "Ym >BeS,}K0X+#hF̯l)Z;UQgjpaey-|`w4F ym?}=F‰Iـ NOlgqMgYn +u0QT̅ +n5#d &5gjZ֤ٵbh<B>., 9)fm'E` IF΋(r&_1UZGc|4t<ǰ։^5!UG 7oɒ]“1-#97gBHK/hLY-WGU;;Fߩ9*!5""5 K?>)097Q61A姢߈vua~Ώ# +F+'#5Xv+5#>g2Dѫݪ~X +`6PRTŠH*P{.GPT[Xх +d\Õ"p'&܃kuJjPäxBEݰ,IhsC)1iRsǵ/buZ,׋)]Se،/ *] fއbK1הqJBЏxQ)wQ)-H?Е+rvl05 ;xW"&G( 5e_li0{c CO= +Z''g׽=sӄE<49Bw!c+  ZYn{ʕӖ XE3I fRcm2ZnOaEd<6Ƈ#Sj> HՂ4m N$1_AlZeNj"iWh42[+N3ݽ3: DRSwa=[D$t5-4`#>=%̈́@Gv3]=`Vv*Ic#ؔ +1c۵fJ1}z.Et*}Ȋ@ u76NFh+qb*7x[w)1{/EpЎ6qL4,DS­^&eZˋ4D"<οfzW,:ЍMu=yrҗX)qo:iIvQ- +T< lBӑڹaO4k[~) F//&S@g3><fADH8)@Yglrd ۦɷ;<=Y17#v!|EF\'ǨlXB c l!2"k*9"=T\9D3n3[hsgxSErϋO&=|wsħmWPM9#(!<1f[΁&!`3/ qSȃwC) "9fѕvFC1(mۄe&QyIw0@{1bJ +!2c=ኑ~N<) ՅDVW,©.}o{;pHsN?D{{c:,1=VD'p3FՎ̋RZS!NO#S8EBHI27-Kc-vB#T"Jb&x^}B<\S,s͂%vzxqnI8XwtDGK:Uy7"Ao!\Zl\&? 5L|p'3Xi{ѽ!ؘ̘u![ +ސqE2u)`(,2`hMym^|2^\6e<$E`BAEЯ?Q"`,F B)(L#\U0ͰBű|e0.ũ'C]1y_#*s00&cN6uBI5 n٩_4<6CK9qqnQeW ɫӦ[w"-} +;ell#;nPf؇̤]Júl!+7 ȵ=dJzHIN;/- 24"ZD5?S=8oJlVl( 1-uMǯ{V~u|y8s^۹9̝~g0?`fTBܣ3!%B"jތxYO5Ƙ Xy; Ʒ'S:qPņZiN<]]E |0 jQo8q7q6Yx.T-D.hV<|"oļ |&v4_1^X"D7iGݺ(eȖZn݈WAcўTq2X|<@B?&PhUM?/xWZF"mAdq:&Zt>ӓ$QBfo^y-| +>@*`9te6t+O79_R_~aI4"$2ET . i\ 0R$;A|QW&|M\ɬ}Q7+*uh_ /E"ٹǣ$fYs}Rc]||럗f9&=Dd'o}<B)CjO9~>|ǁѬY.C%"T(\,; a"Y%}cn.HÍھ`GBF9P ,TYPUE*-WvE2_ľզR +'4=\ns gSg@M!l":<0-Ng1eidKhFtQ% {C'pVYp?,4>?Bm_,tqzܰp{`y;UjbV]/$opմuwtD{8l'iQakyx}+s*C鍿qp ^Jh^T;hǚpgֻּhrnmHxrE~lk:{egO3}y8ha{Z2ȼUA}>q!DfBb`eZE;Z\G3n w`'≈-/*W*MzͮΫJkHO?5e^sN{[\I2(\={/ڡ]{=?;,iQKr$(7VW')@ui WxT mr]QIV˞m01`|-~ˢ> ,gp&2;~gv)7Vpa=oׇ%D ԅ`#Y >)0| Is=kҗRtCUFL?=# MSPת,IrE_>4$Mi`_Ӕ@SdMi!XҔ24Y`ERTf BDR.ҏ7hIJ@ )5GiX́@Xzi >)u@NhPX=Ҡ>f+ 4Ҡ>f+ 2t!l3[B0VDlA ^"ILJ$Úd1:m!)/=޸ioQt il20V1l.޶!`ۮR,}e6ƦO8Kcԓo̻qvQqm-j>f@]K$A6h -{I4c*gcK XYsnv\D +2@,ďuO7wj?rl]5LE,Q2GeqCljMjY я"f5dL.,buPCλ֙[YR}bocdX~I p +] +O3f@'}dCf=_7|;y,0|Ae+AٖR΀Cznq vi1Tȸ9~ mjx<[U6e> ,<-4H8 +[v`aWG7K?;ûFϏ>۳DO*7,=}lsa6Asc>A"%%%К5F>_}~$~!I`gV d'J +o2?ƿCO^RN4I =}*qJ%;/,9/e{G9{*o!0CgI^:t< %h{.eΠC'&ͪ}@O#q"EؠI\ѣ` u掓:dgR\UdN>|LxkOQ=,B=EuVb-C'9n%Еo ][I13E 9:j>EJ>14'Y{rt~i]yDKA:k 5Ut"Πgb̢P laӧreᑾD{>R_ d>+8wҥW񴴡!6}IPavb]2tH<{Ot|Gg3b6͌+ C8z?5U4i3#9&(HH2Gɪ"pd'$޽)NsڂJ +)h2%UDDyn>t*f7z'1P%Cp+NMن|spgo=U>[(+\?0S6xAm Imd(2ZH6w!#t/~܎\~1.dxy/@Nt_Ѕ<9vBy,!8(W@&v|kwIk$ L;<|,"ܼ0ٱؠ>@,|D#┵^Auo7iAeNx&ø%_X50p^V䨋j Ladq ܸ~(ݩ +-Ra7Jhgi mib>36*4oRp! 7N+ NX`֯%~ {${2agF0<ɣ ' @IB"Tn7fr$r ]4vgXEYKZ&\$H2DAV5HU\( ^v4TǺyU[;nlߋȩ 8BxJ7,jvr袛`4x(&4oK`-ݳX7@}b8ٍ$-e3;) "$BI(v7kJx +wuz Շ EMkC遼T%]>PfPkBX{7xtjB,vL+prVq@go^.R' +WX +i +ky^?΁ +b0FJ,|AGh؝. l԰nC؆aC2e]węW2@J,0 ̢_iX8T}gD3 }H;q۝, |Y"KL,sfOȩ.DBXKC4(u$vlv;aX |[78E(=: Юpz;ﺟ?7,DheOye*lplԣl.C +Yxw׮QzGj5hq&3I=>:v?13E6L:TNH{dzÆƖwCULlb $>M_J.A>3^ /ɴVfϼ W38ТKrnr%(yEha3n<`{Ć9*|]b] +AHz{yMeF5%*5{M5*)~ #8ɣ(C.fc%=KcNajտhfǪա,ՁN> +B8i,KK kĂn͈QMJD$ƗU@UoT˸1I2eO$r#kyda.]jq_tAZBI[JN>ڽø"ks\uw1S:Kz틘,NV٥&YȬ[ӆ+=c0bDzG jV 7l>z^Vng>Uዘ +86GZLbTᲰDbGZ }AّZ+Gn+_㰷xP+/TG;%!⫁yz&ɤkk|/>ڋ 9豟joS|C2 +(~uq-+Pg lzΡ0DžJ-Y5)aEeiAhH͌Hy +ŶGuEZl_PҖEc(S +9;y`yGh)"IE-;!`,,$Lu. CsgGU\:g>K2N[E _\J}U!Ffni8l6Q\D;&zEv\V`̢6%46ھ(0W(*.$k.XTnO3yL1KCaQDJ@OqQH<1$)梙,E3s-mC,p +t]従]Gn.2?rqsQ4J4]WB:S!1ʹ+.ܟ+a\z/b'\)_ԗau!> G:z6˖U].?bhJMW3^'^ϐ~Ăpq1HvMz f>RPiEӜrXow> {^K_Tyb:˲7\^Cf@0n5X{5V-jj9֩(o{Г=7UD`4gQyEL %-|\a]Y–{܏*ÀvIC\3"Dv< 7E1}zws3c09O[Tֵ_4RG8>_GgƗMyTP అ[l9a#)PHqI!Bb"A}­>{0ŃaxTGrwl XkSp[0w<!R{ewȨFaCx>ӭ)3jegl#j-NcIysK4R;[ఉ^r؇ Sz>s;UСdiś߀eqbF`x6-r4KŴ ,v,?7tn>OkPE`HDBi1Qv)q `oQJ-0jEK[|/w}&}Lt*ٞXtlK}Ws2%vXpHvqEG=ϟb─<~:aW2X8*,b>+vEmYl.R&XGR,r/h,_y~?^'^ R ]b7B'rB*bo06inޟ?>r/f˧]Է뿞b#u;>8v_|7)f9oɖ|e(eсYj _QM8kyLEUc((xc'PIēdq=]3M'"1YiP]C 5b?xݫ&t-F;"`J-SJER%\+$r +CI=|Cz@ rm@I@A-.jQY!S6ASa/jXA*!4$!җ +tpHƨZ֖&'(H@2%0W@h\K&i>d^"=-A9p+Q^zl zmL#M_-6'ŹЕ 7%|YҰJwY + 7A9h= 7Z˙Y +J@&ibk bc:>k}ܙ033P˫CR\yp*! k%mY t([m(Ӆ4KNͰ4RDz۵P Wphئ$pG"|d(Hmh'EY21/WDL N'ڝuIڽVY#zzӡA+S јp@k +0+H3bo@,cI2iqMn`3Kg +fZENjTt7\}{'7yu%XPy,x_ôhi޼DKe߀+ 2|$S􇏼"i Eu"m3,X" 7fi[6Svuex@i)lBB+mBߑ~)Z \>DXM\]+So>?( +|fNEׅ8:MHZ& ;Ղ6$z]B._/DbZhb L1i)q ϩ3NqsqdWF,kca< Xww xÁ|ԓį/5 +48.b0X M}x&m* 32IU ]awK.ZƋe>j1c?#f=})b꫚L7D<">ՍX( 1E$ /w +5D6P:I>I#wNL=ؽUC.HMH.PC"˒08]P8@S>1ƫM@cy\SX9GCSBna-%9t*]cߩWEx:<%9{\ri &ٟ`x)8q 1$;$.RŁ.)E[ 5*_Kowy ."~W۲lBA#"6C/a + rB}}#CB\R4.11p1s 99rY,C%2gKiٝX"۞GdFKBۇaUXofa342ݒ4$O\!r8Zb߂UP +(Jfa .=er971ˏ]a⠙(ɜf4Ca{>#u r۴lZ Ҍ[ B^9".sݓ`8%?o7"zj΁͘d4.,r"Rd C'j d? ?i<3%lHwi9UUe)L'?^E}wlSI,+lCm-LIR+}ZjE |7W"qK` S9_t E=X ` $uk~?t@9hSl^A+U_OŦh 4@7m}׈Mッ 2Ev|>KLLX`u}D4uآCH^V۟?˟W?_}Wtw`/o~KO>WwU=Ϳxi}pco,<_, /[/~{|xڮ4-{<2 ;j8DŽ.\,RmFꖮBVFa ])xu!3}Cl +gwo@ ٮV[ cwClECx@W&4YN0xk NH;B+4M^(j̗ f@*p/̔'3" +o`s5VhoGqHk#W;w + +y\APW@qBO'9װC݊U*QĘ9JLP<2k,6 n) B,tOo2dA tױ)zrh֎[><~BC)6#>8u&A\8b~T.1ѩ &zl_9qVE.H"lg='*@^>ղIX*̺*37eW(WߏCQ .PIp|ݔz._5&tEkSd|twT NگoN(w$\JWV[s7ml.S"?ֿ׶ꌝ{!*zm +!ƀ(Wj+hQ5,mǫKר^:V d76a<hc`´+ܔ-"`Ea{pYRtcW%t:7\} +zI~lObO:"B~8bC m4q\3,XGklsH4twMD_qA)]\%T36u#uqd6(d7OvF2Jͽ0ޚ dhS}t8?c{Wf>fgjkOêCC9{##mIjxvIPZ]3Δ/Gv Jsn8Q]z|z@ޅ >ttآIx'{s(+㌋p V׮8FXrsY{]kU֥ڀwW.[ۆр   (1"s.nD_uUY!a'э`Z)\j=aj:ΠT$^^rmۂ鹦Y5l $} J|A#-*E{ιy?NYTt 1sF.\{Y5&sZE4i70~e ?FV@I @Niąg0WRiH qo̼CR\O} bE-~U0iqfAJfQ,)iBc^ +#C&0ݣG;j^ F`}鐣ہ*D7$ GRJS,oAoi$#!_Hu^t ;]8XgHvXԻV5GsFdan7Pˑi +ǜF {sw +ՌO* |j_pu#T: (BHC%L{Lo[ D!Y#C,k-Ƞ?W"Kw:Ď|xz8p;-.Rrs+!575(s<)U=P8] +N^V^&$>Xyy0*~ApNH"VAlGCUI#Zb!쏆+AxHYn{H:AV> DgE tW{}b;RwC( A>Hb s`fҳ վ^ZъHf0h)QhCin>k%{=@mpF)+ _m>>X' +Da'x!fbǽC?"$R@HF__A~o=}{r73ʃ(]5̚kH 4Vɦa}-jA?Ċ-lx@LD`ɘ:p @U7!'% ҕݡ- dY/=oy$r!7@;o+|pgyٰlj5:*P'-)+ir?.O P%^5b˩b١k |?>#^}>h,9_އU<(DnȚ7o`:RՎ{*cPN覂p"hGᖶ_b~RRr&tdc| 43@Lr J)!F> +4U-Tl"Onfx>N\y^9!5 +3RR2U,M·kꃯ:p ~CٜGBzb?uS\ՀD-%#&垊"!׏Wg33~-TuVƽ0I x9|ؖ$K8oA;``[Xd cY`-zI5&`gs#q{D[*@gQqubSO/Bw|n53?izp7 Td 3 ^n_6]\ZxXHt2e4Do,BwJ#$q8bhZ&|_2 u D幭V~naaw| 4ީnXZ{UM3*́ 0ێ穽.r,ӱEZϜ${RhAI;{IŵbLlϿ`!сUFu iOi]U0XZWTb58DH;5 DX^4R] OsD#mWnp5l8\A=tC܎ i= xɇ*Q- 'llS4;N/|YBh {E +Ԓ;%.bˉPD,#"uɲL8FLxS&n6S`;USE y)!9">{_mȤw{&&fFW]]-$$p)3";Bl3ۖD%U9/j!Ƞ_U#Lܚh=]Uki smqO`uKDP)G"=%r:gי죫_JeץUW}C 0?u!EAD+a&/ SY0T0FLk/W7OM?L]t$'R} 掤&TM,r 'Ɓj=P7'?5ԝRt@Kif7'e?/Cy`t 4DMzyYDI\1_ <nE2uB4H'F ;]vy:M#]rt`wf}Xm_R5[z![EG7IE+v_FzNtlIx]c-R {'~y}{Ea{1S#gxF2AG&FUyyMWtB7ȬmwOTIb6rRb݃)SY^5>]hw=ELDx5SDGCѿT A] eYF\!d/}os|Ϊ?!T.>n/[_Crשwt: +qPL?/0&ÉxF Pcyo}z`&G.4V f_a+/wWl`VAy*qĤgf^$ޚ {\L)jKRJ4:, +=G0١GWQ$6q"= + {H*l #E|\*jݰh[׷L'}3s͸c+M%uyʒI2J!$`}CJ-[[?Q`؇}f&ϯ}`iD6lg"-DlS7ŏC_ljTfYg԰|SN~6ΞH|ϫl&~qbG lT{|:@k)$8?ODTx\;㩧ɛQ'󉗧mv؍`+}A>I|1}d(S@+Mz|])g;}LAቘgĊJg.s%Xxzx8y%?E9 bw 3dXAECKSAGۀEl̸Ks*D;? ]d7g9) wy[A BB[q =7">$* %`U"L`/{5 +{ÉK2N/Y ο7~ޜ,S#Q=v];T?z:$(I)){=8 12 V~Ω "obl-E= Â0Ls加mmOF'8((g܄3$FB(3vs X?Ĥz! ]+}X2uh꨿="bǢ"v\6a>7j։}8:>~쁭 ,l%ҷzi|fo(KMzF׊Ds(RNTeaqe|$E];R9p7$I"lpEĐ"ݜNBd +V/0~`{ܻDs|K0P3ZI3Zc'@>{>stream +b#%dtytY~tsEsfRc\BjԨ/] UvnI y7/ԆsCEs4 g b $ƀQ&IJFDM8*lw\w@Bc\bSٶCoQhvl{l8 J:ߕ!+[fexeC̍PXEj; 'UȣR&`ҿ 5w6_O9ދ]Q0hv28o' !Zv&C]a0ku0q &?ZbSXy$0Lك~~q`9Tٽ,YL=iFH2z-_=!PEC,GHLRٸS{B/|\t#*_5hK?+P\Sojo98 +7,"i홞gYDh[Fp@FF`PgKthݹvSݸu#~je~G猪KxϩB1\4w00P_06Nmأ[,*aN';shH +&.7`!|$k"w YJ#d38@';V!,|ϞCYB4[ `Q&XXf<*ci:&X8Z-ws>],n˯eiP9&9N +SRN*ËK#W9N -G*Rۄ Dz+5N]vѷBs +" HjzvT_"5HJk2N#ꇣ'ꣀx~1|E +Ectq3`JN,rM;0N2H?e&*02PWW2`.羛ːD?C6B &r@ 9pקyyQf9 xp:|>v$AWeB%oŤ[S_<נJD%eLג H/6: XoXJJ}J KmOeb\\RXۿ?W/oGw1L_1P~A[OwP`AGmIৎiv56F,KiM4_Ivo~m5jA mHҍ5]!"ߌ=$s&? %01,ƤpY用ިb;àXo*<1\2+A 6oNd)CAK΅2ff Φ}y3{*\(B4N$By"\SVՈ3{VSTAH_G4"Lg.= ]^ eɇE7o,[ܢI""1fͽ|fDLaAu {ұ'?k +=N@eP0zc~ ;[6MJRq!kܪo0kwc3|H][-.12"WAMj +Cg"1lGjwgFN[SڽI$cn<u7 +#7\td}4\ Wk" +4ԃ#Z}%p@CGv%ݖXec"Dp%~RJ{^X|sl)Voۉ `P#)eJR,1O +;~, +\TJ">Jh[ +xJ,HuT4>#VV?}KnDuPxBے_s$4] T_, Lc*2K#y2",..xTk辐0"@jكtMd>hPuP$3Ӑ>iDP|57od mh5]N6y'3(p1 `t-I>?IqR`I@zm) W .f%hf`dFYm- TK|Te(vx/𪿟Mjd-Ri8K <;2K NAM`>=9ǽ'ϝcA4a)Dd@LJp'xXX[jo̫.}jN'Y]ܒōB–+?A+7ㆇmXWU,`675dƜX_ANqNS=-R)k=.5)' @4#SE*Z>rגh0HϓEfjI X=4h6 :uG~$rj^He1Uq0gzRu>>{94#?i|`ej7סeSNTp]d3[X0]GR7}}8+}E/_ FрP $ѹI%P$UCEXH:}m\ D},.[M t܄VR4JMc]5$3֌n,~N#(˪8!e@>\DR@*1 Af%8QG'%k&4"0HN7/+pnΩ"JvI$-͢  l!MÊjUGw_(`p"tOϓ1նjE$hU &⵱m܏tr7` I&Ka@E(!WY3MmrNK[X0Nt!K/GIAldΛX9]J +o36*/Edٖ)sF>  t]b)wsaHcdy +L.85OJSG{ЦX3U~m涇 37AW?Y;GehxK畮CX|Gh +lp\lu[VNGZahֱEiG8V}{4~*~T}7VoXq,R[+{eԑnSV +dTzqUiI9R +Li\:(,k$ EƁA~3vmi"Fbz"@/OEo|Zib(S#u(Of(T϶@#۾MUhn!F>c1; BA5 3ز 9lFIӛ sZ TZy ؖu0VѺ y啲9VADV=lF2]a.+XH뿝Yh%GER 񡆝)h!T+q *M $SƤfs4PE@n7ѝe+OvII| !@s>{T|nz|npݒ1=Bu-:>OϤ".bKK5E"cԳ>Fj?HZ(BDҌ ,v)\2 [͐Q1H0f!XZ&@&OubS*@36}{p&nr9 k3xd‡MT<,UeٽA":@򾶒(nCPde©qyu%B7$Aр@mn0ęAEAZW4@/!}(x0_mF)l@2+ uhӻ;uh$ F'=v{ee&!m,̛^IJZ 9Gn2}KB؇tWG Anx=_Uqс_#ejуM, +yV3PPvgS/Cbr."JW~5U8 >JF$"r&P 4S%FjoY%3G@)Z>\Н0GncWcX%m H*q{Qwis$AM +(N1`hH@H+iTtCSU߮w>!WzjXc E\'0C +fKcb8_fu!+iEKѣoպK`/Rf+t> rkmnC$I1zkG7L; +6k>eYpueԈ>(l2/ !S 7st܊IhGrJ^8f!? Yl%9EĜɒcB?ck Ъ-|ڧq +T䃃ɄN<=\XErš*ge:*`#0lh?e!|H_տZ\ȫ"(!#90 ĺ[yx;k 5`竂.rsm_BJ se1RI=r$4WYDO _(< +@NJThmRSf̖ xCZ<W4k|m6̥hl2 {OHcGHIvFC^E%` 6 C޶MsoǶ/hgxisӞ7UL+=($Fv \LNIց͘ӰRzɶ^ L.8MmΡ*At@Z++XܺP YNH0U#T-N # #:76;)f. &-*zOFtݜI@%_* UT_ALy \_y5߼,'}GbtkUQJW ݬgDMQV]b|2^}t}ωp!$fJ!Gbxvݜ@pFSXoK{}ċ}t""Ww#(`|aj?Zj#_ž@ x[=*5)f/bqï*I? yCw+bdaa\E;L`X=yoYU/f*:L77Y= ٫K3R4 +Ic悾=`TC8*>b[\P&K ]^ d% ԍB{h ǩ.Q˯#R^FEE%Ha_ER)+NPp^IL==Ƽ-_f.jb3AϤgڳBԔQ?9GENL&n4֢Sآ5~ӍuQ{~3=-QDِ2| +a[Aݵ1~(zܗF%WmcoRdV/w\c?7"4m^?Ȋw9Ãh0uP@[0*~tPLgN D H׷*hZ׊)_kCDIY[rqPdo(lp B9(5AfLnTU;iqʫu-d opʵݖFG=!+EπLP=s۝%Mi~g<,Bl!qʊlE]1&8!#yzq`/9ټ9<4 +S+kt?ODU1فI"g&LxYOȿ & +ȃ&7pbZ6l ܄_2Ǯ=(L,-OXkgiݒj?E,&ii /)UMNB&=;kzϲDv2'By;|wBY8MXxPC6.-5ƪ*ܸI{݋7Ny̞6v=`AlG\jU/-Y&Z->PYo&BZ){ u674Ui+Un!$ilH.Nj_`vT hߺx;&4@2anaUw;t4b(DSqQ~m cC٬1NV( -4ݺ0Rʊ󮸶\%TapQ&ڤ@A8jou:5摠'{oC>p"F +Rr#b?fX*&աȠ/(h*ǜѬ&pY~}=mFC!܋q myX+;5ˠa(Dhre1A*r8[I-eZ]Oh!E*>OL}<(-(^j"qxE 'H,a:r^WtfdaxyW`N< +ƨES[8Z+-ZM9Q+iL5lƂ@V(`g{jiQ|݊d\?`Q W<Ғ.lBj {3tN} ֊%olU͉UJy_1O )!#uĺCJ \kGnlۑfmkkGS{#֘QBBD3) P2^H=S'n9藋F0 tqIOyL'~`kMu{z,%]$iRz0@ՌlkaKuB1ȷaAhsF8 ZBԏJX7v\17EmU,*ܾ8ڿ%Cֹ{(,ODAʄֲ䥽n[= O01/bVd!䣈'wDJ!/G,~Iӣ>tK ʚX{jU7+|3PtjvawUcy}WXौі$-0Qu(s(2-Lǀjdkzvu7-ŹH*;=3e)_JvLpG3jB/g#av *}BHzBsQ`ڱ18a4|:EQpC&*iͰ- v*C٪밾-bz"A7M{om(. qqǵjwX#oC?ufz)WB⪂)lߗ{A+E6D@jtpҁGwF-܎%QSX9=7*}6؇|L;nDk|ա@ȍa檯QjÎ͍抒t;I8O-s:Zmp9%€-'c1|>PA}l [ a9cCə'j"h~"K)+LlS`IvO䙒Th4zJ$ @+%q};gL*2쮧nH3%a%~mU vF%'|h7;5j=$1&Yʔ +0~ +F-rQ %E iix YE ++^݊ HD[i#WF_}ɼD~$)1_|9tTƿ9,>PCۑ]7T2gjVbgࡶC=ɋSm0o~տh?__wo?ÿ?}ɟ;_/__.׍as/lGb7 cV!5C[`OSNAA5_ @?F,h?B"(f " n#h\ݭ4Kk#bL lol(F+[7E{ +;$  +)]5F_S# +%^HxE*yȋF/ ̞j5v;_="O !=~yrq^v/0 x0#A|]GcSHvch ef=j +BH2-u8Nmml"{S8 jgYyu=S*&V8*M EUřRVVyDvV_bAqx5ǟv#VW4Nvjuh;B;DCv腘"G^xSҋnzz7dT>W\ A^9KR((5ms!OFíT3SÑP+ZpAdljX_)G5gBz%,\wO[L.cHA.m_? f~QxBg~1NE͓K0ק(6!Hُî w&31]i'Ưb>oەhn)%<> L㩟)sHo%"D[ə(RSsf٪IT:;< A"=>I%c5/<=$VKAQt_j +7-F[ {xh.vaL{7pBmLWݐڢW'XgY5K12qf|>N6Xx@3LhKjJ'?^Њi vd+V~>ց%TZZz`3DM$¶?,6Njxz]UyY^z-4FZz@e [mZ= *=A|WZ~j=Aut) čXPU XG ">:\s׋oJ?+l>{Z 9:QU rF{q!MYF$D>cQlizfĄGCW8ɺolʧ•YKq!`L< Gj¥G۟F@ +( +Z4(snv /ɸM϶<MFsG(L'?H1/u% PFEJq1=qF. 0VJHF1M jr^k-q)1ӒPЋX|kio&=OG3:3\c.iU!]@mTH; lD%El@L!ߘTMP+NJ߮8FdHH={dϼĶ[׉jZV9 +R%DBKac%6v4?_﫡ZT+ӴJAdlqDh%7bQ@rqf2:эwD`y[X#j#+Y{bc>ٞ'D0URnwED5XG},%Z2ʵhC0&4rϦD_~1b!KDe#->~qFc J!D1їQM޹OZ3/$7ְR4*; KU_004u`Ŀ)t^N`L#=E%-;>">]lcwa[Ӯ#\)ضiUWs:lNw@dmN+VT0_kaK!`M@lGA)oݨkCW-LWj9y /ЩӀZ M} ="0o Qղ@=,?~6Tأu2AYhpM%El?`1GOX[f%etj, 2$ǃS̯YĶiTuy )><G<<_PDb0[*J8iҐnZVZK+APB2GrM~}I_>m͟?~KnP9ʭLCċ=36bPhjCQ|L}d SAJeG:dG=WW m X| qqmS`T3Lە=Xİ0X,b_o +״WTxj:SS#?[NY4iy@$*+wVP)b<,zS7,D>ӥ LŇ9f_ u2hqDO;$ +kOT[z넙y];迱 F[-GZn3l`B@wjvtڎI$>}BS V]L$d z(pChE5BHEJY㔻mvi1syW0 8lD•)hG󽷞id},䢊4jNbq}~d"~1JmD*%Ȭ{* -! [: Υr7{&`6o6B8<4ⱾrpnÍ ;U֬ép`TA'CU?7 xql%Z#@d*nFTrO1q훇0Nt *'l@1KJq)7dji,9W"# *</{B)ImwQVWM [0]!'$1nW6d{dOgG:9$= +#a~pL([IYȜφCߴv`2ΈPBAqZ^c~ Q#:l.HZ@x2d^I6f@ [o"1mti`ΝhOXT k&X"{9lv>~;"wy;!*l@EXV? {Վu'`2~ly +Je&jnб W;½2ز +Bņ?憲 ܞرn|W'<2d*ʦ!on;Sjy6˷A nJ)wKt?,yO<jOk)#6mĔÆ,?b ShfP PKqxҜj,'#x`s ǜh KO9j֮Xtkh cLŶP]/@_)UtH+O4DF NQg!  +ӥ @p[dJ>_s6q;QnZ.pCwFJG4+H _GUF>odKLh yHhR?2iEha.4T~!y~As/seоKGGy%Z|g1Y~j2V_sm+d[R/@0D7(8*>q[Ed+jUeQ ]ml{h j&{a&@%u!tK;ox'm;84ywLsMˌ XrG/Ln,KW6mfuT9aR1P}%Ϛyx7 ?P!W9\ٲ* uI@N}Ǵnҋf?gAyiy)\ +^v,Gr>mpTG F4)Wha4}JQC.n%*H%NGO.O/U߳^(~ d6B,'BwʕXB/ M+dZސ/'F&#ԚFzw1շbP_D疆6M6D/G9lm{ *^eb<6nw"E]>^*OOfEeke(rIu|P%wmH3e,{̈́ 4ֶس{F0dnLbO 3Yj[L +ɏWaYq,i +MRP PB,XwI*=$I#P<] 31-WDp聹ȢBEmYz5XO0¼~ӀJ0#x}F5uO}ae.)W`jiG~'?vstQ6c_M t$}u2+lGya1L~{K[o?=~YPlYHQ쑻o00Öp+)w6+B'@)͇Z6񆮖Pc2U1J\%uA:=@:SZuIl=d_WtLXQJ/+}x}+ﱯ2O'BljL7Kfe\d'_qn q}vWCgW +C`15B݀r34]euV^9|+OY0rQ̟؄a'G8莕MȩuԄt'1x_w*"c7@,---4j(ȝ(M't(Z5 M2:"4% +8%Z@K 3)Ӄ@XSW-'CCE(?Ƒ2#kuHۻ<6vlwjq`Kvi{HDƈB]X8*+=!-v^u كexGwuVr{^ZA#-[ sIe܊R΁Ga5/MR$R㵭L,Yvvm /N@/ $ zL ;4=x|^SBPBjs"R|!]qbk>ifAM/x3͚*17+/)$sgV>tbCd6"V~ J4RK, 2uyƾw8uC2 pnnMJM Ǜ4:>&'dl'3 +VxmoZEHSÈ-|Y$*9xr~S_2iJEfv¹weq z:uM,*>lYG VE.#r7:uhcV'e>3]F$@Z৮D>Po%CKژ]2lv 8rشy‚b A'3+kZokƂ4$ 93)9i" +q֪e-:fmǹb됨7fKe,[1f:v>a+BLOQTbylJhٚ//2qS]^B1Q!'n=Vjv0H .Jֿcj #׿&Bý+Hdɽ ar=|vn-d6HxI!=j"6/3}P*uXen2Э)؃PH}RHC{LV{Ew6@ݒ&v)@^8 +Dc4YP{n5pl0!,"Q~gJ ֿÈ1X\lpu2#"Mn>.zHCM,{8Cwϊ@וы:ݚl|FZqݗTˑ\+=.HQ{Q-A,:]#8P:)=AEQ& b_)B(-P^Tz'9=5(J@4Q)R0#KGÁa8*(zIdi'j+N溱o1P* 0]YuW.4Ef#5V.j2EE;(`EJˁpUQ*PO{(_G4ʼne(&JUl@2SSr/_~p5Θ*~a|lX;a>GuC {GK q}DN}S/ (K(PRˢݻ'_ >PuM7KZݧ+_a=\KYp$݅JWizY9ߖa*(G6u;r7RX;z:$6PѢS?OG1v>!#jNՃ'w8Bҿ'nHjݺ%JA|~R /E=Ά }1#DGnwH6&aBm.H8fƷ +*L$ځ=mS%]ܘ9`?y<8Y${n=R (z0!=2 C>E©kH@D).*XdN*|ʠ$υMd>a (<'X%$=1,r@x"n0F5 ֙Ixm!@Բ S\w& +!TCPdvU@>/;5ExHקĆ®HXQ>#a@[d #Dk).50J 5!ѳ*f&UKa3tx*G:Ze2Kr#]yUY Nv(TGt-we eyhWRhNSVsakJYs) Q11aMjL4ǀ];B!9SS݌5.~&]Ndy%҅V sr F'^(/70fs:UڵQR1܇"+[( ŇW1)nt7+_w~Hh7xȯ̍N)s93"[IN(3յp=m}5jV-IJdk:ޕ@8 \cU, 9j|ǩiAgDYڐOB DW +w'.(_޲;3Trp8yY(HSM+F iƞ8EʤE>L"hkOL̥zf.ujjd0Į ۈGr @f +@yM?FEC, n8WC5hEV4(R3^H! NlTcoKޡ/ +d^Aɝ@)!Kj|-L1lӗ<[d)99i`;BMD_h Um#:l.-RD$9nٵUBbMמ˜Vy Sҝ c k_Em 5N7{:9(f|NBs`4$u(ΕEơZU Jeo`A!x`6 uPl^Ё dC@ŌAD,s>;Z?0A"GyEd:%iI*,2ؾ}i]kh*ո\LJعadS˲N!IDZ\b"ry?vSnmgOC4:s`Tv%Vm>o,cvjWAumЅuÙA=?Hz̼Yu'!w6X/T,&(9)$'YcCj65oKOM(tmH+,l/b*J9[ 亁 v87`,vKD-8e둤_+^8M9Qω 0Gl#7(~}p݊'<ÙhX1'tS[&F~, :'“Mn )R8[3v0l#EMr $l+z.({PRYdߌNYtX5nߔQKX].1,hWPvuɪ73Z6z.)y/I>R[<jop@C +318$CLGB),DSg" +ʴDX[R>LhtK),ΠHbGNҴD b˦˶v4eH,E'[GP^ T*&=:RoE(syԔȿ>0,|ye%ydGSBIxJPH_Fz +6s1TsT^Un !J t nf/BUo + Godg$aߑNHv +cSpМ +3BaS @4ʓ[NLA`AlARe8|yNdMvUu<<_u_H;!!YK""wklSfOY3U3G5V9eaR=&!E>"n[cPW|=Щts_%X‚U)D1tāQSK28_WpI+=ITb=$*~ϷbPA<,۰:j8R$ৌ$A¯re*g +# aw5k`ئ]5_PQõM`R[ǫ +b4N`K=XMAJx$":9EBI0R jVƕ R&8p*\ӯla+0uPKz+ShUO*8jP#IHj ~}sL?<^7۠ש%&+MGG +A*v,? pџ`&wS2c넰 $7{X=NOaKj@O_pRv,+G%m +AN[:c#ٽfp=!4Q +?T웼ڃM!Ά DhE7h3hM\WGpKqMFgڕK ֟ Loj Y7nHw$%1E7N6B3w.D.M;BX@M;AEIl}PEZTwabGQ+-Ec +QBؕ!/ )TYN94Hu{%V'#/:@+6C _ʚ\P`Y$đ;qdn#sI2*Prn$T|zw"V"aGD:k?~-5r9\)Pg@^d ^OGOQV?+O5g4?8Zf؝RY;먬svָO\ӻ]P{G!{VW` 6ssT/?ڿS2󽹣lrkjE#m|.38-hvX3h*.|Ж/ sk> =^@u*2D hAgKC'BRݨ5,Z#+:}"ltj;-l0Z8"DGAz\c 9Gj|\aM<3jL +sPȧs;@DnD6iqŸ,e1ݺ- x ,FNJ'˭fe% +_ƥ֐u=%n9QJԸXrD TedųVẖд< .x[+7Pb\YjKȹcHVm +-ezQfy6q@pOÞMlxh%y5vڋ]:Є(ϟڣ H%r]E) &I|~JT_C) e-5n˒2kh𚄋糆}|q5A #M\}IN$qӇhrpZ o814(lʦV/*OUaK켆U I'0N3Pغ.3BKX]8 +R Ph+yK%2 JF H8Hܳ7j{ +֥]Q-U1b@ +@Sxn9@Ct)j? Pv^(-05<|U7}=b>R'ΪJxT M^\UB7frtRG.LSzS$[ I{u"CKte{AhZtLdK\~*R +3!pƈ zG:s @ͻs{|CH5[ut +VÆ| n1nd'nd9+T{,)ʼu|tݐtȒ ypy!$О@_6Wpt%|YTb0/?A]>{fO; ҏpν6DӺJ`{_kJq%$yTtDH lF!,kL@c>g!0Ha%02uodr'IiM hZ"$.~Ҋ-zmBjvCɫ\!]g?Xd'C9?}1mU[x}ף/u~=3{7 +&ws`-3a9Y366ED BL5|) }t2$>#jSokѡMv#'{D=W}^Ly+R7pOV{q*P0*pb̮#(ItEPEz%AAA"tiƛ &T\=Sg/Rվ(Z>@a"8}EkXZS9b#!'J/r+d_wk^6ShhP2sQ\mO2w:װ&.$"1{*sCDCGJ$%P7 *"ByJ6*Jw\[+@;tkkmKW"5D`Ir覼@;~vcv{!!쎍9Cс xF_zi15p3n4xU^%,݆VW"E`&K&P*>B}JƞCp[1#ߴ"3/jMۈu +RdT4yjԇ SZt2B{$![QSlc䀡Nkn\b1#z0ƒF2_*U~w1u cWz#BͽDjds~(w2d>fnUP}~VGĸB >>uvP_WDFkD܁B) ,D SXj@m8J{}$0ilRGJ 쮒b̈ʔaS?F.Fb~>SD]*kshX]nj{;=QxϩȥLr)$ٸ> ?hr2?8/s;\ِ֖T!nb]%ӌ%oÌ L0(O>2*y rE5XGfž,K:.">\!ſe=9=s>"5XZc̟@":M'iFx(6* yr8*܎RҰ/aiUƔuvJ+/# A_I)f xʃC#w?⾪9y`Mn?^vAe^:hE5[e7c`6Vq3|أo9Ec-TFΞLŰswp{9y)iq7@+A72FCa)D9EҽQT}###__aF$5"#|Muf!r b>%Y>pqݪ\7[MZ`u36XEܡKdV<Ǜ$QxleCH%0DkbxǪ=GRYbņIO4P\_>&e d̂FTaR%\f?ÂgS @:TL :8|ͣފrMQ\ QH[(z%N87k*P$6}=)F^*3XK9 ?~{nQzc(s+n!ARo+41-qEH#3o`\ggk l \e2x +(i8ln:Jw ǎlFjQ"X=|3B 坋 }r2Ͳg~H ;[x߷HpЍ$nd/J?8]4ehĿmֈ(XjO&3 H7R[d]uD;BHPҠ9ψU A;C!lx;Q%Qh[_ }fv_5؞.0jgmXg܁0ې֫ +OKp8|&P = I0f,l'`4ysD15R$ иxu)JZVb[G@pQ{^o` +{qmOPbfGhij{WP 220!u0&xySZ 2Ug@BZY4AAPޯ1 8IR3~9VKt:YO@J?_pAJɅ| ^{,3EuP#)HD=)QuvܛS:Uzj@k߯،m;G7 (b1.B + +(&P@1;a>@~5 \__Gl0aN5P<}3 +:Tl:8[Fj9Й4Ԝծ.0P uA밷g-(0UX>iKo&TURc V_\@WЊh8Uv$Ӱ2ۻă$Z=D`&N )f79FKP"gAkt{ |_gu<ۻ AXp:q# D Lgrq{&_+ > Ğ= &S: Pܜ'lOp_[[;һWr gSX 62GF: k(wL)g[4TU v;6 KbUfVAYr +*rE qkM,\(q~,Cw; ٭cDv=+^Dj }tO+;Hb8Bu"b1ZdQf4ni+D0J]l> +_$< 䟠ALd_p_ɓ?~?o7)OW_?^mO^#{ꠞ%-Fn`0$A)wlSq~ TtѹaXQYeÊ!\ij8Fa7wVl;:+96ZMpuDg_Sv{#eLl^Z?"[~ihW4qKmh'zvCz`H`OTtnppvC%zUCa܈5/8 @ p lP̜zw|HW, >ڽ;Ե:o!"Qg@vU +Uk:|ZbF%\&O8R4~n{>fc`.y~x2g-j.~-VW4Ӵv4>!sAa ]ry&3U jpE_ZqW _2O` +u 8?T⧮XZX߼FhW/%v +CA #2=3X HI&<$MIXRo)h!2i:r @ÿWjK & פ2;lN#Z +F+ ug Wx?ٚ:Q{Gߍ@ALLG(wh +L|<ۋe[g / ==ΨiozEb5erBН8  +'$U<P"~Xvᮬ+e fe6WӁ';’}?E* v4˟{85Vl e\ҳ,)>ڵCp[Ax__1N2ĴZyfHƑSpd <4O 'wMWx刾"( oT+ \IX=ZnA\)hZ|RO0g=eXRVBŽ3z;sN 9dP&.{TR B+/B$P<H{ yᐿhbJ<Թg$6XwV\U=ĸ?*0}l΄ v*Ը+sxpڥKm]'ȏhs[jU7S{g>#Mc-Sr=VՍee@DoVbz/̐#w+ǤNi?Ǡ*k1t) ˢEH8iB1GH} aYaQC#}~(0nPN%9.1mo|5M!\ +"=^Hpt@`׊c?ϲUe26ǯ= +yd\1h o"{2ўl '8>8XE,ј,\DCǂa~4l2E{I>%pI1?*y)n!#Bύ~?<7sDlR58 0=fp>;)đBĶw8]S5L u6W:unN9aL86VLIմ_NPreET[Z߰)yE<uF"L^/: kBjd=*enL enE[}p#89@*M!ۈ^TLlltk;$}oEb13а{TF_cnkU|9%42G4] ʢʇ&Х@cn|2In4GvНPb t|L]A[+`dV/%}u[6]ok; 7Fz0LW83:￯lA&E&Nb{ZԨqa+"rjKQ;4D0<0S];K},J( +{ rA*YƸNz. T֯3e)|8Bex`HjqJЭ̢v`q#{n~O+6]$]+5OrIW}( +yFe +yV +_oGEPBϺ *(˻{oH8ό<|ȇ;8´D2V8@Iyԣs>zO9DZu|9Rz4u"!aMJcvPKd= yeY*.=@2M:uv3 *A2N>(SO"(ю[(oJJ q=a 1YVeO4(ILC)MDLɏgyѼCVN$OT k!%+;$*S'i\n{\U,`Րk,})w@U,Q^"e{&~`8Vnⴳ(HG@z[>Kj۫-\s@a_/ng`Α99>G-w+V)6ʙK*qJ:"d"#%!gI 5HaJ< vtPҤOuw=Y ޻DQj.ڋ^jP֭PBqy ,FhDuXMft\-zlU]odudnPςF3xy@c +KXM%6UU6P h KQhHhH . &PE^ A +Py̽yS5Aor_ 2'BLẃ1A=4ڣH"6DZ!&= uj@0Ư7_]cx9^c&ȫh)b)(K`"RWnDݺj d얔D}Hh\:<aáڊZ0dR<rfP`Pr{E(ӌXыѨWj=ˈ/Hܭ+xz])į+~a.ߪ4ʌ zV]WM(E j}01(2)3 ̱%.쟃l?^aqZpk:L>ܢ +lHA̦Ri'[}?V_s9>LH]ِE KAP-_aOVrB5NihT4zԢa+_XQ+PS%WS`%k>g}J)~M0 C^=2Y&A >2 <},:dMSG ;}4kL\݈gThlĦ7#&-*yDIvSvp[yF|_G[0+4o#cR(I=1:.@,%ݟ/i0A"-Yy*۸MH>r4ظikȧ^" Nƃ.:!m|BK)ppǡ4jgUHU%s AC5eŻdeB^HC[N]y9ar޷Pa{T:w*wx8@=듘a0@^\vHqOcA3`Z5tPfl|#XHB_=i }x ߘFF%i򈙡q=X1 رT\pR0]O&/RYJ< .(v" [ȗk?!kAS,zѻ6<{}-؛s$ +pVzP9;t+>|70dQ/TۚDY89Y(Α!0K=(iMCU`5f0KM! +: d%`Ͱ%Ok=`KJk?Bv(YLyQ삒+щhHX{u9z,d ((2Ny_(>>uNi/4"vWڀke"#uL ں`xɬRο?9%Hy ~2"Y:~˦_sKİ @M#03O:Aqt{B5eJ:Ҥ\;dŜ t&;A|d1i'E{;Ds[aܑo ^iBi& URx)֬j6܂WIvo =%*R J01>ܞ[2VtwPYʞj0@vPE}=4J"]b PBK^SW(28Lu]p޶zpt@*hCEX G?n$;'M/TɫC Dq)2IyI_|ز.&ojT߂־ba=G,AաdVk8 `O8Lvhr}'j1ىᴾڔmVޕ@l/5e_˿}7VBbΜK5FbcXkVLg#DޞzǕX8sդnhINBǡLeEA $/{E`ި/8|`_&ہd.);@%{C0U)'/%1+P,|&Z .N1jkW` TYBR`iH FDv&ɔP }aSl;bffT6cn_ýN5hd(Mуòc6 "+[ pH%1cG0C)7! Z Vk~5䀌Pk(L"ɮͩfH%d?!R_̏[J6C +Ƌ^>E[Ƚ{ WRXVjf^z㝠724ko nibȿ\?RbM[#fA,'τetiY"ņ#5Cp Ǒ1GH +>Ӯ)K"Z: S,pp̠~N zc: +k*{[7n:[g )YK?{h1\Tr8}Jٻx"sFkqt z i@f62DH"e v(V5nyGa'ǰJ!X1PE>6`˙_cl![4[lأhj޴KfȺ +ŽvGLD|ւJIǵr31[s>ح"i-tr{6"$լSzм7yxLx{vlϐqi~dBC7P:E,#$PML1UML8ek(NP.o֝Fp"Cn8P(Ek^:C,ONp։`q+{ t ՕY9+y:(ry֑ +zp9F $ MY + Έ^/ +;)jT)vIiXDA` +trT3W  ٣QW(`DV!T)CeCWe* gmR.902S3j>K|_a@Vxw" ގ`Ag.24EJdn45 B]ӪqWim,ז(k\NqPKd +8vxCQQ5f&M<3+iU + Pb zJ<\Yc;ģK"4WwUӈ G,D}3X^1=az:Pf{>cٵ;EیPBÅqku9e 0ӏ {N+aXZ`"% O&(:9 lm=)T?r`ti^geŌ~ơ 7wrx@yA{ ,$Y$ x' (nQEG/Y`kK\ sC o3=;4:ғoZ0p yf c ZG +& HBKAf!uɶ'n1Y6Ax/R n2SOA.Ңvb ɪx+l: `]Sqo=)HǦ0*LH|ӳ@/F5 +xJ-$)Y)ƔbHRyVDQSs_t&b3=S0qb~":azW{<]-}D]â*a{~,*P {vO`XNv @+*I:%8 *)tZ+R=x/L#2Sv=KDsf1|zYSAb.䫌CEÅ1WUk!CO+ ໋ 8n&h\"Nh!ȿ^rFU 5 _]$x%c2&Ig[Íp%?j5x&[q H~o V:ˤ :Ť@8UB3cUrP@Dxv:$Vȕ +uhlCzp(A#qhGW&HXu]蘂- !*i }F%D}71שDiP)Yj$2˼@,]oQؿb70 +FT,hvi9mW^D,NcB,LH`&t_fx!u/W݋2qM!p> gOlj]c*#liG5nP r u1m5dv軭7l!'Yn^MW:2s{AT̘%r `|177F$O9G=jM!2ȑX-ԝc*A^!μu%^!WgqDц#/ߠ\æa@ kԞnh5_"?:"B. 5C[u@:peRn30P߁W+nR:>:fQ\KTƁ{q+[LۡG$~-qY+,21ݎ,5!Cu觞42шĕB nd'VM&)@Sż#H@+ O ϣL-y`FeljXT .0a3{ⶰŦ +hoƤoJ"^̒odN_4kNa_ylɄl^+6fC@Ld:X-C?iB75L-w4.|$be[F$)a+5|]QK2?.aHRP-bzQl*tBb-he<} */꿫[Na\~S5*zyE͒eqDϟ:vq`(_('܅kz?߻G@x5p/ _ 7yw[&i߻癨 \aDz"vI*M}Oy 1™jͣ%|ibIvјb-DYlC/ghЫP,WO͓#Z<,\P)ӚN{% 5so {? +QC4;>MDgL֛/>s Q>~Ɍ[c +GyŸQNlq"Cۆuh{ v:njL"_N]1Y?!)' +4HOㇾNC*hpy$u<1P+]b +IQS&Kգ{0 +cD3^l#q/CSFc.њc(PrOxRT**ٱ B\[Y@ $IW=:BIP8ԌiIxLQx1_[@nدB/bvUdHɤ?ܵ sjQ*ZCϯ'cUryZsYC­8CuZ1 +P^LekVR{#A§n;GQZ| 7e_bb.Me +5= an4X!}ȁ=#Qќ %s{n[pzY ++Tj %}VYB@Qo3? g}X?M/_KlORдaM.YX'8)Wc'?V7['_'g 2`n`D@҇r!{;dTK(u\ȄߴhǗ@P#3qZS(Jx> 0>w$5#.X8KդV{`Сf {) 3~j UMU=&WkOEr"\"](kmt+[wSΑrk\>)䈀"y,ҊTTC9[ƿ6Dx1Ph?1`w,YnGF1 X˳IJXh.Lc$k@!.{h_Q׫1l[Y)H*.§@s/`tFaXuufGO֒@(x# #V:jdIS: +{%:Nzl:.5!{S7o孛nYvk UaLu,;aB-nP ? +,\C6}h@\Tڵi =PUW5R]2Z2)6b̨@"h4mf޹\ d-X1k+Gv;\$١TIZ;pP㾰2ʼn*SEE@1}N6pUAioٞ1h?T"p\y hUg5~54~E;͝'d["62-I2>]ɨF[ +9qTƲyT R|ΐB^dʬ !$+tgl299T~Jϴ&+יGbG7Hr1a4׆Ǹ2]3St;oM^u5{|أT"]-}۸QzW7tܪy?L0n[GvDToBG3mEK}rN`XP^`葈9 "d1K ,W@|Bkx# +"/ҚIXe!P üGC Nċȸ/|[(Q 1?\d̂FaUª"0h%!xH*gQ i3p +`:zuLn|ZEG` "r? rr@3ǥ^9Á;Sgʊ/op%I `7zIAFeE6e:meܮHZ Uqp4[ɶd*v5d1~鯿i71=Vۖ ۡ6fH*J٠bj[8ziei3Jr숽^ױVy/ n4 ":`W r`Cغ} 7aJ5`čhGf+Mhd{̀]#A~XAk )h sl1ݮ[` {u}ӣvYG7ґLV*Ux}B)p?9֥Vn B^aL|ZT.j~LT n<T6ݓ͎ڑUwY x-yZ +hۚ0ݡHQ<֡6w_vd\#lVm3EցECAS'zX 3oo.V!x|%w#wQhG2(#t'|4<# WHKndmN2A^o -{ Aw٩Dzuܵ<%-h# q[~k ,-b]v@ T4y gD _ +5:FwZ{=ZP}x5%@jU%1?rݒ"ukm*PoU$ja[{Svg73RBzU0쏆˱_{97J*.z$x G u݋*<<=fPd0B91}Q1`>K;B;ʮ@|ɜG,M8%T켙{ |tI9#?{k11ҟW5VvDxVlw&FQGij) UY:$=SNm.YEY_ΰjCvT"߿$9}Ct2ga <<oVPv. m˒E?M/9D1g㲣 \O9Fb[t!ܛ"-ihLM/]=tùδ[!)3X##C +N;)p=2@`C,Ѣс&ia; ҐW{tlj`^܁ +'Y'o^hx*\v=؁=H>q~?'njzXE M{@ᳵךԊ?^K8#(`kYvJ0yavx@{bdC6zn[" kٺ#g dD/aɭ81Wf3 ydH2gҏ$b+-ހ@J2>#{\[M" +Z ^ "ȏ;%ka)ʰ<_ JT3OEۈh6ΐͼyKi)68M`q/}ھCME--tzWVl}Usq,X :]|QQL3bⰽj^EYY{#O1k=έ;1vG +Z1gsVi kqa#ht"]RCqe&J !4AIzdEoI@[kᑥr^s^9w#/SuJ]rug &@j6L)i}:Vk pj<>>pU@ȡ]J/ܱe9 +k`%֟GZCnt ;H>-]N B!5QtD6G!$EpYBE,э4$V>_H3S--@9Pqv7w =.Y[u!_,ڷZ4\ءaU"@CQ&RpZ|kEWz=4S+sjIu cRN +&){ȍ[T)>S F$%Qf¶4C +}ߏƳ$wZ!Y7ʀqj%0iMRAɳ iOu{\``c}^-={t#趷n 'Hh8G!iZ($ 0`覂!D<f#ðP0x }v6;Q0;C^;H ɼaxlyPf\UZ=^ȵ7ǽIm6ϗQJC-JH@q-z&}(>qtkazKHb{y$C*[ 37_C Ab2!z) {2D7n5`E&H#}q fszf֭ˋI6H!ݣ|D7yVBM&Lܨi};f^1g|6ϭQP'I4L5N Uy 7ӣ呁Fư +{@ʅ\UZ1ĐypFZ &10c iv߭ 6%XPS "ˋ|C[NXDX(ƻcU3 +IA$:c'3{E +4[Rk,3 L[Fn+3C!9DFBObcn%豷q1{fl֛Wqdۉ"ęC5<1¼7$ƹ=yPt')ӑv/P6ѸWbcG.}JcIѯ=2+zУ2DYuw츤y2)S9UFx&zP~˱DExktc/=I8T\emhJSXXX: a2p/}桐cJ7- z"4D"Mj]K{]>X>^9 +{1:'hU . +=@$\Rs/4' ǎX{" mzԤۙ#NJsEܿ6G,B#6Ê%ܫv5*.MU(ݭ%Y|GCe@Rt⮣ьW9f%eOE̓_$an)_OM+p+CP.R qk8Y=Qf#ZNl}=30^nϥ3I:d {cW{}ҫ"q:qLDH +Iu-r{Cqoro A{Y(c0j\: +,q$@k~2ۓ183n/'" 9XIGax)^Ұ OWE&ϩ>]F!z +wGiծGpάɎmFή|8` +XPnp(c}0o|tВ 9\wUn5c)A-[vvM{$/ؑn {Ԋ@#w~  {NPutHoR-=(ڟ! +b#ZoBp-FPe+G8yD%Gf +Ubx7=Hvn2uý^:ֲ.[TVܝ 5P4#b.{< LyKKt 貃aWHj@&M+s|HDBeE(, @@XjB z{#Y1XB? gH{c[ފy˕#֟^;yg\%OY^ 4`L)\0Z&#}zs ^~pҾfp'MJc(CvZI]s3݃_Ɛmg +4h#v.W֐4"c>ո#07@1xz).ty3o .r^h^u=$ʪ* +Yz)0{aWWv`N9j0%XDSW@aԆ:װW@Kg I։5,gGb^Gutp(̹ +fokL7=ԿV3&|Lc(8:_ 6y'r ۾ndJ:b.<`?$5%bm,-b3rVMBljd>vU'l;;bTp͵+(oJ>zď z>0`rWɱMU hE}~b솳DEPw(g ,X=D8"= z? +0ڢ%$F0:>:Մ67Xx}tV1}R2ϡCm DEm䷮πlд<f; I)PF|QMq a@\Y^Б3-n1 O#6ΌޝV>Ju*KCnݙ"= +5p5kѦBQ*)w4!ȿ)Zt. rt6):R1"ڱ>5%GXa۶k1”ߑ 눿pz H`Nめ'8ڲD|_ot*3K_ʆO#>{|W`֭i$آ!tZzwpY!{tlmdh"r6 bs|O%P4:p,MUx 2 :pj֌l0`/P SAzQ~{›<\f1pc  [C䴗\썾[U +~taأQb FGLl.? qc7qAZUd s R,l<05/ՃUt-Pb虉_$qAa=͸J*yjsH'y}v#7O{oz3b~|FF^U߭:o8S17F{])a6ﱣ-,'H7$<RMPSGC'\bkk,3Zӡ'#Tf!Dլ>#GwÿD)Ŕ:9(_ A}wݠBdӄ?_aؼe,kkza=HуMrxѢ [{$Eܚ>bOCBm,W.Wn=7kM"<=En ֎n.=9RCPɘps)yXduE"REuvzAW& 1]4suE84_T۩!bPhzݱu@uobB(J3bM-J!vO̊b{-fЩ3:UI>Wg{n1Y Bt>Tzy #ſܪ+=nԏɂ^Yvl+9L{\Zq'5Zِ W$Oa7}G)7G5)T;^;j^1PW gY=6e!%[` &/~~3nWAb;H=I ~tK|w*ФlڻZӤgz'SF.iĭ%h#s^[(ջV"}mU}ppXpKR2nB&?5B9CϿXG5p4S,U2?_(tt.)T~{ľseyC,Voyf g@t/+IM:ΙiV% mj,-͂Z_klZy +C`vql*`\id۸R=eV3*oEƿ"@፠Jn:>+M xCa@D>v=xyZ3ˢn{}`**.n9y&]Igxe%Dݪ0\`Jψ?=x;7&x^p@>XC&G*(JAYdpI\M@ nVz)bv4g#upfAp\swٮ1H`G[fXX1BćjKHU zKD*Ռpirld +  A)<7_*Έ+z.} WLC+RJe4B%vgVGT`ײ^|r {^Y!$~z)|zÁ(6DHV4?Da %AaHPy#y# d.g#km9sA 0P@^J|Mn@բkys;7uDMx-[@@zM#|G.C3T[%H)IJCUA@# yL1w`|vV:b+fLFxxZQmpׅ#V_ K[J̌H]W6),E|uWb"]~8 fB&X@^3.$ˉW&ST3E.tСф}f.6>ڽ@%]YdSπ3p󺒬WC3J`run},>f b~B#uQ{tˠ|\SI<"k.I7CK@À4xFL!QU]_g>M{s >CFu֗HH@E-1ljP`Zî:yp7X +`"h>OKCXsX1*6jucg;Lĥgľ\„vtn&e le߫M<BA}zo/hSL AYafrAirVk# à^]~hA8M/-߅[y gpւK^|σI DH6uWm+ћB @-{x"Rf gJ-Hd,Z$d`V&S>]|_+ѐDњ*# B!Pg{ǟoW:m}-#،u\>tzX@]h ۅX#%6d( ]p@j}]}tqN,uVJW(/bd ~+KْE`Mh< ҥ_NnChi!@ |?`0qwjDBfMS>/zQv'imQ[آlͣ?fnV"xc`6 6 zhߣǸ?R@ +{^e L:t7%"'-l3Q6icU1 *Ӥ4ޗ8 +dU~HfAq,]\>Xl/i|ʜ_E"lU{#Dױ#3s7:nk}/OYs"VD54U Pp׫5 +1< ]ym#} w +:uq0~(cf%L7g6x٩ă.rE:qYZOx =O|U$/fP^m|g_ Uk+3RI_xXû΢{H| +]lld?@zLW!dW΃c"`A'.؄+ߖ3Qu!oTaəM`bv9aYɊt Ke# & M+'sM,wȉ BL^6~;۪<EˁBè_/7N=ӲHe֓?#;\MǩMCCYumNљFQow.c_Pyϧmuq;\!H%] HnƉ U5d7c[Uik,"X2c4MG04XDo! L*«Q4牢;j~;C}P%bL?^M|8Kd.{赿⁂jJI8A[O5g+1)Np ;Вѱ_|&m=#I㹸?Is * )FV5w_'*)P1E/2X?dJ}gJ޽3)Zr-fF:W*;ֶBgm~fLA ^p` +"D!髰 QK$& E,ШU͞~3 +zyZH+1sļ,jtн;ypT.щ-)!BV \Z, i=R20ߊ# aD*x.9xU"$e:ΧRnE9Pe IFJ6L1"G1 5%uhỎiEӕepLQ%`ǽ:FN9L!kbSOuJ3Hzۚ5BhYF?Ue)_uZr:_J]:eq +o@@M6PsB d6R2+RD CPiv7fLF tf igzA.t4;I|]WX4 #2 [.H3@ `1+_nӨԩ d^3fhCe)Ŭ)yEuv.> %DfN]$vD& +ۦar?4*^YB +>;ڮ(.m3H %ROz29ANʶ*Ҏ` +r{W;:׵^/XoӬWCi2x+vH/P^m3[|@4H'4 ፏD4sTd~U:Z}/~JmHF`BJ+_OD:a#v?DD`c-J&) K-lk"/nqD(q/Թ:VPh9ӑo{>by6̀$%Ý*t\ݫ8&|ċ-k[N7([)4ceV +c ؟վ6Lp5%g p:bȦעRWԠQةO7 _w{wHФ>gQ`"bYQ +)ʕd?@n߬Bi@hLz(V*IB{ `˾5U8xoB[GDHKj!CIuT0#[e_G#]ˌVӒN?8?V|Mdch}?g6EwSt[twSL#l2V- qa%#hBnke2&2[ ɽ>Q !C]P~5CÆ|xnꆖG;-G`+nJkS*=*[逝đgMtV|9f X}SCUwқ>;N |NwCE_Ϳ(y2g ]cФ8t7GPS͆s!)I{FHwV CO9n7u[Jpt[,)Ymm(dZ`:DC)]w ӓ|Wd}3Ȉ$ƵDuGȤYS248_NE~F0},Q@'`|ap۲I?c)+W-7 +,NEyӥKXL5=j(hSz"ц{C~xjM;pIE- +5%xEΏ4[UbFa+\)`ί} Ng_HY|S, ,E۝*p} +}x6HOf0Tf&'B4O|:Ueڹ}{䶰kZyFJȿY*e|3_;fjIa6+Z,A u6nIpɠg0b@xo}ڱl^r=nUزpN[hTWK2e}j_'[ǛubK\>J؝b3\; >uΧi~Ё^4RF'"=Pk !,Hj`Adf.V?EߵkE)EjPTW+!LODvȒq@G @xevjvG#Y x84E:#TH[lVk3CzVbʼn oQx&E Nzk[Ňi3Ih< +~ ͽFMw0ŌHgZ,\&~52S!%Zr +ɤue T| ثqgC؝[pB*dIf^l_|#mqX9C2{_ / TP˅^P(j**آR[=+Sv`ؓvg];饰}GQ$ה*s-Q+|sɪ&+P5B[+#EHY`tZ? 59V!R!`]yî[Fmg<%ݻ#el]-ɍ8df+`*o 7+-^4oz#8^* Veshws.05L^)@]Z?㮻L?W}k7>~ [K-+dnm_0U\O?ueD)4= Q@*<)gW E/o!Nm+.:fqL{1NG{XKxam9m7p'.v7kN덲֯š# \r|7Xi#JP`+L*u!;1"" DVn ݃lQjR\6&.z#M.D'kKz0FңF] +XZO}ʆObҠntaiWnj%g:a 8C8ݙuhDܿpZ0."* tTH1 H Su{Xq92P7՟9NX,S7ӯS֩/4[ |}K A4 |՗>a t*3CM dLVZ^vM8PGd-jb +֪˭L.:cD~/dHbB"SI_"wNLn/YD NGvRUa5WoE4B ZaBu)Ռ,RuFΔao؂xcKjeC gf{Ć.4\:yB + qh'/&W@G8f(#3ڼ!pD_?EIGl 4!g̓3%Iw͟bnq4VW z +=fc0~)|7bR*pv m|ox"'I")=\Jt pǡ,re읜U[Tc!m +׉B u;MmfDXuZi@%S6,/> /uG=_~'%plͿ߉ HFS9>֍:-&%#zx}FI5t>2 6Mw cŢd6+X5T;xV f.uǢq.6QlCbpؑDBvz &jL( Nqxhxcd&]Xשar[YW0o駊S7p>&\t p}z鲭3h40~`MNMxKE+L’|zO&{<q \w*%;w,+pV-(2~N5k:0ąMwA* + +Ssb!  d +3iEiT +l0*'y̬̆D "ND a&u8s1' BL,W ,L:=_F:$zWd:%&\;8&V>1 kqꊽd=|~ rp$̀QȞ@@ XOrrBx- +A SI\Axh_5>9 +3U YMuPO)z kŧ( `<\8-q J L)p+A;(;(E+ :ЙY* +B1–ʐ3ALp'83J=bO4@n}%jgmG /hU}u>x&ize*ga% "}Ab;->4D~_+>Egq/y-ߐ{x( [Y=m!ึ _fFJd:7 kDƱQuk@nZ1b'BD>UzcgЯbb@6RSD:T]"5R%EB2B牶@[9 ƥ"B'?/ʖQ.'.(қ}"}=A &iCյ7`Z0R +V~rnۃbvA i HT.K]Til(.{ +C<5b_GLfg`|b 6*-f0NU뽓d}Dx 3ʩ+S-A/F>|VcDܳmܑ8y `qX˹tӀCœ*E(%h0) KDyxvXqNtP v}"K}SLJ dѽ'Up`?LZ4P {>! I!?UuS$v)`SU*Ӗn~\L]ӽlĕ6EcH.UE5§~=3UKgg$Q@6zR,|3N?g Ñs0rů\~Gdepb:ڐMlz"NY ɲ ,c$U}D+WeqKtvdԵ_(]$0(4gc s@&̓y/yO۵ZJvˬm1Z*k7:ys_aK~`*Z>%T S>}/py9򂥿EKgpGq K(3 3`Awd9%{?-GрZܦvS+ Y- W><)սbH XV #x2^i#swqE;Խ|e+W!~wAuGX o5wax;pFOc~G#*RGk 9~QǾBͺ>܌X9UM29i6锐|7 ;(WY73:dR|5݊Jݪjw ,G}L6ytw5,5o n⡛qa)ŷ +EN |PfcK a@)$ez fr/{&cb׶^1י,*k\EP`NЊ@+DV 2ն)hc"408C^H'CXd"!Ւܝ%lr2J$$O;F[VP 3H34L5_ʚQ`:7#.22骇 WaȅdUh:3\YNjJC$-=x}$}*@88\}HN% ޼uY^gtngd;W?_q$!e> N +`xP"#hdduN$DЈCMÜ_Rm/Qm19[KJ|y}ئău +Za;%2bks%0B/p 4d>Jy?EXf8]ҖCJeƖ%kf˔ʽ+v + [ΕCľ~%( +endstream endobj 16 0 obj <>stream +2y>ȞO֏al|P16 +8W0˪Pn?|PU:\bj?5yE^^y l´3s k#fjI{;Rϖt:ʔ%јx?(NhnY2> hIT}!n;_KS_H{r&ˢhhRQxr>ú~|Z, dFu?SKfScN~vӖ[Vux!ݎ^^aqQL{WW`%F+5welYŴN*'(i-i{͉oA-U9Y: ~Ȳ~Do[}):"ɮ9!jF W_DX׿T>˩qzӫY `8K\_,#K Z[nC~mBڴ7Tn/9zR{S;Ԋl -ݥi<fх1$ 92pMG{ +'Qu߿@_W6$lj m(09dg 1ABӡw B0B Kki ^PrA"P*LEOݟ&z& yGQ掘;[G*֛}-D_z=+5Ηt8Xusݹ^2п*G*F)~`ԌIdN;Lu ( {?F僆G*F!ۊԘjï÷q@ghr>(xj*ͩ5|hmJjA=[Bx6&+抯]Oi +6ap.)Tr |QqHnD &B(_TffFΨv'<ʁSaql b:[ ۹4Y|570@ͼmZ>"rFF4nf!e8YW*s$(]CbeeEp}0_Q@PoŻiUNú:u C1J,G(5I"  i 'Ā( +MT M(ރU0テ '}ݳEU&dws{'Z +V̫NcW0bjÁւ +hlh%!"ޙϰ#Ԙ5{w +6M,RI@nU˲-LHt&z΁@+GL猻j O_0w +i_sĈϕ$M@E!uiBӓwT.{|[[Q:^V4 nleB-OX*hoac[,@{tssZj3b*](Qo:6aY-0,Rbߥl,²C^~=Jq51VQ*0xS *:D79ԁ]dWV.;ցPe(0fM`fU۵e 1{9&qnjwBuG ޻JEGXC+&W^%8,uPiwm0b0_U-vM=7XbU"RndhW";1_E~K"8*%[egLHa05UkgN ,[ .6`Lp Q_Kj>Z.zB񂦂 B!{R\J x>@ѩ-,i4V*bjo3\$P֩$l +-GT )e-xZ}~_<0o4wo?_Io?7f>ρ7_?_oy}- ƼL-8Q.t;QoLo^tñV a,,Cgjx\\"&j6>ޖyP\6B""6{pz(gx]V!B{D)/ byM8glJn8l0984Wf'5у6b%r-M,1c~NY\M]D5u[u;&tF]b@cg=ZI V=s $ +""N BJ++~ Z&Qk#d# [;Ϋ>is7#t#\%䀞z<]+% Dêqm\tz=f4ПË<20D "a4\>>5 =/ٙ? E356QikpUsHxޡ<+i0#0%E`֊ {IbXԥdٞ!AiG6,C 2CGۃ >z 8VM7jRdG:E"bb::3Pg;34Mj,w%EE|t<E:">i^Q$w^CAfQs*@שVtZDrYZ3e$UwOq}!)#SĬiO6O/|\ϟ"%*~=\D[ҞP ԟFMko 8 Qηhzh;0ktYA0*H9&F3Dh]`6P u_2AGJhў X4D̺C0Z6jO<]EU/)-c)~0DOr(Q L&~hμ _]{h[eϕ-jEr҄_+@ q=9B< +5 Ya>0K"R #~ +bT?gnF<6|Ea`49*ZzA1@ 㗻\O vjA[* +3jlK^oшEL{|zzλI>`MΪy~ +%|j~_95J*ᳮ0E?\<”!3" +=#HW%udד\ JXٙ%Kk2X@B>b=FBe)OS]nhxͨaskM2䌿y +ەNf%ن~׃YP֪zfwv?}M"p) 3;e)rGH[Z61sMJ싌#_)ĩT*xN<}apZNڻ u-Q0_4| +mĐW%ur1eB7@rHx:ځ%#nWԣ O\]w?]x$Bu? QA(Wwyֳ28%:hGj#{;>> vW vͪp`3nJBp'^[aچVq.`Wf +z!=iݩb^g̍_"q_9Uv{0<091@~V F^T9NzS'\ q. 87 y!VzP^/'>'8+X K:LnmbcС"q~`Ȥ 36^au!3t889w?\pxbL`r6%z\3L ϑ-Agzؑq:Fd$btpÒ.Z*j^ET5uC쁚*C@GJ A8Vqb8;_]zCh;,#Xm|O^E gl(kUzz M=_zC0H>ڮT:)[Ei)bzeJG qq#vU 7֎3[&' X+8 xzfk>.hDn&htWDbrZȗH(Tul+RMnDLa)\Jr8fEhVEŲ +7DSQh:]m"J/7qF* +R}Bq'7A3ziëmg87A MӞ}c=CŊ#opZniV2YQvm/yʮCeذL1 +L̎ĬUL^@NU4^ml`yN xoLa|dKds!Rz"u^7ˌV/1IO]MQO'u~ݍ-֌á2z- YCE~-"'ɛuÁ  _`LE5-J[k½hu# UԑUB}~ @eeMh|3]E^)>z=ƌкLMψ !}zRc}Q8?GRг8 &S2z)գ8 ̄.ɯa}Z_/lÒZv/6瘻0nbG7 -(@Za޷Yx$KތQeUqS t%}$?ʥ;)2hIr'p LL_hMԿG\% ڵ~ Q8I ䷀L߫ON:wܚ0 $VV> dCu`7%]6*t9/g~NШk<qz"̬/;w]4VSyȊY*Nx"^" ݒ" \|' %>uZQG))^(9U-pZ?GL/9<%-}}HMBA63(H/뫿ħQ'I?=uꁞ-E.Ў; \*}OL,7}UX΁+?9m$AZHF}sSXSiXHe ھ_[ ,Zv<6>)F TU*]>&y"/z0Α0eWع~|>pxMQv'Ò"AFƖBC+ z.EQ_+-8K>-i]\!p_bE.ڤ QퟁP3 +0T?ðV-`0 +CxkW08{uoB,x_C])zxBtGR)7@LS4)#k\8%[ÌlB36Ղ<8߁neW}m3Ll!a亪u~|Sc[^k[EJ/LPewAW{?wl%7MohoA#|`Op٪?7gKz>u/|et3ĎtVx7ȏ˾6J7T^&F@>@Dg_IE O,0,dba3/h\qYcmSUDOʑҬ_Utz3xp:uGkX5^/:͊b㞶2ao{dGʙbҪ^1^v+ahdyߑP*ŘY_Hob=Z[}{'t#3z]ɭ^ 9y׋-"dvc;=cE1KnzvqwCx+" F40f_~kr|΂?6]IR(̊PpVaѕrц6+=>#߫n#$Q7˔ÁV ct~I*b tLџ/1k ry}WW7<x3AF<-j pas_ow ]a)-"h!.)Ft{Nes-0=s}KSaVT~'fֈItz0esyr*+MKmW$wrNq’V^l~׾.(#~rm]![Nl1#G}FZd N\~?U+;cJE}G% mSrg.?)cs~n/Ss) +3wIgӽk9b p%eFW ZSbM\ssjSrb)Xg0|[j)ݛ%B`; 6QW(QzM ~EQ-$:RT3֧ D0(i@y*Џ&",ݹ[a3J]m;7X!XRDy%"򇈕vǧ(A0^(w!AAxH %}t<J̟PLp{עx6=fzx->zTMװauH#d1xj # xVUTFSk9>@BJ-0ޜ޿y00z? qr$owO/JS-sAy[HETycC)NwXpL\Pm.-XoQ}2:\#|GG^\YJӰ-2Vd.eAU}EP%ϡ=~9uք8N}hKzC|3nawwIpџq+ C=Fs6vNDSC(5@Q7l5ȀXKw\5KY|AרxlhAØr +Ztl]80fw"+d5.qL\y ^*Ue3?`0"(/shp7.{DM\>l¸*80r*Bge}h(ϡ +.9I#.F}gN]xUF߈e˜3 +nY7>_TTx3%wbˁ6[++;qo*)Jd ka˛sX֢q{3rYpᣀ^+ZЬ=m4R2 +2ɇt(n^19BSJoo_yU藮!^Ê#^O#dMNr7N =dxϭG("1n~޻AL)4IL& I"Sޔ-Ѓ8 K &c全-<g6>Up@уTC3tKT.*j k(Sv>fHE} +(C"E`S|1u BClPtjh`L}+O9ۯw$D\~X~M ]|z aĠliؠN7ZFVX˶{ǿ+*ly/) +O)u.mկ@*jXI@WT BMC *M i1a9EZ +BlkU>.VeTi/Ү x%Nxb +=r,:₄pבU?TAFiJFa/՚'RX퉬=}=W;~pk(fGx|;Za߃00օ+U #T9aG7"16"䮿R>rz<\%\䷘lt)6 Yw*0-ȷU22@ \ CQ㷰}pi!hJ!kJwhZ#Ԟw ׾1x66? ZʀW4wn>&Hn5L$@/0BżSXA3ZR NKܨVdeƙluA8+w†xth+7I?IBSjӚ}G8'?*I0ZoIi(}vBVǃ5p*i@IG,x 2Fbrھ Wʊ@3v-tQq"!L+JL+O6~v4x9CqURvg~S>o%elč|S<,-q2cY0yNխƚN-;XYdR6Oڴ/?:h:!֫ӹGj>JK<:`fPP$-5GmK7N#dq% t"#徼琟F=~#~so$FAϩ-mVS8oMU 3l5b]w:Io + 𨪩Gc8FEBGK*GW +F x] 0$M$[6WxGbگ2Ѫdmrx9$ћ-I9IaJncrGeX /+u졌Eh[v}G vCҟPTiC_3iSՏ(.m2'ՉTPq +a64iI;kSL|uör[#=>S>+PB (=WE1puE풇λ 5]XfUW{myֽ9U`Ag)>/v<0蹩- +]a'ĬI8w̼&;d@4EكN; +dւ+7\\͸70O=:ylfqXr*Yhz{+ZJ^m܂bF#DHWobKJv:q0*]x*7.k@ʊøT!t=+٥`5*#RƞpR"a5yrhOYz5ڏ!`ŀzABHN:" +Wt2=]ju{Y4^ۡ'hd2&]覦ahaFO6zڗn汧jhp !z#Iz$͝3O Li=0z+{S^\D\oEĉ]uFN.(QK2P :nb?H<0~w(UCyAʺ +i)V^LZ]a :W iB]&=bC]E5|PY#9|P*' +VhwD1dwn3%G8ɁwmJ o W`eW*9GXj2pH7=: vPXN(7 N 2~L]wݮMBm/u},3`D3NU Ӎe|E<|惹$ ; ug6o_X"5iѣ7 蒰UA³LAE5Oy)(a/n< C2{Ali_$t_iPwr +km[D1׊ŎZԭ[~aǖc[ +-m|"U#.t!=~#iqܿeRx S(ynp;vP +-R^cql_gO3i/i{@rv.t=>|{YQNKGܮ3}Fb8{H$ ɭJPAX> &_D0:o$߽5 >1A"B|tGX׉;/V5XK,1ZRȊ*_쌭 nb\Mi1Bw*^=hQW ?I;?q:1?|;r[ش=#R.oV).Wn5&'ejn3lvR'}ZV92".9 F(UW\ty4 i!kx?{iw=n1Oyz;]`[ucs !3:<^.̟Rtȅ, B7Ж0::|/-OʴהǮ?3ZIq:w"_>Q~ +tzƖW?iH4P.|hՠjV8:6\?EOp(;gwq+@Ed" "$2ʌ@BC ćF܂*[@h3E(x5$/L}]ۙ1IА=C.cN>gJµE&%ۑ<ꦐ Eu n1~p&=DbCFJeۭ I*fBO$\WUswG4œ.>4A.Ggl);fҘU\9D> +U(7Ê "v'GamxfV%_gzCU_y{f.\}_T 0V+cSa|Q;Azjňݷėq]nqn`4[Gˁ] TBXW "-I|9{lz(SL8(1>'$S! :IS2ov8aIO-W@K~2\JrYu0`f3AP#dwmUGy;kA<@Un7=Uo$7X%LWiٗѧ.Np/UıA+&!B>́7 8G(~BC3 +IVSPR +Fl(wS,T5!JYTT=S#-F\Mޭ4FԨsԈ< R`6+mAgZluS[W\`S:ʦs;ԇ!arȰWI3"`r7ڱ.yMH`%#8Qe= p?_ M(Ǯέ(Hƹ^抗w\0?1C$|J:UMt$W7i@MHg^džV=#S|FV<0 ǜ؏cˇ2#(%@W-뗱 @fQ]M^B,,%[䎷 .5;F[-e_&ؑ-u o!w 5;1zN^ I15 + !v L&~p@si{т|O`56ɱٳe&^wVF쯠X"B2^ij@?b0jb}S^:8)(|I +I+-=GspKk)=D%~p^k 8ZQeh `Ղ]CEWљU\bj/N>.Z4XqаXqa[xLlhcVZL "u!& >x [L`ف amPW`*[wzMsauP=@o|׻|Myo &nvoo-Ei~pOdUN""?]U]{ Yvv~'6NaB@} |1ei5ГS`(@e㊑ȗg ۓ 4)QLҴ'ŧK8̌]"zrν^3u@s7{K'Y+Z!3᳝Z܋y4D&NLzukɮW+GO% Sz6񀺇•]YHU0M.;"{ +FA6b[Oӂ+=8{~~2)q(]b]+y}ss9aR߾w߄ϼw8M:5@:pٯԲxuDqSpZѭ`FuCV +ߏطVBk+f^9شg^—oM~x.v%՘ItyDqFB_5na(P*OhzAވASbCs2s`X+*{Q~ \MEā_Ue[g"p dI=mu.=j;$wak=u7bAaFe!"kĩgQEN1QL}T +%xO;)t a= lvXŦK,RȨGV/RXƧY@8^]@PSPb3I1m舑KhL5%l>|P|&qޡ? >_g6;![RfƜle>Q2(n"4)АLjaR KyP;nbmFoa67<Ptre!gDbHna`2nJ;ypJaMXrj'~q{=*K#f]Í;RD5Bv'ƕn)+sZ]6AS"9GZ#!NyErPY1Y||@/y8{,J&clN_A6_/E-0AWzvpP/ɩV-:BڛْE#堟jdV\U1pewA |F5<2B?^thJ2Cw8гʆ*hZ{gAN9m'kȴJ =dֽEU9לĞ,GAWR/I 4@ ͎zoO1DA"(!eJX9mO@G +!*D_r +(-[H9{aεcDM! MUc/xc7>G,pS#R[U(${JbV>H]Z | +}(BZ鞤n~0eeo ַ. if!NNC3WOs&FN1æJ3+֨oѵ?=? +Jv ϲ~jzؤ<݂#ls+4 W@Ճ{M{X3hX) +B\4Nr?S >Elqqz慯aUj wMQwȒ~1)Dqs|GvS!c Whap7&Ṙ5n#kW?] +F*aQctدCǠM\Β&覆NJM=;-9m}^)MXg~.svE<6O,D2%$?E +y,w Y#z}H*g 0CcsZQP9CzR41aA ,;7h!Ƕ]3ЯL΃=(MF^k)Dqݶrϴl)W@"m1#&J[NSQ٧kҋz+Dt@ ΰ~ oGg)z_O2Ώ Inͩ@V[36D K5G90K +k?DŽ0W:4(@tTB) /xum&ϰAT9|753"غ!bfCztT:Z6~JU^=B5Ԕh%28E+sud_B[esIzEaG +yiC!\5LI^ƥrz+A끱 HS!z6V77?R_ŠG~TǦ^;T;4ᐇu}syo_+lwr?f"js6] K/"lTm}q_ ^Ś佝1\Z?{-I(ru]rxd'/VX}59Px*a0% m BIY-8(=DAiƆ4` ǥ‚m0?>:-d(CWtؓ>%r#,5ZJ^KDJ_E$g(#04C-hq (*?b0&!943BNmAwť #BESY'N|H)eGG"9BMHX7l”E!O1}?5*MfFb%[qu׉n+=BzIR4pXؠgo9:DB罤xOC,*`pSaz2+i 7M+xcK]M/S{0p週&J0)6||'Jn8G^ǻ!] +Yi +S/}n9Ґh:?/n_v;ucJZY Χ&\rs[D3-_ꓓB W`!n5pVdElIaodVuLw DJ:3҉ ɫlbdгzrhVӖS|ptvR4P2#KK4iFH縗^eY Ք 9j=8:{ۤb.I~)zT4a{#pg}ۖjYYlfBֵfGӎ`7tNaC7A:`S_9uB8mm-YPl'0&)X+S%Pj,: z.Afs"+/Jgk.*vؗ8c#}j]ľZW'aj5B; )\P%0ņx +cHzƁl^KuJ3ѼSuVۤ]:5χ *EFA |]Kz冡L.!~0`6K)w;X B2I%@`zsF}9^< PSu!0G"3/ދd8V8E7'GHLS|qv1L@%D) %NjʰəPq\0{#WzdnWKMEr.VW9$f3J\*`s/$g?|ឈBo3~AD-/ԫcpo'kբh֠5IT.nk!$$Hev|&[I>a}D +osQ[1|R dc r'<2p|>iR9N{XN,YcKt3sبDv%:1oFo"Rh_¢ט:c RtsJd{YVƑ +݅oNhFD(" hL=yT Hra$/) >m+ikk6pߜ".=X9hQ6.߿}f< Q-P9U8THň3YQ~MS-8og`tf4b%k+x֮s)r{E < wI\4 9,n) rgDvӅхgQj9֘Z4ADqGu,Xɳ}s"@71Ttn/"mUI9|`c\XLrbT(΀:vy{JQ2 ާjOח\JTj&c¤R螫rC:]~^ mB Š0[VD^,d7'G׶xۋ {@ٸ쿟-*4oӂ=!zN`tui\Ϫh@6>?[+ZH!Ghe0Z\/1cZ7fXF UdFěYHdqa`Y~aFȺKD)e d*+? @ 쪯= x ҥꪺJ/ϣqL/A'[#C6U'={|qX? I }|wzؑ";\ڡNDØ%WC0*ѰX Lr= o7F#4J"p|0L+ ̵J.D^ t6ǧS!P(hyugLa@2wd_EcfCrZm( 5eN;9^=棗zTʺ 6zr +yepU(%}Y)}*:0j_ԏpĴBahx5PaS)꺽G05Fh"]bW<w%\*Fa`}iQ\   ҩ(oND\v7ٲrr/AIQV~G$]4t{ T2T{eĬL?=͐w82%SpbCȤ^lS!_F ")u)~>ŋ7oo?~O?ß?_1nkxE/_AzG(>Ū2TOjiRCd;%:Zvl~짺EDȔk(L=%<rmN(mwPr5o54 )+WH$@p(o }QRX),`1_յsM['xWu!Ң%)r]n +2<.,*DŽYHob05|*/(}X٧,GQ9r ՓB3;yvFأ# qti4ԇ^@*(=$lf/ .߀lj¢<?;PgnlSME3?M5(_ko1ׁæ3_G[ԕ_&sD&݂t}Oz?p@Wcx귎ek ثJ=ߒB9.G%ַL.$]' a!>>~?#b{8 D$>ƛI]R:2r*zq_w,rOATVBhE]#CߪD$bl3##1tLDi65?zhjmQR +h7מ Ɗ-Ʊ}v]ToCƑCWtd;?GAV9Mr~V oWڇRƤ+ +$U`<1#UcwO'T|sth[ y{eJ)|#!`%Bq4i,hc:Kฎdu~|%O!&_æxRqBmP󫷷(g!@ϩ*ZutU 3;#R E'yzX9 H9zzlCZXRfDjZMm޿9AluZFAk|_GapELjn ~\d9԰*~H mK ވ5/̅ DgR2 +x|x|,ڶ_#{K1IFַv%5Q"?eU];3KB1.UfttXK7%{2͟NN}uMhN5mWU5+H6fR<4Ș +nL`wq70/(C 5kjWOh̭g@fȭߴ5m`v(۴R9cX=W7VP{R&Hht_ku{呓UZ#ayX=-"+#upiԨ-n^CJ3"u Aӝ94W%ۢgx%ZFXaL& q)<D dCshDt>)ܗcY_ TvWc/F hV*鄷Ҟ5=dKυTQ_hVW}h^3 EZ>H~ljkZaP +P7]/(߯XsKZ6`b Kˠc^\SۈVӸ0GE{u˚PV$ꞃ(NeOUuGRcZ7͟)Q9պa F3(LUM|[TsXHQeT!:L9)JRlN9Z?;J,/%ܢc/-z,̶2]JS9RFR߿q:*$^lt2:G73V%^qv"NaMנh"TdyN @ "^2 p[NxrEp|wU,zbzw E!ֿH@)Eb,*JCԉPH)ԱIꤓt\=֡5#B ~/Э I+;Nկ+֝m)K|NԧV{ e? c&FP/u+AWz2h)9ؒXeKgaoMJ{×\=,5`24,_HI-߈,ҫGssvƣ }T 1ۍ#VmV[EZ壺R +/ٗ# +]Yzff٨:A>6[Fi nDNC(1a("]ߢhI@cavIЙ N^0i.0+ea#7+:#'mLИzD{ToǠNm:l@+G@,azOY<h*Y9_  [O V<QPǏ!*W!7!ACB$W}xϋlb8tɯ'k+D u_H֞zƓ1lKSKTVz(xJXKJ2F3^t{cwЁC]R ^?B bⱻgOcIBC̆gP`?5P:z~ +;@h&8;410B q_ʾ^&zoCpkX2r{!. =Bއe^5?NG+Mֿ}%8WP!IDQV6@T[u Vo]|.)n +<h|v7Rs_aQ)"q…:(#v+;v^H@,0vKėNY} _7= =Q~{<'ڲOIB_:afPu q~`h8\s" +/l Gxq,$kf?0yګ}%gExQFrG:fjha`c(_IhBGP<]C0*!8% !̼`e)~\@!'X|0J;.XʈqhKgh_YGQRtcD;_E2(*֕|ͅNF'[hQ>-¡ЎwZXїz?<㖯#!dtc57R>,K Fs $?j6,H։Kr(ެ F3(Yi֠U aYELb=r$o +tðg9*~/(t/EI S?Ck +e(Oz]7Ȉ)~T,4HYЗ'꠺Pj uw;/¯~"ěF~mX.P 5jb"D$,_Roa#3?ZNRX=V?~$Wf[؅y:iʱ3sr`*8J5,~L~Ɏɗ`gAaKxWL)Yx~1QTF1"nV +3Kb5S@RowbD^#_TEм#յnZ}?˞z?J4|?`0u@Uq6{Lf_ 1#̗n 0ɠL0f<^&Q*34Mc +׃wUtc7}},tsh>t "Q-~=7Σ,_m鴛sS$NB3<2LE)w{1Stkf*%)Ɋ0j|:K}}G~G P$H?Nm%_B::h{D$_4 t~%B[Jf!3&dz.ten?aBGޣ~>`2?Svr.#=8R7+GϏ'hIʮas{&v:5EZ7F.PZLh{HŃ-˱lYrݖiĨT,}k)8L3YOw[!B1)($\.V425ﹱ't)Mj-;Ò`sֹrnSqhW,)ҷ7¯ qs0I[eX7|h*݂%\7wAGc W[]hN/onn^Sw<4{ 8'2 k|$%Z +ւM)#"8PSa^*W k:!\qDrb s\Qּ~OBׄO&k:{_Azv}Ǒji҂f =(b? N: ʦAT(倇kUPG%(B}2Ğ}O_&rȕudp DvR}UMӏ_F,@4Rk 5'`3ykCXu=lIݒ+hʬƥ4ʰSO) ьs3tץel٦"fs +0amH_dGT%\2FAfGibb.~{ MGtlՇ%PE~Q>Aaj;Yss)y;IpeBw'rO P"6Di/^ VgP%xn X!ppzWBe 4s ϔreK FðLvM^zYvt0`hƲP3 6"Bˆx^Ҷ62)ba=}GV64a `y_>n&XS6Cxix4|iR OL|Hb2z6$*y챀`eN)& +<-]4#QX:02D8?{­4J+OBiTKf&Y1+^`$Iݓ_m(E؀-2ʁ8RD?݉BTнS:+Porxiã1PO9|8*Z:U+ V"|4s9" %dQ[_֑a_:~~x@_b'^BP T@jCEI!)TQw_'l=!boFgg7Q~Fe P7pGdzel +Dk_Q_9<'L{a c}Ka\M2i D9*Bg'.fUȅͷm[$m )=Auu+{U;`# zxx^+j ̌i%P56xg( +@ZqW(tcE 풽"SiUZ[ң"QQ~L`dx##[1w0LU+w@ +p`˵N$ZI"Aޝp[f':꼬VMnH]}Gk)Fe*l֯ ߗ|OZpP? lNWTˡ&d̉~VN%{]8p)R7K>Є=I +lw֌\aʫxhL㛖E +w9V Rrg,Rg@D{CQ1MxΈ#ޖԚ|t,_UauW KLgK<2IOcX>YfI'㽂2@B- BFR(uQ0#! P͌P  l{:H=2EN{3 7؏3º84'0Wg۷Ln Ñ#(ץxx{]I› &sL1DP@ /E;H;З/rhIJ}qgd O)}!2*҃C+3zORIE;BD*s r %こcAOys +oP1w٤3tV{VHNr)6?nSm+<*Y%ԍh-H2l hbih%8כ;1PEr^L$ juvf +hR5 .􍨋dK ~f(AKqOeFr\̗L 27˶,Tb{'{!o?e*C=i h+!Sq%jz͌Ps6x a= +&nIq"}_D2/ɩ\|' ++iWl^ΞQhڣ/@RdM̡Tl ~TV`VPVԪl셎rm(I$քᡅ# &-=[|JRh hzzi{B_ +CEj.C3oSoSyp뺁f#<;rgρq,1]V;ҙii%zlqwh= +%LQ䰎E(U.Z+ꥼkJRn$r @&3.$@itZF +mZ(- ƴqrY%􇕘@lXP +/Z%Gy y^PY\ᨻ`loZ~8hzm1[9jdi9)?XY5F;z FY 54lU~{VvơHղTuV Y?, +veɀܻʁeі A~~.C?źJ"n{O5? |'D`e 3Mpsu'c 4< +hgc.D"0ӵ9+KQ30*חN/Z¬" :HZ0C]Qp8Kq-jiGEMa#SKOZNR-W'c ktL AK~6P۠@mL-f97u?3:NURhVDu0Ajr m(dY/Tj UȈ H]$@fPe:gKeeEghBVvBG +%RcYmbXή.6$$D'XeeȮ $  l2W)"p3!)g]9}]807wZND^tZ;l\5{2#b.n G7b@4[@!; u̪.Y@SK4(ڳ1b1|'f6z|_L] 0B2aZMJ/QFP%6y8T EylH[}jVuKeXZ29ީWXsN)U;FflClohJY}Uu),V!k25)Kџxi1 vsw&;^G߂e pN0 L+ GR$X)xUFn +.A%(zJd8Po {\@q_7Tbf%?f'k~3đX1j7jJJ/|dn jt44!}_d[=:v7ţ/in5r̸-EFe* Y :L2F@׿w?/}Fu4蓠\ 73 +[ ~{f!t!˩a~Jנ{ 35j 2@'"D@$z\׀b !TƞiMDlZ\8cC]5N,YԷ=H`R-&)8&1L~ ib19 ަxyA ɼB]+7h8gSY2C"g7/t8u=RxL`ͬ(:MZ D#[&.~?7z"QN0^׽7%w8 EެF@,~#0F{""l(tRd{PmA'5UMBGb ehɳp{a>l5%|aUw |T:3Gа#q.."W)'\ }pOB"uc1cwoCO#`f lYk\4$ '&MyiJ'.K`Lg8/Ձe]O=urDAg]6#5HTpgF9]Rq_b0^z;Yo2s*ra4fM /;7 iQ-IJ2DŽO 6^>~g:x]AaɵJ\F jD͐."Bw&wJuEW:[mI" Ʊ装-ADf;<<}g+1 (&H.EF}@j Ke$uAj/V:68hfFË3M|7ʝV2LΔDo6aqY{R(bx7JŖt=ʁ{x(f6Vav7ZBz`nBAÔlXѕI2"ll5@!wekr=_ +/9ؼ+ KHM L\_^ԅg49AƪN2e_)YuC-+Pq %Tl)12n֪Ϻזu}3$Ըyi @B;RDjfBbkѦ8"4? 6zF]JҨ$6o-\DN 7ȲFU ,: v#ZFPkЏO(d|xeӞRX>*_#!72Q] vO{wqAL?@x1͵B$[xYQ RK--I Bl7.} Kq䁋Gv׽Bh,Rן{cRQ2`TU.mӇyi-oa>?Ԝї `"&O$CK7"c @×ԩZ fuϔ끁!X;XB$NOT LHmS ԻShJ6-s,Zɶա^y9"Flq"V.d\u[Ǩ21t7#x!F_Q$qxŖ^p娑2&,)H@M5NHxnT`Bv[N}!mgz(1ƒ~zgeY*6`k:' 4cڡ?cmL®C~&BP3B| LJ +Ȥ^b=m,6y}q3]XdK` :8~84ͱt>yYD\MXt:}GA.+ uJh8hO nH_qn \* />e_@v iYVk衐$#}=ԺԺMX9 1<4H^8U"T^ꉨ'旡Au^L!>_#oapwf +=1=6*W xwUo}ll/ B`2i#*a{[$# !|ؙ$95y4I±YbJr ?N"-4w QԈ$AuȒU|cy LࡓvƦ{͒o:Üp29:4""8cڱ_z\Z9*˭Ѩ7x[cћ>uUO15uغ;'=<ؖTKސ8 tܞGi.T"?&iT$}qTTڤ$Vuf(t'Q־rOK[Bs]8̿rtB}рU9f;{tQ]~yxCK AM*1xq~3d .kDg5͒%H{fKax^鳸@M~NFI;KE;D'Pi3.Z -Ӑ+Q~* +SPMUvD' ʸY`KAy&ǧZPfy\ΜIfrRTlKHk@',YIzGn0֩bp,ܚ*ӧp=,D$`%.*^/(wgfKD\&L%RHXGX(~Cs͞GDS rгT˕>k|G8n͑7 dQY:2WS n{TGo0_Il'J<6 >qPҝ갼:6BoK#[O8dCR~(c} F͡i]ÕCr̦:b99"mw_Uw\ZɬC X *eE7B.XpK-k RB$ӈV! +w[]^u"7e[`,umuM~c.SK`l)yTigKi +"|HՓz/:3iڊ69%woA;Qtc^1;g#IA.F<1-U`X̻hQ好U(MkVIO1g O%x!V/x,q/;,T.įT#JR }?M=NS_|Spf{\Xāq usFvU P\8lی=_8DuB +m+ +6K<[OO"78^sa +ߣFNHWTyX\iZf}?pөQ%3j @]`Z331byPU@ c{̧g_a_H=,5s:UPI̜Th 2r"LյɂWuF9ʳv,V{wfčI9BzBt P+PZDV =;7qT%|SsҢhkLq~=Jn1 +,ޚ8`xq$lC*I +_{4; `\sygQezQ_ ÄŠ3JP~*N0doMHuՏ8OhI9 +z\309eY>w =1xѱVSi'kGw=۹-bEpg;;>-td?uGr?SuAyXiGNcc@r19q8/`*Nz画Vo{sq[脨H¢֊ ->p2Soqa;‚uN$'jy"tMʅD|.u1abSS +FVGrޕ%`l;9fCB*~SҴ%x.g}IDre޺6V:ޒz=HsTIjn|{{tusA=Duhc`+cU^n<FЮ#2gDDɮu@/ޗp뫼TB&ڱWa|JK(*nwO ?',ڋL9;X%؇ + +B_ 󺷤 +AKBXཽX$toj!`X2Cj>Uk 8qs& +`^)Qt <rc"aV4D۴ ?W֌[@ +}]^|ly wCm>Kh9-6m~x H%("sIb2}jzb1܏[+qEDHpD9hCD;W>t¹T+%~ҹH`Y@I s fkܪ,3}cO# jMYF i-ŚR\kf %uĂt}jZu2.8-B-esDPd>^-PHe۳mce.e-Zh H͔ :U(;Lۉ ZJ{~ WL{%-~`F`pC;!@ f[]a0U*$/UStxbP >LV/j1"e7S/roN@mxX"w]7_\|_s*Yh5dR3+<\BC} H<܂aӯ p<,I8׈4Gi$Wh@mu#D$|R1z[h)J{9TgH|F舞O>qa۾}~LOis3 +c܁[?o? +oaUT έqt`f@5m& zr?3h^KMY<@x`Cx~ {x"8:o9ꜢjGM&&˯ǁ %n j—t +%ж 7r*l"(SV+F~rj@<;D LcEpciUA)˧ >5" S뎳hAL!Nef7sU/Ň z&Kn*W B lHM;3e ʇO1c:tסq# ky Nߜ{ [[T +rd+{47]YI~A7ft55a'hߜgdzl_[Gn~>z +a؁)`zvpHWÑ1DTD;D]f0άv8Q0OV)+mU׹ #kPΥb{=V RKLlqg~y$+jhS a+<>8o'Q.iGuD>Z(w=xkΫAROF{+Cx0b<$`S-j(-tz0,jo 1yb#v$j +˔9# +]-=9Ng -?͟?~OO?~?_ǯwynoG)co>%D$)lMJe;m20[6;n~>>,3*={4>%rx`c`v: { #b8B~ӲK}gD߉X4u7* fbsl4J m{jBeǸR-A)j%, @kkS|D^6ÌQl(? P()aތ;,="84"n o FGBzp%"V[SDo)ry<"vBsdPJµ{k^~; P?Γ6;mh=!zQyƥj}5-?J0jGRSj3+`H*5r>ÞBs bɫ%=!F?u0(@{fāTǧlZ{{Ax CZ`M`~C\& 5a #:JsދR3i7Wz'<Ldnt?01-jʒހ68moXo[&JS>@AxYF]*ҘUsp $^^ˁ v7:׸|b.X#g;vу3jRt _] #7bMg⢎LX^]I+b 4Zځy 8ᎊa+ٽu.M|6GGrdcKU3*ؤ̼UCj _`X#Dd~U4"$%@)%: y2] +~3;,'W04=Q|K~"!WRĽqA2[\܀Ik{:%lQڙvV95b&c-".DS0͉xlm]QӗK^%G0u$] HɃDmE "|l. m.5"I+?v`8 E +AdOP<-88TU(Š'Şf\Qw*iSޏto46 Zxn~x3M#mD^&3m3m9mA_F%aE poO'r)(+1{aVYW^+b34< +eرW_0LXpn(/@_Y;-,>-GU&<<3Ys8.X{DEPe?BW6 r :K;bjj=,6^ge7"w8U!{OWPP1dHi6sw 3R=p)Mn*QJt[@= I=Gn&EqRuRꀗ/BϿ[;crm}0iUL#D@XKl7LP3##'r&0J z+["ijm%X6G6,JSDNRzq#8#@ms&ÚUwE13\+#t yE|ς,ǎ BذP*q{4)ۉVĎ;6Cu⩐m3,+΃㍶7,Iaha D^\g_B::(Mq49FUQ3عtoD +bh%B gԮq:ΰp#lOXB=9v$XB:p`uCnF.G1f72Sx_-a 08&Oq蹀ܿNEWFʼ;UCհTKP^|$4hӬވv¿D, +xAMJ D̒-9ܥL+%7Q )HnbYE|t0O3T-+a)‚`W =L`7 "j c*yB݁N&l \t*dl'l +wN'{ "nVGO[ q.4Ѿ9;Bpj#=){XG&U~í2=O~_[꾖T:.+X %꺋(?V~HGb|p3KUO7f6V\ka᩸&9ZItÅlm*B}~W7ᔃ&P=Qҕ,6.5H/c*OD~a ph-S Kp +j:t@^@ZVr +{\cb 2,FGvBj+v]SF,DnYnM2R6㬋Ĥmt^Qi VW`<7#!w`t[ 1+=$qܔE \eXm- ɵ YhqR%gtǟS{MŸ bW։u#Y맾p艔>o" +]_rz: 0(%˨)4shʲ"șUQK%B_ +Z^`B*3R%bsP[wk*"ը?=i 'lKß3!`[h{gX (U >Z'AkCSh_|ȩwE|pt\rs_N์>ӷ|6bi/ֹeŝtz5}YOom3}YUDFm$iV`"g5˷v0^*+d&:X;i_{ľi]a U%[?Ti!suZ7ީq~dOA)ȋ|jwzO1fXͯr[p_-FP 4"4nVWqˈD'0+dl``JyVqpnOޚZ4>"&w9I"Y/ُN Bz(R2qmοp+c*Y2tK/p@{VӣPtdV&k(@q:?׊hU |ԑWAuE[xGi䙜ZI#Ԃ^/Ϋ^+-3z2<@oWABFCtK '4C2d0m@o$'AÁj~b` +S8g¨50줓y]mn(B)BHٟ=x.kd>xdN(<'<0bƜ&_g. ?9&svu_Eћg½U,.J~De~sӡ2V!Y>ci1&Ct!>{"Q 〵elqMJzamSKC߿_MWV'Ș'2o93eIg>\b8tdEgFMuo=;`a(r^uwj]Ѭ5VF ,ODK[#Yq! +iSVE{k$Uf_"qvy۠{WTA9"W#SԒթ?*WDL '2Gt#{^'p@UCnD1pϧHڭO55T F6ћ$ff{ +J&;w"}1k\h9Uᶢ=݊0ߧ[L3w6J 1Das1qjݮxU Kp>ρ騡]Džgyߣ!TrQ'&%/jx0kHкm@q + +4奈UBxgcxU(ާF|R2 {T|`9OeWެ%u [VZa8۲QN5OT"ˋg>V +&Y;lVCX+m)uqV3?@Lox)jtt P;X&zR1$ۿ?URO~JYך\pVQiOg`8񃼴Mx/W#EY;E8O+`\kG8CXp%( 4Hi^u5# rk[yhQLyYv=#za //$lG5^ ;;Oz,v5-=>%n +`Rre3RG,C Lo8 \֌g^!%tAN#co%ݧSIhIxQdaTU/yKHDF:_J,o{rg(B>q W" By--E49^C_i7O8JTi^]u@tg! ڔMya(*C""ׯ]ad,b=jL85fX +9KWJrwq& "0`,rn۩v{ 3W- q\"= +1g"w."aXOkCV"KdlKb he:q دq˜3G9d */IGGğd\Z:}k]z٠iTCbw$=z#T 5gf-$Z_?!5,jTֵ23[Oޕww`KHhc@]9Y@ҮiDL&=HuvE0k:SV=ˣ;LۑܗCfCg |ө;@۝D_PC9[gXwzt2&c^<ֹ/pZ# -38iX~-ы3k6sо쇯eYe)La`2Ha+*B_D NNl@x/h@#E҇0֌M~Ud|YƮZD{n!hnAERB%A-Hù 4sDyTd?m׌rJXE (; Fo$/ /?6$ ]2sßj!P G ÅYHK] v]&3"Az x+^"'juvźe_cy fHxEO(R{S­w0QH͞R_sF*4"nLbQ?K=7ď_AD;lOT<ICVjT"&8*_'21BC] +Q_K8\0ycb} 8ef0y +ysITV.a]D6ar!9gDT;6C$?茢ԫ_ 얄~MOB{ޓyW! +)s i ]otF$z8TG;=;YҨ]"lΰWn 7Ӊ~%$8<L71|@^ٴ1*~m">d]0Va{Lb1XzUu";j< G73)]JZ_ֽ# ^D8A m o% +8ezظGk/&,lt3|Dshw*`Id/o^P8t]Tq lm@)ᑰxV9KTP_;8]d +iH 93"EW8i@Z06u ^A!Y 4vh \_jY"Ϛ30Lo3)/ʎI5B0?#*XGtfFۨ + 6WݤgX΢ $E1O]CF p*v帶|ɥ ! җiE}cەivR?ЎBL dR#`j6PP`}@y_oPt}(%nȼ̟ }?@ []E#MP]ʌCCaDC3Ɖ>~i&Y|h9O*Ϭ+&v4W.g-\] Unhҋ׭ +P3=53 PF >H77¿@G*|#}Bt6;VDßmL:s":|6ʝG͵~] [~8@p"i"z@]R5̎@e}Lڹj sB +W>#{s#-;qsHOeqn'*y%j2nےn90mK~D!y*,p{, RQA0{ɿx~=9fH#U.OPz +9Om<S8f1ɵ|0'qk&:;GWߐ?MMz4[Y"*/tL9&3]`Hn H7m5\R)u5VhD$f<Rk_CI +ҙx]\v:Dcq,Ek 3 #?tF<#Q$[yi/keZPD) Mbɍ@%*9ޫ!//^w⁳Q[][z cIIv@p? l cSZ_!5i :og‹^3;J9Bי\y-8H?'vn4;tU3&2 kOdDZ:NrYl25+c7N ,{i 0l@ẅyfdHQl +5#L@QXge`D\L hdTP_:*"ڴrt@4䖝I0*w0Y(S`lXKց8zj= +rnOڭx;B4A=hT XfUBܮ?92C;?r4="N#i=}i7F E-ӶŐ̉j;[wTHE06X<!\itP@Sv3V;{V*vZlaNmh&_DRqSo-H#ն:%8ґgBbG8n#TAdVXiyZoJOXv @z.Ϭ-rqWQ0|o2WQ0| -At ;Fێ#~꿿Cx[īF2O{3"`:r#J%Cܹ ;~fRi+_C zI<S9Bȧ},':h#X0*t埫^,M*lasW5ӵrX%W51 cLU\l@6\HtX"31J)tiP/ϩ(Wk;(zrTOGhehʼn^Y;?yd׺n֊"ow`W)=%&5Wl[*P/eht{Վ@+p;\ä́ +HC)qk#<<-#'bTS$3a`MPYw k3dUpI$oB<0TUHKATC轾I  t3vJ=Ơ(!.vlÍe)e2 h[L+mh4_ +T'k/?([& q$*u؊ѣ?cmZUv{@a^e_hc! +2p`WyURPe$9Fl=^7p8:kK ؍ d4r0 a7HQ+KWf 4>+OV׊vg'dQed{ +toE0L)£Q 8`i;5XAwd錿[r^Hd<*LjgЁR˖PJDXI2w7Fuu#B]`S""TiŀͨeVۃ5Yw`a&m;Xj*x}Y02Es`jp5gQ,#*kr&Tͨ:mH޳9w8D>ʈSn[ӳDQ.]) ߠCw8e<$Z30+/\=I1N0"BNFvSZb_yI(p4Eq`EPknMjЍ10^98Vė2r{nS#{KBuQhG\<̲g#w_]m>*\G$⊫ 韓Tb[᩿Yxy.JVZ#wmx:;%&S"3 Fn CTDo3..pwңr++0ufP83-z{)n'tg#9"6e=EQj|O:[H_!~ZUm4J9ʠ6Z+@ٝɦ\j:+)VdPjn}ߠWђ+dF?34tJ?Iww$ e5.6w.,5B8FeJa3WvhӯL{W鸲G,G;8DD +{М +9=@Z.+Q?:8FhM/I"HВZHNbh:J+<+;譪q~)T;G Sj(wfҚ[wwo+Faoq8UӢxmFB\KLSs5@6vŗQqD3 VB=v>}XNm֔V -@9 +u\$z=]TqS*OwS,Qǧ%3rFk 6}Դ4Ck4qx`I~SFmFԹGcH{%_v#" +₏NOalhNHD;&DL(Z"@zvNEb&!bDy eF~+9jnNwo($V\-sF!`v攴` ^.%f S p%0( +ؐ|R nB;բ"qIq _(|<ʓ8 yD+(vtLѢmNί]мj,2.KujnG#JX2$U;RU/ Þ7FұB=ƣ +N ,?x|ga{"zXrn z=A1 `VoLG%U<{TN#_ZD*A G]#"{nU=|}|OOnهfɋp؇giN`$!.^ǜ \Wa1MD(> qY?m,+W䋉^a N/883XcdH%/v9 + =/zo+rfOY8ϋ%DD+R.'? [yיeVzmᶛ†`X;q97=YZXꭂt"cz)u t'BdW|( (o~x1);-9V'&h vr{:0"_2*(s@ꕴ^ yGEO wD=cg]U-jmifBbu?#BJ{]LJ6z>m<5ݕuX;VBc*=*[W4D}Q_jR[_a#}~x +6l@ *>|iՓZRD֜Մ]l6 +0Bras.)2,nqu6K0 p6S>f +_UaħfR{EPk;H4G_J ӌQy}1{Zt-{ݦ: ǮB63"&(E2}􉼻t9;IQHz} 9gԒ_?b1V0v=u$ZT|8,LFTMX!mF9єAoQtR91aFIp:QOtg9u>+bm-oG7f4jI+Z6кrA+?/F(\SOu13#_ @ö!_wd_2&YOiN %J[Jd%:I@ 0>I磌߮9LB48#>OjDcli}Y@@{kp,cMd.rd=0n>/` dθ1yNe$æтJ;ͨWB؅1AP<2۷0.zчvŰ +{ qמЀ}bZG{Uc+ +߿ID›` G܇6emS$x& .c;ɑxpwr4v dKӈ oAyE(Y4Lngћ5Õ +TZ_Vm[@ E'C%84R?jс8_UI +;vwE@T{Ҝ*60BFŊx"w>X02o `f@%hykmeQC=f;;Gq/}n4a̤N>PtXVR}*zʈ߱#kMll*p}Ppwk2qXJ]R;0ao_Q&qY40EuYaʊ9C:{"D*rBNjňl{Ye5U *qYv*72z_6BUZt%L$騟9ՖD>cOK-H唱=`.0|=0rF2屯~w!m ?q)dLY?Ӕbm@Ak{| Z@w#PX@)Fp.8g +w"yF]Qfs_H??m~GHp2NCD9; ;O*給"5g5+U!8p4>?h#.P*|Sq'i-3!x<.AjI8QwăF> 5TJBG38@m9gszZ-Vޑ$JP3 ȴ}:5]Ug)_0 d5MQ9;93<>duC~*^+dXg,i4,Z-Ɔȕ"i a*7:6j+`ds K 3R*oW raC`p~m:ߴXJ:X$~D`"f{6ذf_is9.zVW#MSzU9&[ ٦ҼUpe2xJ7c h%q]P^zMjC`0jyԋy,aGM3mdú atWD;7Lזok^rj0V}@E8sB~,54"-=p,^WHw/:e .Z +fABuӢ( GPU6N'U<1m/04Ugf w16RhfGq屌cW {G[]+ "ЧIdWE`U!nr@`@VܳH;FvaFVPYv@{ +9:8h >߾kqDF]3C 4QzQg2": X}9Dκh?xzQ8| +<:A_hxRg>FUZ}"j8(ʪUb?a2,7Gab*0/eJ^8G1< {lGyloww6>R}i¯ҽeE|c7;`,2*|RNO֬9*)#Z{%@LrVWKxou$?hy7ՋdP+7\W筫<4]얨yZ*tenVׄ橘~ZUU Ę4mhBȰ]jc=?6) }ܣaz;2>/f8jȚe,޲IʷS5e DVD}ቆݧu鹢b>KT!*ܐMf$]U-8>LG[1r*@ it?D=v?)Ki6u:8Ħ7@N*nF9 +{Oo$ڋ2A2mqAӨH` CYPKkX5'N9BCrCf|[aZv48X 1c>#u{U+ +;  +/"-l b33Qzg9g,MȬ Atި@vZhbݞ4I*f%GW~zu=SVݱ'r1a 73Ne@t1mNM[zj^ k(Dz`|- ׆^ 1O \paJVq/OG[uM ȓ#̪K(x=H՚Q#lz kKTIۨNJRxaFA o# 3ٮD6 pC|dʓb1F+#S_W[Z1fHQ49|క[) Gg< k"J]yrǏ(,Vs<|36B8g_$\wJAZRp- D"' ,֍~ s ClD7wVO>#4 4?^/Rzy 7Ĝ>7c?I/mm&93`Ajr3 ULɜhʦ<2Na5(:/CoDyzN.?ke:E+B-tSԤJ9 Jɨٟ(:?DiE9ۊ|"z{4!^l"Y ok)}l*֑?^s;K"Fh} U w!Ժ[_AVSp:QnTkJ~ |qlrY@wGBͭ\BX?殷{2'Nz=)bF鸢{?&GL& +@H2E?!#fkR[~KH +4ˎjz"6~{!+6"ï?^#_ +-_9;?%9G]؆<0vi][֐quF:=ln.݈X+uTCaEfDC 2?Wu{nKƞDl}v(*7>TK1(ZPVS-iL8 lk[BkN\( I wcf&g덻#"k;͵C=J MTE;]_ߏE'_Zz4wSSa`1F}-&(>'D蠍CN5m: _R7A&:%oylHuj}/#7c3{ Rej= +tbO gjTy^[ĪNiY_ 1JnŞE;kwO&_ݑ͈!˔{ýZ>5Qx2h&5Y8IJ0^!W.*]47`7ua2lRmn A0G`G,Ta}=> `*TU +&>#){~E%5Y+iYL2@?D=0-. h"|LdK  +ː)vv&xV6k]Pl/W BvC~hDWp0rK7)vo*06exvGOGy|>8l4h"v'N~Ib@ GTq"#42 z >{؈Y+۵Tm~R=Qv_- +M\Hd2ˊ84?= ZĠw +-e;{Rn(aXDȑfWaZ\TMn#Ą |yn0m_k4d ?Dȩ06.oƿ7J o +$̧'z6M%ՉF׃*n 8 K'ALėQ5$z0C̉d2,F[\zNT#><}`i- a(XV=fytnJ1ًbJAccF4:,8[ͮS(BX;§z1w# wb{\ͼ6O%z 2.tX{,?=1?UꆑfJlg/̔h[[U |SzpVw/ 2pr+/`?쟴-\d.C{BjT+cu~% h01b=WSU46i +F)PP8N-pps{fqk +bHg[]H+bQ#|e]3MY`UG}nkʦrg.5Y#_S}a3l=>OD9V8&ψ}qXn-o:6ELCm975~zg#7|p_-3x8ª+\;lW\.ìiΠ^b[]'C ^cpL?5:qNh.[k*Pܭ=Z[%Cy Os/]}ku~n =l-bqX[~žSU~،7кs=p>m~1%.!kn=30Ah?'0X+؈pt9Pxs|E_T1zQnPs/P9 l<@5[,uO5Ugk^0E(`B R|y!oqZkС& +@@OI/:ױQBTuPf=/\R.zz yDi[vǙ7¨+R<~>.Ưwǿz??߿o?b??O߯ 0EiSpFhYieas + +kS`ɻ *EDw:\n%F +yZWU&nmgXQY^lzO;DPW+GlPޢDUYWABqD1Z-r g[{!ʕ˜OQP6='75ʔEʾk#mD+OώN!u{s?'r(Vw".kU_|ծD@VX#Bΐsf \I ^ /y(uQK? +<34+C ` ºP"@ .+XieW4_EȻrO^^Zۖl;_d}USU1XR~4;.2wʺ:ѩs4HX +/D$0KEBҭXHgu}U6EihJǣJ""b-ꝩ;X.rjYÌWLGZbz,`VfmX?U,.V)8QEtX{UU&T+?G`So j|=ʒ"Gh ]zGxvw<Q9wѹ?lHHQ* 52Xok8] X0\EϼE2/^B`gH$?"T۷ڦu`f=,ZU{2!uTT].-w3:xPd R Ц?#nw"|6t_'@jjjZJ|ȩ#cG?HJxc13# +'3V7PlAG1~8H{; WēH˶n ԞZI#52&%7bfƃ)6MS(u;#u=G^#槗=8Q3#a +U7گnI|g攧0 ڈ0h +{d8>*hrbȀ&j1٣vxEknȒzXFut~8fK3d$2G:K+榅ODC˨`%Db"ɑ \KCT$UzvozBչSPz0㑵{ P*3'݄_lM2 y2T@\77^Fxa/ן2ʇ`N w@\aЈ^uJkr> +Gp &0pohyDtZFH`D4)y6-*~PvBC:ρyVZ_@ErSSں(C7Al;牏>bI XW-U}aw5)U)6\:Y4J} Qˀha8%z -Q aگ2QD+,c#W%`y80ho +WXe@eDF >M:u8^t IѠwU"\ߕ7WQ*'N} É8}E)br^U(+ZtďAĹ q*ՔM~lJ ax')j,f rMNwV +Jbe~||hѭT(1>. "EZ o ' 8FMp;MP5Ei:uNmՙwWw˽V"ڬ`Ski(ЦOq;[)J֫j_3mMۦC*znܾ6M"3JN ɧ+*8} (^E-St]b\HSpEmIox^ݜYL _9Mr>1y 9 DKjv9[1nVVMylAÁalAsTLjٵ;\)o3|:\;+\/ssD١-"T̛MkVm8qa%.64,DaDε4;G앫\W/@t[7wױw +endstream endobj 17 0 obj <>stream +ǒCLBF_„kmHmCzZ9ߤ- \&ǡ%;pcvklz׮RZC@%8k3PU&qXqkO1Խ݃miQ5o!oÐ,wɽ25d, +j/F_EFzj +kF!IC7E҉MlzT\*22DMWWXfW){pw#}֣H(BE5hO\G ٷCĞ2?EԪNCی9@ox"4ξcOuG눪" 0 ]~,\h~8*`Po"ax^S#Sb†ϩ cc`ed@{^ K*㧓>uþ M*z?Vȍ8#a>x{`+ "k ],Q1dž.! PVDY&6c4 Z"щ|g,53zuwh@(e6l)}Sz U+/󺬟7<*知2Oާv3bRAM7OǙ>XԟW#kuz4 Xmj|Fօ1j}[;Н1^5Z?D?ӖTTָ_C=>"=hLc-dVg0iCx%Vao{،Tsyu={4.sڥ< \@?Dr(J)[)۝:WgGv^$TiZ6߻E@M & Md q;Zdr;} p=h%Lzn@zƈ7 h}K>bG`2/ P%7tbNHRo ;t;#9Κb ]8KIQ7ğ8ӆSĥBr~} Cvg&lu0ϗ~21Qp`郍(*;TE}%/VӰ(<|O>G1RO\OֳiOGgwfL2?ci!r1la5iͮI椛i#]iǬmX D}/Pӳ-tM!/rm~T@$ˑG9z݀S!^Nc#{XZ.U5ց.ً+<>v8;sirLLz|5+VFTZ$[ Y:б +`t K+㊒~".^NIq]q)ܭuK"R<îDx?4jVrVa8?A@Lw i t&ݯ#K=+~>UF_CjfuD'{*P.1יa@ٮ =5.s¨os(D 'vjgXc[sjeo8QQ¦^ypSW W bv<.g^%MY,Rà:vuc'S >{TT 2X{x!IO%Mb?,:K`H0͍&6&VTUecNYyƱx&^i&j 0)vz@ǿ攘+cDt9hN ?(N!7_xKpFS[&.b8=RR'WO=wnkeqwHIUۆg,kBQD7})"{SaC|3G05 ,ӕxdZ[Bnݐֿ ŠS 2 ݫ9Ց*-sȜ "0ʉi'-`L'PGn emni/+[sߣ7X!o_`cW0[:LW5 I K}Fdp\LyqZ6z{{jFDb^5%BȺ-E 4Zz +3T8UW'0/v.Jq(EU7*OSq2&ą4h%@KK<izGqg(&@S0$:O,4|K|nooʚ#?/3Q pOS-jF C8z"6>)?䯿^!~ +F3?D}G3٩s@(/W[ʬ`*~}?kvXwrju 57n;fuj}Z!iZԱq {OBOƒ{ 2`(Uƅr1n/ E9V(AWUMiBEelH))dٽtuP?D\ c<3(+^d`9@:S+CB4+{HS+JaT3ȷW+ΓUi'DW"@Ưs{K;;'jo 2O)e 7PHGE_;x ((&αȌq87l-bQx AQe9Q#O {P)?hN=*)*.n#Dn#Y") |Өd]BEy{yxUнX { k;k?]o㯧;a )h@K gG]"{օ\Ywg*N2SecK@ Yy9d˽?@PaȋPەk s 8U a4p֠G(zJ#ΐuZHש"B+ZpXcM t-+Vd-9^)/Gt nj\E#PzǧMa"5/c DúvW}F3$@+!\Wj1n=aW~<]Pݽ뾇sE(2 6SQ朮?mψ."5lT%&~3BzsMPV㛆o> j>LU~Mx6ʌQ(9MT+B9f5p̷L ++;fR4-B ͆?W[EuǕl]ҌAB>Be@(` ϔ-aM5aRU΁p%!/ůtǘ#_Flp z/OfX:zBcHv`EQ).k6[[q'A }3N=(-1??#{;q:?Pz"R*S|Wtjj^!_ qlBefre8K@fӊf~FҠH`73؟jGǥXf{jk;bVU@TSGhܨʘ޵ZYZT)Vhu4ZI@hJ(]6|8(.^0^1+`E#Bxw7 r=RkCej*NNebY5c/sxBi7zZe ފ޶_#rm~[2KcH}jCkyԧ#a( FL1";F_f 9 cDz1u8Ę[B-9VD"W},|j B~]Qw;Y+Ƃݥ^=б*3NI$X@^+BO_͍x%\gͯ?l:8秃9W-5G>P@.v]Z uAg\"뇇)@0@01B=U,v `|ӕ.}%<21"F յ==1kE6LM98Do?yC}|n dk"aZF}X i#$nұm!iș%w8N^O`D (`1iE_Lfh2s &P./U-Ѵ~" *#2/8Dz&MU?$PV=WrFLK1QBl:~k1NJf,ӽj-VVY'm ;_RßU@׫X=l|LTb'ZiFsNKO맬U,u\>-v6@_w6wO@6%Z9 Uo:G" ŭ2ۙ-r͘f^eϵD^GJ\l"/w8`f0j+TJK|ի CG +p(Rcfz5#uwU9p9t䀊QH$*!!G2q>ya;}[㞱y5 sQP=MXh ڥ#BBńCɅ3wn\ +`frGZovJBPt4j}C@puԦe$_|EW9i^G jYR8}|pHe'SAq7 Y*:zmJUxp)C@t+S{jxvaQQzMRfݱZd+)HljO{}+x/F0 с3hbmܵuX;rO%r_;ٕsT8zE`8>-?m LŰ]R4%C8 u{AJ.y@WL?8x\VXveqk`:b/ƺ=>cøMloXHszܱy2eȓM82㌘0-gg VHWm=g5IU-[I~}&q f3?\f&-]%ةۼ__PڶS3^ev$u]8LK/KɗtE!_$m7Qs`JOZ 9A[*cG0"T3 hj. +.U/p#xNTG1.?_D0 R]\1nu:b@aĢN +N<΢-؜RGLBpXwX<:;xwKGt,^(-AE؎{]dž鄤gz׻x•"5~3x@NM`:nDH[3]7WK!U7~}p_25ƹ +he75} CfGRXRP

ϩ*ӌGwQnŀa[KZȔik; yB3ϛk9TB<'2䨴wSʁ +@6Ti['nl\;A#z0uvȋBNyJ8&gWeܤ:xپRߌQ2[ȶ]W +sϬv0PiiViA^M_>8 fp !߮uvf% GW ^?Fll9+q[t-uqW蠳}JM2\ߠqJּ<Ҡ^W|L6} ŕ5&K[;ߤ8ajUzhx7_K+H:s=\PݴVBɭɬ *Y2Ƚi +o0 amP8*9,hnKԭ!0~Jh +k,"K|8r*ĀW W7A͘3_ZSDFyZ([X6ܧ{LTlCB1"Ͷ S% + mP/j+U j?Vd c]kuqBL9S~UOpr7YfcDf7d摹% +g?Aa<"Us|PQh+HY_'5Diq`ԕYkB?^$t %-LڤqL+=0GWXkN z@Nc,@u܅28 6.CoRЩ륏F=,2jU7n(VbxVf5ԧpN_n.$VZP"6xIj*pj?PW/I6]LYӭlhK U\S ,{Xt21[_f,"@:P@Ȩ,m N6XsB`h]4u F1c4Tq6b>xSJ kGhJ~;f x9sûplȔ3蹖MLi]l"FDi#v\9)!A*&~8lt Po ,k.huU $x$ G0[ۜfqh[mj4Кs(aJPA9]X)12ZلfE o!"hMDDuA`}?KxpD/0s˹G ^%̓@ʌ¹QF^-#v҂BE ӪP禡: +,pfvp1KW18 +L%M #"Hb#0} +bB3((/d f-}a+Se +Fry94-4֍cǎ_lVRN +X@60QS1F¯+k8p;8 |CcCڥB(,,TV!Nzy d=GڥVE yaP׊L)Z9S5g@>155iC/#ăAgWfvULv9(33@N,΂L%dNPOny@[p `_|J%DIJtA9 M:,]`hF d~άJZS֨Y*QVX>^Uf2'i#7Cn*S ,Xv3Wf +{9Ӌ!G7XN>C%J;j1$#頓Y,yrh{CJʼn`"}g`77٥&PN(gv0Cu5<}5#S,|Kce>C+h<'aO}A +qoR ` c &Bw2S荒z3c01PB!c +n!F4(؛rpPXɥafYi55;u(xj9Nv(W6"nM-=%zXl+z$ VjoqMp.f7%S{Dha;8]"B1`рQKؖ EZ0gJ~dtXTMةO#WeƚRk~ޤsy9x"@U4kwS-"'3,;x:܁ +Z@ ٸ3Z7~l5_gM,xޥ"n.I11! 襓Q4jJh=6k-0ВnTClZVe"y5$`>.Ў5J4j6 bL-BnY82XSq/]uqgzs #2m2Ap?-lG Sc̜B>$-y+ 𔅕X?r$1N9jceW@Jlhxav4_~qrX۩=UH -~u͎îPAaAsl?^]YSid1rn @7-ݖRQEc #[ֈQV`1vTR s80@*>KʧԈZٱ~A^Q1bQ^=uJTq&zO:dTh~*|P.Jk fNm=ssH~ЕWغꀱ87&aY"-+4I=sa#2EtM > PJvƒܑ/p}X&*2w"{n褝sD2(j#H\3Ku| + bD*x\f; d&S +Rg.y^QZk$[jOȗX#I S +Ȳ]4|NA cH\ö %q5ϱԃ7ћ?5 ´)LJ/azVfG<ˀ \ǹ,$"|kO?dH1u9|h;'e9a1OAsELF(X9Y@ D?x\DBr)jXP L/D/NTRe{6Ub>/rьO%]ul[`fN0,mnO66PL___6"="Č5"[QH+4H-l[ׅך܏|$"? ‘8pWK-flU4(JP7E2Mfgy]>`WD)KJnЖX +4SF%69 |ZUDҜ_Ψ0'KNÈ_\5jm0?ahg&:EʪѠc!N%HX6Hcxk 4GCoTlGdn [!^"`S쑷8Jn[^1)9A_͐_b9$ߴtK[3g9i"Z7 SKuԹ/ԥd>X|ğN~*ŋ;HjAf[R |nx8m9o9`jjFGzn"1ߎf؋KVCګ90Xܑ%C +6ztC"B?1vU #lS<ɕؾeU,F;xLJf۟@ZP)6聒方'2NeZ'˦}XJNy}ˣĜ)ҜVB0-P`h1zEP=7ncE~hT>#1.?FFۘHAh'*|@9Z83G)'Z@8O偰D}*gac ` ]k7-x Z03 |w-3_$; aư0IY"wap7zTxٻ~69Q4 +=,YqOO#4V5vz$m#8/[D&"޷ \lt"TUJA^kU3"BB" 'H:`$F EX ^^& -JwKc4(9ba&a`H@4#E qTXAPiaԂ)J|SqS ufv9FҸ"}^1WF]y +M 9WN.2Kf˼U^GW u1ȝ]sm;G$bxrc`Vf,9!e,3ሥչ}?  8!ê ,v դMia.+LxwWŎ! J۹ށl 0kgǑ M[o3> @%Tv)2@}c4BbgzG"\ |%ħ0("2WlSg36n@%`,  +F8+o9-%d F2ڶfz4DKifu"*D\*FqP#Aӂ+nŖ}HlϦ:rgA1yߘ#,6rM\C#+ Tu!rvraL&k2$L#pܑKFa3@Lt ʪ5m꯬0*8ȧ(vʻS ҥh"c}p!>$BCא-ƶ+bYJzTk鬩P~s^RbWB! ݨT% +-o',#>7bkUHp( +,97­c 51)]x֊v{Gggݑ zx*&9Ho/#{3~<vz)u{:k$6`LңqI n~)z0SZEOm/G90ؼKf6uRh5z;!}n1`r.0s@9 +@E_``B&!*SLQ 77z0A`]IzcZaа#|D ~*HR.9qH?= k`d%puk )Eb|5YUyDxV5N("c˴t#濒YLos &R.}~01IXjFѝ`P@'ueP>-CP]uQ;N,CXoѕ@RnN +r 3Pnd-āỆ9A$K=C+YEM#$ 8M':džbۃhvN+X|tv>nw[ǦX` =?@j~-pKu[~ %%aCSiɐ~y Fvh + BJH7U<2džZ/0Bd/d81ZԮ"L$sBmR&j/t|+V6qx`zPӵ?h%*ٻl5C Udz67+U̸D]6p,qN8aAAȴAGun,:(hb}ܰ/ǜkQa]B+1QxV9 +Fuϴ En)ݰs [Vg捤aDQc-pj*E a@7cݜ䆠 :Jh[e3s b͑e› 1a,I =eT 30i@xwP'4T@p{܌NǸBH Fklx- +jy;@̚]N7׳+P`.)d'csctw/ /5)ܓI6=y"#Fcy¼ jbHbT + +$C%_)^" +B-^̜ߡ>}1pH놃<w_o3=E<Z[ M>h͂VHb=,zq H9G\G|P17;-k7N%ϔ;<ۅu!_8};lDQ!J"Pꈫq\"'d.2뾧s ++mW ;#sW iH"%B0Л +԰B80&VrlI +s~%4v"kx;~⩩"*\5{c&yZ8'#iqƇ.Gll5 RE3tzUЕKDPsum菝!s -D 97x0Peީ*O6OH.nr}Uchc3(>JHE49>Ƙ|k5& +p񟞔lP=ԇ▌ P&.a߇+ol b>DȳC^tk |G8 lP:󾪡kAIV$˨F8c~:AD;*#hsľf-A$%$?l>$e=bnJ5Me aS($ݎ[-mk^+ _Ev])B-_lS֦&VStR6d}0 +%ATב,uk1d}ûCxox19? 0"Pxk+olgl`@n8&Pf}N\I0\}=jAnВ )o–LrkP:|Tނ5 +@;8@n'Le}&\ܢM/\/`1@o~m5Fd{PIbS#b*U#=ϕHA3 H/ h-=KkJ遉$Ϣ6᰿q)5VJܔuvI K-*tra{4ߏk|kʰn2~lLUEE72k+s``F8d~ɭ=ohbf5d7A`J?ښ}R[tthlmYЏ`y筇ku`=6KwmXϱ՞Nr %O5vMAYBFDB%q;[uTf;Sע:ANi,Uk.-64UFf^e{ta;2uéAn@J\cNq;wW"D$ޠ*krOnM->=H6ܬ}|Fg[LW!3Jc?_OAY߃LGmx7ڼaV  q)tum̨[۹V{GI}6k;U#+#z !꺀v﯅}!k *!9h"y!kvnOeSw_ie4骶HYw}~nBhWqo={ʞjCE4 :5 mTMasWć0n%nW% `'O3IPQPj"GXۮ5Z|-0Y_ih|BѹacuWFLϫS:x ? az`|P7mc8HrV6 H4jHε)˩Z`ƪўs܁W V%0 mbT"pv>6!;e_ۍC5hIu";u1%MQGATlޱA(֌CZ ^SW)l@:03V2 *)n@_M!xxOOM_ +ㆣE ^g墼 +Z`h&0QRZ;6T<t7qM`OF >FKE05|IHa?4kk;kCF#=N'0b%5:UeY"j$"=BaY -˗FڤDչ)8=FaH䂬9oID}uZ> ;S Чx*z2h@tsĔX3/Ni? S݁B<+:R VYALrg^s%K$tijQi^;[c#Q`9!].kq 1nɆfoI#\a'~VG@.nE +3I{p=Pۑj$+}E\pЏ;QGDLSI(ؿ,Sl2u %+ J_-FIuw=y}x{ Rxu;\qD$Z( ӣQE.SR:" N6LG(B.ʎT8֡Ş܍!HTnzkQTh~젱^D?mp=Qf% >5zmk +ls/Eæ\/= uB=k&|!3hF1M,!-6CNv--li#ˆ@Ɖ\1 3)9toc@|NA|-\_aTWm Ky}صlE3FzmOwº~R[iG؇}5]v G(CՌ1ߺ0k1ܤ'^ hEϠz yzs?%'sS\pA_/ E*#eT4a&Q-Ά^KI %K!O]GfxObkƀ~.]D`$QxGrd9 +Mxj}]ţHu8$;x [Z˥ĕPO}0O +eE`^3Dԃ41=ckc|j N#p3੿ˉDaEJ\(87#b1b\ȧ5;);6bk@yAM~=ׁZz(d3yI+<)kz@g(B;\&h3= =_D00@0cdvs>lIbbt@nSco.= g y Duu|*! +G2 @ݐQr eU8*OQ֗QrS雐! +>d8-FJ 0u~ %$K1)q_ZfFf+og#BrC|KD pn=N5P Q.4b +3X"sl~U&"u37QMČ.Ϗu&y/>ExJZIM_1l=5[,NP芌1qa7 +c>o͕|Qv﫡+~LˡG1=!DdxߺVbt䷬sch/B 7ThKG` D0v1x(_(I~Fx1 +LJbHp=PƴQF9'5. &ג9LVCk4K[L6ȿ|<,xڈ MJ(z}+ 8x2nPf.$KY]爵\63% q100 9r>y)d,wpi\FQzR8;Cl c[д9$4 ]oN j pHKq Y [(:P(G25G"ˢ +(Ƥ0X +=lbYH崂zE| +#vP1;:,["~ Ko~ʵ:Xk%()n/| u۴J+`v9W6. :gL' #Z E2#lN+%Cb cK. $ZE! ~.4A˘*(hQrH~AI{=C 8 )ŐzF% B/~W3Cq(8َ_s‘cS 1qpFB$iV^yG wtS/z3NpDv s\+R A?' : +քҪ7Sw[O:<ްz5VuU5^ HܺbP$kj4j%"RH傠q@렇40A@ ; !bC~M6`3k7)Ϙ ;Q}.-Irt+-4$A!jLF0"9^GP%٢AFtC.iDN 3$=b dӵ>uƃ]i)R2GUsu_5(}L&"ph@aOAn-Tz&[gZSAV]Ŋ,hamX#a$aQwbN}=,z晴.3c1a=.ɉ_Ƕ#RwLcb>$u:՛23+"ܨ:(,楊OFm> +Hm~_NGZ^?ǟ:Fڪcac$d`)5Wbڏ܄+;)=Zkit\[;1~0, 2 cnsk~-<бP!@& /[hQ+5pz}Sh7a-t-ztQvFkGHY+{.Svњ7e[qgBN5 ?}GZґL9|#pJ)9|USӉ!a-ת%8yT)33Dt`V;SbSTUgIJ9K,O {[b,\5a2P[s +ñF{| !#D +:-7Jڊ3:[0rY iֆc=N ;ӠZ%m_Eú3;BӞҫaz*$Ùhɦ>ky{cQUƛ5Ժ"JifF2HkC.vw5wz׾@;Z܎kPJâ|,VVHr֎@Qn(Vᰄ:K]!HX%Y% MU +#3>aAsi@ 5¬ !ja pN j\V154W`j[#*= 5eWq<ZoJD'-fCŴix:HHIii}?@$`ǂ*vE[QCZ/-L։TSThU@RM= ]C( +_ulgh|*8IN?y]ఢga*#t<$?83e[,ש>Sg/ojCwu3<ʫrDz>TJ25Xz%C~{9ϭ^5e.BJeRpF^ + Qpdz%l<}2Fh< ԣ7x"Rz\8SX>,Nwx*4k< 9)]D]K4[mc!Gf{Tg-gh{e)5w +EeA&->8L$CAt"܍DxN'!rtDP +rs ܹxuL?U{JR%)K=B*T~&IhP$]}`u䉄ւKt4-T;VM;y~ +#8-浻#NWI5V/ 3AXw(j( . D>~VfB19Cu+"Bkgb'9wIJ +v]zO`o|`kPlt@qS`C@䐑78?prI_ <xAD葀<%$?0h8Cz $΀"ogEn)Pĺmt$܉0\f}fǀeͭd8nu,!YBSٚ g6pt /i#f0ز (Qp Ty@( +ֲ+C1t%uѩZ$LPVCSOz!;XJ4pIs ;r@dε9FY "TSxO: +-(ht׷Jqdb;PZCj7X߮RhM]Ҕ;O m`b-azk>p'k:4ѵG6Gp d~}wZ+o$iQ 1mNS&Pxt"}ݞЩDˈH9-+ fÈ!_AD5PTvSKKJ_"Vzkk  +2["Bh`(,mxhI^Ew |50-o ,ChIfpLJhADXfD~?Mx3wEk_c0YO +@z`ףm*,g֣Bl9v`,`MQe,=Y `atPCZղeuY3vͅv#)#W5>k"OlO ;IcCB̓%V0;&g ,U1_kGx$]KTnPyèza) ++ow5cSC&c+q=J#9{0Sq9eqv@֙FW%njCU9,K ZkFd9<. -z|i(/5 b*WA8dc|yc +-0dVYaC8Zઓш6aHb0Uu \9fD+G F"<`%P7[7) +30G .*0T_?>3JJ&5C4~7C+b%e`y h8N[la\60,61XVL3XbP.zHT1U|!MsT@FQTEBiCwBݕƤ!-NE _լu͋p6 -EMH*PZLŷN +!w8CKK=..\i`:_3o-Gp׏ADCvj.gI8 +h$1biZcqj:=(um|Rmu DdbYC5illErcl>cb'B!2Ж>R25NrM54%:OƔ:~W&NѢy-Y|lr\Jv`V0 YJ V3ZX嫮O-CխsC&K;_fy:,P>&vsp]kI,Be(p %Mâ:2|TMe0$0xp ȠӶ&IRS-_Euy9)\5B+P%#uky%[d@Zc4MQpa|Fn.N8 !>DkP"(関~É3cLSAc+iºbDIP?/ Bp2 aQc)XE\s;W|GJ8Ԋ?}]~!0Rͯ܂kzkuhج+ro~Q|H$<ZSC] :/~E',Y8gE5"<~>WzA )-KB.9| \8G1p$v^z(Cj-i˒*0H%>| Ub .ML 9p:ʨcұWs .r<۲^gf{?ĸ` W=hw3Z^ +6{8'K**Y[cZǎ&mw_Ęv>/xўCbl NbGr}:C{3fstp?@izP`X%(Z"(} \cȕy}ɰz?PTEVY[-o ZwҚY,uv,|0_ -fLMQtņ'dW; SI +ku,@V! +!["Sd]6߾ +Xz*S߹v.@R°tvoX::Ik,KսX:HKb'&mKw!¢=@cTﵫXC5MUёH>ZQNn\t'&N{*6"e /pMt$9+s T/z٭iOяL([W>GQN??#3ON2~Сe!A+aQyñU[p)У*&XOcCdif++B +H7s:5>?ՠ s ?彙K-DArC*g3@!]G.݅`v-#ˠ| %Y5%5: ,K8BacZ\Gzh9[<" +Ttk2_#>d !+Cle)vd]%Mt}cY!LJ4SU)$>&W` +h/*nqzNiJCSP|H%)0HC3̻3CE)*3fNB2hݠ~aZ`㡊ⷬWf" +Rtr(w i.\b:a4V@- So +d>DDg&WY |q1" 7pa)5-}@/"~99OV1f]7 %Y w*6@) lDgZ +Y %mW*ةG#&$w*Vkk@@tYF PT\ݘt+d-| +;>.-V$=_JcT~=P`fZ>+Q@Z5b=lP7R$|篗cX?ne&}FF WQ>Xwƹr7dYkDD71cRzBNiMG|.N:b8&J_Te?uDW _;k i@2~rJWp EaG.gѦ9$b22X!*97GczD3Z5gt"lcP4O׵փM]r/N5*3&jeoA#Cؕe\L/wĪЪQN )]|"c:(P*p93 X`x`_!|`eR9*q=ɤ ~*1Z{m#@Vʕ &aPt+XTT66T\=ƚvyFFHg9'EnU +G]^4>Uu_HB?!YC)d+,'s*MRZLMO ř +?~|pXM@|Oh,\) z0U% aM"vċ¢77iUIaED9(A 0F*xRz!1 +)fFbB :83k픁q~\*g lDx#1 # +kJ=qF!6P7- +yB v g'qIQIddD[r/_6ySAY1XÓVb:}%aQբPdё(MxD6ttʀUQ"DR%#V06BAB㤍-]la}*>Ađo"wհ.k3Lw$lE-HxH/GX[8lwGqĀuGřN9b%۬9ب!}osC%A9Jwٙzq>qk{u[>ŪF=P/^xo aɌSJYƋgutl4B0RKۄnVCQTPB~@ i& ً. ylJ Ku}0$+᪖TФj߽1 ɤPW:45vS'|fqj;̟X,բ-.Q- 9 +h0740oGJŕ*`2 gN(8ulRmmJ>$.ɺphivx;:jIAZBtҍqDw +H o?;KzI0@b M#7ٶhO % +יҶ}9aF +2d)se?BPe|t-X-4F(O4z~&yԅ7fcѱ@b d'9G(7Zؙ$@ЈY׋;,gӭO+D! &Rgw]gP5p;K-[}%Rg k= 4uou6{ֆr*1%_k@RǔKeS |_C>ᗦ +b-U/\쩲Rwn`sU*N<`v+UP@G3:r0bS@/Z/(Q,2HA}n݌>PX@)=UQV.n +i|>9ݶSc˜Wdr׹3 [NAy . qz5xpƴV$nA!<!œB଍_DMu?H4J⑤>;fL%mHupt6%A`gPAZyw,G|"w,`4KN5ϭxc#ncB0ռVbKVCz gg R†xr؟_%^ g1Z<%d qioԕAdGIۈ +cPRϽUST1=z[oe +7M.{I7s]~-Md<Ӻ]4O5?olϰTFD~!\Y;܁dAD]u +9k=?Y %lCM32O '/۹z|6,&hTBnA:ajL&5UgT| {d#׊;h#iŝϥy؟T{oZy d̢Lƺ8)iņ\ovi+\=O X&*>"ƊВ&IX#I 2eA;9hY34A`CZdFpB&E!{ʰ&BUH;T>03Q"UUm pB.`4G*VիXx2%{Cf~B{lcC&A|83M$ z5iY  +0ۖH + 3G"r %|g[t d%q7d@Ubs*! b"1SH~ ISˁ9+~s)oxA;k4hF~NZ+))bFG:z[74rHe2G#Esa93k{zlW fMHJQ';Y^g9 v- ׿ːl-J~/^%9'.QҨtE:~;bDDבƎ 34m,Q ^>ޒ2`!x](< o}peߢQbb"q=tbvhDI{n^(2f%j}%sإ%i"9_1 +Vk '5:P-pGeXͶD x9C/fUA-fvf2\C @#0q˨Aw +b聇c~,՟%βuB JYZWt/8iWPy_hc,<販DkS:)fúu䌲M`w~sj [ߞ4 ! a:)BC:@*V .lIIt>70w|HIhձ򭲿*:sUتRjI'hNu"iR>7/3QSDۊq-iǭ)܂ +zitloiWqA4} 5V|eb:zrNp%7Ef4k +k149`wpG#ZБDƩ һ9+Щ}S:BS!" %qp FΐEERHx:+D70,6h7=@ 0Bi}FbHNi*.;OVj6}4D7:lՈBU/!"h-XSDIqr0s1xa&(3:tPl0U7 W"Fxb쳲V*b>`(L[Ti/>5}Gks#d0c@=lgZLӃ -{87xRۢ3̥?D? uhG 5AeVunrf憪wHQڜ[|ukaeџ˛60J7 SO{ +ݨ"9 Q5N9^VZ}=}L!= 󐴈)v[ + BPnc6}e8vϲ#ONŲ hHoE!PDpwuw|os$Gd,Rva #鄸!%0:j뤢[QT4xHFAlc~mO;N^4iebE8쇠zI]2 z7@kGÐgScz]b>x eWe_x 42?L0,Vy}Cyĉ5Uݠ+G09VD.&!DSDQ9%qA:RW-Ng*@bRc!B }r +lׁ yJ7{#JO'%qWE]*kz;vW\UCKV{>`9k<)rB_"o942]stGRsdZB̖g?Q!% \:0ehˎLV9ToA\E.Gإ4_('A?OCO"4)q +H4\^D\\?P1 BWYڐSY?yxZEB~+K~a7^%)A\F\yZ/nYF4S{\#(bI8RxۂRZ/\ʖR|ynϼuI@HG`& +oGZ@#8QqR>T<*y^_C} 3 @DKyc*YxAFl^=GČ;BNOaB4:NkC+ws+ YVuFgkŦaԭzRQ}//_Ys'r~/o:~W?o~ojǾ_㟯_"W~Ϳ?cWڵ\~RϞگ?Mv\;~|sv׿,_w_A/j=?/r7w[6c_~}W~[??l=ο!'_{gV^g 3ֈ/KR'>Çx^__ABTZbA Цp'^3҄ڞd`V\o=lM9O** 26{J( a!+1Cx^PԧW!Pk0 F)o,#v׷)v,?t?87H*p-^?6f6uBd,)ćc{⠳{B>N<>r$׌s:qNhqwN9WL s +tg ŇEic+m &Dh=;ׇp&a]~Ïx>]rׯ{d>|{ N-| B;*a)>1k^c{];VWo/OwgW}Ț>/9L]+=|&\j8鏟+rd7˙rY%snicK)H IJ"|>Le≸XWx,g]~. hV"hvK ԗz_Z~8T3,DZ}0|ztrO|dQ+Q#v*Y>=x]>,I趀\Fn񖀜1S)|[X;ʣTaA<; 4/tbS^X)js(`+|q>_q[,T@˿35Sx)$c3LI\h0&W,TIRqS$ʅ"Ey\?W`;x|Lqǹz<K$##*IauYO2Jx._{LS&r Ǐ&<Lǰ!U8bQ&2-goF=LJQ1H2R{h~GAk CVm/-(z'uhnZ$nS~'E=y/־wإNke +Ya+߇SAEO7ӚJn4IL#a&F4Q(X!DcYIQSӲH+w-"%#{8#Q7=B L[T]JDCBj^ԩ9 c"<\0Q95(ё/|R#xjR]iUCUjp6-ȭvbI֗e[HwZwqQ^{z;N"KFTV+$-'YaW|Ոxw>O__-@iDL#$ +|F>e zA%=`R:$RJ*F[8N{ȧD;|25 +j˜ѽ_ˑc[5K!YVX8|%E纱Dw1 +#Ǿznqwfz i0̞rۊf~YXW㧬pd(OȋϥV)/m&$El-&F{sy2n2F0g=D!* +Dʋǁ&sAJGGD˚H ް`,u 䒒 ,\ *nD  |LEJquz~l#SOY)_>JQ2Rn$ꦑU&/PX@,i{rQ^V'.X~2wRj>rP$o<iDڋXЍ2&̖遊)eӳD=OWtGg1c ޛ{R%w}l,QdJ?\X8Zeu舓54⡨Z>V<WĔ-sk& D+-ʟD(]tQD b$#Fd/Vt =yEy*`x\VCD]k%%hv&Ч<@ZƼTb`F݌bmpsjzT&JPA5ѥ;F1XlpY);Yz P"L,i>TφYR'+!P<४@q$'#qTT lP#4h, J1~)0:-ԁ[BqI&it1~']C Z!zp&`$SD_8MD 1Buڹ`s(H">! PB~"!N)pwOYXwzd%ĀDwL!_<-u݈.rk8'"c"exdbHFK"3R@ 'E+R)Y04=L8ALDSD sTХ r\? +@1=;q# +ߒ DW'jpwXXaKAצr +<;(e#t1U/kU* +9ӻ͕2UϰA)t$Cy'Hr Q^!"*O#P\NI;JS}(ӹ1t#N>7W,y[5'nBif,ElD" 0 je9": +0WAD%,< DSj^(N-aWNK 5/q|s|*,BP"zQ6%uJQ9|ɭwN!tfD#7FLP787f +Du? ?xLw2c"$h2E8~4BiT9SwLQ~<>LnK3Y'):dޏ('#2%05wLgsWk +h Ġ*[ ȳ)զbdV)'^GD!݄˙cD%L 2=qYk@tQ&>Le$Ie``.-fom9'Os.ySh쏠KMD&^,PG8qRq -vbAXcʈZ=Kv$ mIkƾ"2:n@vaElU22egC +!:&u.Gdx8x@m4W1%(/xd=HG򂥉Hk:ԩmiQ_̳HBpfzj{^^'$f.Ayui6bTx=b$ c"]*N& A+dj}‡DDDTKH$Fq&;ҧ*axvLZDEVzkAtND"l!XX&9}%"f_FH)HSqMp)W_J:0SJ5ӒODKX ~DHmFow1+B-tx_vwD2M$Qxcԝ.IO4\#%YErhEk9 xj$(]B)brt4sHCnSSj45MSD10ŮPzV}D\U <B\rgU("5 ,X]_m82Qy6mIa3?㏈DCns=Bjhh~[æ2*߹lZZEvFJv*2@: +) 9d KEMW28P:Z mVnlfi= ]&ǣ!H#$ZG/VyX7(:4녬b&YLXZO1{ sj!֟ؼ KL8Ø ,Lb6[G:G\(^ȆKwlT" T,#eڦ[R3^- se |-j9@AZzfRkcLz}ЦCm*E1b`Qs$MC0QʬOu,YH#?NBQ@p%/pQoٗN-q +oYla<>ǪyS1/W<\yS^6;c Rs #yO~ b}d]NƪI7%rѓ95#+ED]a%:I[~:ppK-c= #z¾>"eRØ2]Mz2MsPla dGi!!&z@6"c(GDϒ`rQTZM +h;qZ˄Jg8Z?*:HbC9WyBC1ZJ̹ eE0N$*1NS#VsS}߃&nU'@PFD P=(f!9UDTTaЫ5=7K!JX N1!4QJǺb]]c,d.D\uR&݄wUʞ$| Beb7G|6$šSS~ M&IRAJ!V L!(x)x55eK;D2!#ͪtgc$G`_(PU@D ]Yn1ΝQ5P(Ku]jD!e'V&<1ζ(- 4-SOe.$q +CL.3EbU5q"+턊ճ=d{Gdn30\OWMg:{RL!҉+ V!}nvpBːje{ɌH48_5hiXvt&ewp,/cG7.'2/Ktqh*=j=W*pLqeEɅ*%*)2ҀŐ*39 +_]_|~A2'"{s]+F*Dʓ!1% +nq[*tjpŹ.O!Q]%b\!'{t TqB827LsęME5UHdC*McB](d^ʲ~Rv>t?yЌrm\[CDOx‹ezsaO&5]~p2oNōM>LKE$&6I3zz81hXcJI-p14UJd5.%*p A_ k:s#R]iLĐDzgc]+5a{~E:nl뚛@7:#8t+>"BKKˠ D$ '4ǧ( 9I*"/ץ&7-quP=KjX 2WWe1^42FG>to5='0D |p@nB-"-sܑ0zb1g@ܾ4WI us1Ӵ=ům5=w[VV[R>Q{/,/愻\>K!@W1F>uК* ֤ <$' t7J>< +Rz}G i'6;),OѶkqSYb:FFTK gfTD$l->.Ju L=yX,rKGj|"і3@'s֭eOe*rhzvPC/3zM6t%5o6h̠D]h"DT&T6`'mt%\ P۩7@DOjDqZp pdML҃ +Me WtԒiޓ;,f$Wk;ɑ\\ '>r"%2LfqCW)PqHҍC1/Z5'am騛E$bQhT&#qS@~rL~"*sB (`Su~9+:"^XI݂$΂kDYӔp|,H,.8H*>+|yQmػϟ F@#]txA+ "V= +uSN_kݸW#ti2xaZ][9I釵ç+ +yOJ]РΑh”O#<!+2 cf9)T,$ݻk}}%"ݘF<IZ0гI1:?92c"uhq0Ub{I,I*d*( J6*$tu)j<[= |NNHBqP@WBJҵW5wg)ԩ!ZM4)T1=* %G(C-¸34EzXyE~?g!)d I7D-z^EJƅtrkzAG~QKzU t'`ILT-S%gdc@<6cDOz:uI>W(W+lR,FLzu=_cOW{2 FpN\sSVGYf҈!Z?KsK(Sn@]<" NLC'J9XFB`(K EBY]bZZGaKXx9(A^Nh_O:$3XU@0tDE-gXAc`MMh9B\ʐI%If4p4]+,Z=uҼ`0G<&"n%DOQ  +Wq._)d +tZ^dFv)oM_(tW>dZ}y + |2&}g.,TM0G>\ Q-ӣ[h +r-}BIzL {ˇUEH jU$wWF/bT1DLை|H=I`vR@EAkN?ta&DAǃ\4ɔGB-2'ymɬ_cfUQBj~>sĄeF=29|fz)Z4׻ +X~ ;]=?_}S\DYI#FZ"ETF#">b\G8͵aSrB'Os7Htg>]. tUpHwhq$TDfŤϹAh87b +ENPT@^"` TiunXA2ש$*рx<ݭf!42yDg3NT*DH;_ޡO*0ul-z|mw)F s"F>dyyI2*THS5fB>©nMEr:;uOU^૶3ۂbgN!ЅĒ?j;t&ʎ4YPIp{Etq.>`1-UǮfuGLs>}%F1Klesv!3" 4|/]VWdu8R5AIш`w$HzXEQ,upZl iqod@B#H_AnEmjR{3]#骼_, ufro ?d=q~yvIC** qp0wA&v(YQȫp#lOuY?J)0㔔؏yKkDUQ.s8Ȋ7.pnXO־_U zZ$9JT=0'N6 u*_r L |*wU4:ˋL~tkUH%>p|jkDVH^"q7w~4BTc" 993[H.P}\DN^/qsq]twDD\.\E^aFmNU~/EAWŞ^)"[9=G,.+ޟi9cY -Bׅ~rŅɱ ~1jgc!qrS_a $5. n/8B-5la|29P]Nldir.iQkuq#p($twMr ?MsnʤTT@1=^Lݔ(̭e?*c; +rFߕ%0~T:c 5 +ʛϨ> x6ᴀ + MyӌwXeJL8yP*"CV|v +Ufm< +(JEmlr3z dY17XYQKZ?m/jT-:REds\)!i>d`HK\CM"/ߴQ9f2w.pۏS}b)(jQ,3(>6seF%+̀j_þa59zzE#IKL~sahCp0r~J|Va| +~oE>zcas3xΓ͇Ϳx>}GY"JlLI&"3R>TT? : FLdNߑl\2y]U7&C(BMDt)Cj QbeRѠ܋Ӈu-zͿTI|mp-- IRPj;S! liɲ<I. 'm>A ieB7!xRUA>T"NYr"5_K!/$!F/}v\|!,B +dhHX/~#gxǜ:nlYExGH8Ԅw]z"^q,!ǟW ?a-cOay_~''֫~wxLMïj՜t3=Mw|btzk.&cJӛκ?zm#j4;<;'_ݬe4"7qnbv(Od_ov†e$=%/W9j^oX֘Uk#\tl?zU>»:֪iFV76-Û-FkhΆh|6^6k9βWNhvZV+hg=XrmVk,A44;lC^7Z~6iQۈ-t2ڶq-SU|ߵ'˽ݽNԛfo4ucZ3_v-#(Wz,v;GkGٗQv_.y9V3{Pk?\.٥i@M%N<] Ǘ^#9gG.Miǎg6Z>Iӊ:v ӎN4=H?zve`fm֢Z{;~wp2ӖTreipxoxжNo=oNA,GK7}:;:gؑ/^Zk.&Υ\;i2f^yPo(;ÖZ`vgeAY` x h`Jul-l;al4ڴY_. d~2J^Zʃ=5MopiZmގF7ڬ 32 p>_>4hd5*xtBUWmn?:^iFX:hʢ-mzk,1E( #v~^I/?~xvsxX!jG`jcZMAity5p;{O3Zjm+?ycw3k5`6i[ξ=8-h/gdjtGsN.?-iE`˅t<:v;oR_8ggewO lȴzsڱp!Y6hz[|‘ ^ZRYϰANRm.*-mw쳙3XWy<Pkdgo96f ̅jfcYʥA7tr>JA4{Ҵף?͞N&MpCx XNS 3ġkL +0Fm5U9F۳#5a{:rN{p*rՃ6m!;!+$d08 wX>ܜ0o?Wwf'~d1][!62L^oA|ϪEXsa2]ușGej?^ gg3?;_X u Ml=vg2:Sއ؁hd*Wv;XS^;kmL7uïqdZ&0~>/U& +@MZ7 Hzm fjRyTLk98nR5axZkzf!B ZaK#dZn30vq@BvFhwWL+ggj6yk6a{{^Wj `h<-n!vkw۳m+]Mah#ˎ{#hh00[izV?-/=l ~65Bx6a6̞U=ۡsޞ-o&$zo꛿m ٭<菎+0r+0;g;Y̟ItqSkPfOoG`r^,7GgGͼ=?oj[nL[3؇%@)3(noC EoXnɨ9A\QM&WneRofѣd\FdReŠ֘Z, vh[C U +LeWr*9$X " RiU*Zml ^_[fM'ڲ9r*TrJQΌvP*b;]-``6WW7 GEBr<}| `ܽ]Jsa?zG&v4d/&LAs1pNb4^tykފ']grO7_LWm+K7^*=x;^z!놓+ vHTaHf;ߡ2WcJKJ{TjCT'Iƙ*CIHF4(Wv?t[*>h\9gQqVՂVmZUX2v֘CuM\Bc:6,@Äl/k 6{C`f 11@Wxr2"^ NC)?zηj1 5;q:fÀU"X[àR@擭aetgj<ܿN7 x~WMWt2=MN{t_μzu5N~G?9`||r7~^7Voh+gr)&gNhM 秗?z{ek6}DtnȢdXߴ3/|~~2z6f׆T O"(RwW~/X;h7=Κ5n!yjsa$d50}niP07gl+3R[k@c"_蹰`ZƔ[O+5AAh/Vuh78^''W MPPЀ +^r@]yIb/H*VaAO`/2 x c\GƽnBB햪m5 Xzt~r4q7G_.v2呯 |ě0[fVims8u3't80rg?sf sdؙއ'4|gr=s_ : RHvDoZ`f5?= 5A| J^7 ^ث-o_~ ূM`AOތ&O}ޖ)-@3kuZ!Ӧ7rv +k~lvVպ&O-3n jV z*nN\! v@ͦxr݁f&oftB[^ô +e@6a01l~R\v p"v[}z:F:Z&SN{{Z9#0>@xt1\Vϣ5\WCzd4>MNZVRO`0/xGφjssɰcdžpr _9cm}"ޮ~?w,bkfإ-hbZͥeF8qmHzs%` G2xCjа{[F/*cH6hUh6f HdLQ!ќV=gThj|twoX-vvjuӾ,A{'#dµ>20`BLUJ&oDŽj "iM0~Xvڐ`PB Y>+V>7i.Zbv h u*\)6 umLηy4ꧠI#;xÆ1ǂ׫P7@v셏ރ,\=뎎atNtuư÷nz0UoВ~*XNs׵[K؅@S + +$lZ˱Vi I&]yr?v'F'‡fzhdċڊgYҭׇNWc`<Pݶl4}@khryZ*c0I~-V#B|Ã@,[3lZ i`Ya>Za^7 :X kfï 9'յSj6,@E<Qx.n6=a2o5Cr=uoポn'Ab7 щmgCg֚.o,"ڶ[`v׃2~Ҵzۃ/fz٫ȿoޞ)3<?9xT3? dn'؛$;u +0Dh9ړa)$ rq + F dH] na=]ۮttփv:Btv;;m#B$C&4M\ y2́ 5M mޟ`?NUˋޞ@5`njx>=/ڽcc$-{ ~= +;e. {;MN/?߭bw1]?BbJ8;S@w 20v{nFƇ{- zOĤz; ZsKx}TQ{ݶ}\՚fu`mj cgFً(f9@8#le+X?`omíևt`:` x]U*aqrٮԽ;'}jj~F`1j =[L:c `_;8/`Mnc=ݘ6jӎ}0CB&mq=RoR\qN`^m6Џ{{dBNRԦ 3n~ꍹeI 6lҀLMAWˣdg. *TM"C>؄$G 1ǔPkWq G#4~6ao`t{+Q0D4`616^1sToÕl ?l?3{0mXvbX~/ XȰ3ĵ֨ p|?Y<4:Vݱ3|W w*9kcHE~jZ2M:vh?}XXMZP_$LM߹4;kCkXnڳ'[fjC`C ʥ!؉M x`u{iZjω={dZM':Ok\2WNFnG&9ߚ|/ "EܻW2@T0Oog\U2~C 5{h2T0b՝nR ߂jh.tж0)D +T0{qoduق}r~2qH{3=LN밣ǵ̗O$9-B`FZ΁Mxw Ru (Z3pFJrz6BI,Huz2i6Fk6f=sޠo_W16vlŸf+A*[D{ڟ|, B![14W6Vo0֮{8v˗бZvuF+1]JfVOJ}1AU(<6jIDjc5tOwh6Nd܅ ߠwjZÙ5Z~҇i Yګ IUe Z IL8]b69HwJ˲Xe1:ufo6|(>}k٨MlDLk +\NB;{{ƽOkRm$ᑀdAo )^v5 %Vwa^fjEVVo/w˃l7uM r2Y~Zm5toOIu0w41:Q$0HnFQ}1ؼ-;/G8?0U3, ߁*6J/-r?`~6Z(Q=j>!("2&t + +< ޑi´2H*/#<1 `xͅ} xstqcv{3.H ]Z>kIRo%v  6WiZ7( +nDytY{l5DJ Je .ؔRDocW tC X Caւt4vw=%eO?-R/ab ИOv?_0bR9TׇL揰0F j=+`H?ˈ[=]ࢆRJwpctNPD)x7LܛB( OHmS|-2ĖI8ǡlq6\tGӎ<$ئr}ZOϯo9CXF/;iO(PچSFmi I;݃v 2jn;V1tg;93]!P +JB'"vYPчU#lrLGnlCnDٞb O^a#7`PIRicA < U|Z협?l6Jb->]lQBmrOBҞ _dP{Jo9)o"8Vi{C QS%?O>iҬHEfgߢ %:>rTV~l?{^?NGk7zd_ݣ6%!|ͥثS6-H#;ӏ +z ~98g] +o&ӫ7_O0ԆE, k?lt3LW"=ufL"|uN–C9O3ɗef44qg0] Ue|itWE:<@qɤ ~|p| Tg\&%..[6vz"0€;ʍo3 lX`t;?< 㓳`Wsvz+ڣK1aE7:7=H"n:_-a"W0p0ˎ 37òCu Ҧ__-D}RMÇ8Ǯxv^?΍PO; Ε?vǡ[{pDM0>> 4ng ̴0Ma`ΞPLgtmu~6Z^/'{5u!ŗW[=y>^Ȼyp/;|v~0>nCM.)*9x|>[n?zÙ4hLNcgv5qg~Yz7^ՍgAEl:ҥxvWώ._6/*VL/q2-S*^ыf8=,νpzdء3;'g?BoW/Qw|݌z?Ÿ ?~rwɛ֯"J~&Z=w9Wꩈdh3_\Z]h 8.CB7_W{_=_j%7~j?Ynxx09] ;h^7%>x u63i!cZi*b7_N dy`>< 0zpxu}G/|le}}쟣r1͠MEv:XL7_>ol}8loq>9:]9׫~Ϳ|.7͏o^ǛhL]?)=|틟ȏpuzb"yIz79s]Iz:9uuWu99'F +HHB"I66N'#`0Ϲ~%?O 4Uk}z Q,vbZt,S?iN5vR-6 +%Z d}J Rw~VkVtfY,?KVmNL\TnDirT*[1pX +-\ⓙz~0\ty4GÙiYj]ZzbQ>:EU_N$=#\dǫv, lm<-nb_:=u~aQU +r!4Q:ǫbk;UZLA]2EP/]Zi)7vG7@ŋHcWK_KN;;²( +&dڭ+֏^#ˁr+è"vp2-ITvT״x/|X^7u[o؃?BVVltVWGWvobm7ΥR_?6}=SJ$9/bE9==[jY-˳b-OC`t; +R:EPV? N \ kRR#x~.V×OZ2B.YZv+\u#^X)O%D n9wzoDžF$C3zs^II2JLN(Vy,G9)Mk/Tذ;*$-#cLuIKLQ wJdaө_3z'UZbBcڽBwtu%dBiuНܔd5_/MX$-p&3 ^hNb!*zt6vJ eĔRX YTӉb(9fu V; #\Rhf.]]-gn(ty2Q g&X]}[+nD"̥̹sT{S_ҙڝ\Ԟ9S./>uO|VK5MVkZt2]Y-ZmO|/Pz%yGN>N,vקfCyrQѡFĉCwmpuɩكVí`/rL.{B0ԁ#|+~є IFsalTj0 -$ $hڼ~SC.wS|wO +I8AB {`(ҎgVNoښ>Nzջ>h=-8Xf6Qjю- x.*\ąWOL$Iյ̉gzGCG{s8˩ɀ^Y;qk$ZFa՚ӑ5=1At5>`bZ +4w<~ %ҙv&=B@yhq9YB׏!Wx%I#bk0MQ=aN_+8}4#Rc]F'Y9cS?/*[2U \;uQ°C5uZd$kF; &txVH&NU{ ^) +J06 WG^L啌U7NS;3sGATZks{FgYj>7[l.?J)6e(l 08|g>b.? +>Qo:pD A:)/X=岵D~5v>sA69[,66t-lmi/Ti +g>͎J<3Ns"F8ܞ9,@L@RK\Hq B0_kJ#X|,nl56Dt-VwzbYUü\KgOBTIU7)#sn\>H]obfnp 4Mi(WX>|/fаBMDgXl-vqBs ix=k s``3;)DrxnO-|'`w[-C^cmKe +lzul$?D%/0Tj C "~Z$4ΤK;A9!AZXA&i:qgnq$LҚ^obx6pfzsdJZ>aF&3+1BmQ  B KprV NY=+*Iz\R$U&pB0N`:Ny:**)fP&ϤOTL:/Mˁh_0wb(ևNj6:sJ4%&;3;{jЄtw`OK0>v +5[┤IR\iOY9ӛ٫vփz$R=qWMV +%Tcǣa k0 P\-^[!JXf".+zAL4#Cnًd+:85PNKJ)(%K&`b`<^_-`G̸LPL7(WC-0ӹYJs`YlΤ.}FJWuN6G$s w58r{xFON|>܋(!I V(F,1H0%G!Ê{ vk,&P=~b2\1 yI>stream +] %  \5*T'N1w'Iŵ`iXv +bi)iFJCaאGdv#Ɍ&(jI\c~as}cԹwC/s[/r·מ啕#' +qP(Vߟ(; ˫Nxǵ~½r>7o|aqO"t8*R,^=fO-m6&痧WwvO=/w_ַ.\kt|5h8& +XT'j%y./{x7x{z^Ǯ? 6gR_ pB EˉLPnwO]~#O=~_wv}zP< iGu% y EJk%ijgng>'?q';я|ijq]aŴ; EZ GF%Ot|,֨7f7OXs{u;W.T,ox{oo_yg?wo_w_?ҫ}S_/gg=dklU40 \hjW?{|sO}sϽO_o~?ۿO}܅۳Qx:%!QS;ۇ~G{ɏ=ē/}[??{/~?᥯}sЅtv +r9=µfczaaѽ{'?g?/_wo[}'_~5SD+$)B6^8tσȃ|ٟ77{?7_{~Ξ-n4mfý^gç}_~W?Ozw~򷿾Gڽ\iA 4c cτCZ\MN=qχs_|_?~[__|?ִ:˖oN-l|[}ǭO~+w/6 *B7%řՃKw]:/|W_^}oo_?޿|އ_ k,|mfjcv^z7ֻ{[?λo]h7ҋ\4qLQ-VqVS|u{mWW?{/?ۿxx͟g{Ϊz /z8RLO;'?>_?~7?WFk qY(z< ?g/|兟O[o~/_}mW:/D.J˯f`.*-ͭ=p_Ͽy/9?~~Ə|go[>xØ!,VDn{S/ ?Ϡ~S? nY[Cbi5(vX+2c݅k'zҵ'Ο=Z,$~"hB͂,Æ>!"NJbm7V6gN{˷\v3)=]p;D.8'[?~ʯnz/>ucSA-$XW G:}r1V*';37䇾+o{~_Wħ?~ϣ]8lC%+XנV+r +bKs~+/<ןŧ~_/~ʹCG7f;FP0nC)2*p|$O~ѻ?Gg|'w?o|/]ܭU( >?mV4a#j.&Gfz̵_|y+/|g?O>yNlee'>|۞~׾>=ݷZY5tɄGH ]Ê!n:-,yۅ^~?c>S?>3w]\.VXJAVnz\$ SL"h5gV(N@[2.7t>8`~'2Ĉ }>PM˜vzsiاZ0Z ^zyI҇$ hБ݅X,hf+[mN B<3aǨa5v4ұH2i='BnVͤp(iLbTؔ&Fb1LԸX_ղTxYG,F Wqˈlr ;MÞ&YT\泥L?.co;YIFr-n7fZ\2 {4<<ƐJ-(p> T~j)Qժϓ>d<jʐ|BdpI.x\7oeӯ3rctO q|>y#F*z0N$Fܹ( `6m6dLMG#cv 5<<@B@(f:5 ;Mӈso%bqz bhqOL4L^$7 K-f +GtJlʯ-U#݀HF#D0bcQ5P#r)\WUL:Nv4Cl~cbM }7>N֝N#s fTPހg"MJ bUJG=$A {10n?{\Ʉa6cN6`р.CV8Զm2ַ{1o_biM!-8\CiQi%8*nOÂ`RC,%0"iK^EHGo~;FDI23iU.PYlfGL#$Nļh'SNfyb6U5\O1VB]V,W0"( Fh1:FVk1(!HЉJra0adDܺå9:0B[ zt#"2@)*".w`/;$glv7skNw=IŠ;M8)"&~t9va|<.f7~# ML4}XΜ2$''\.~ XvMc1V*wnSjy=1cZ JP"6c (lР40UCtUK[@~؀bxc~z7a8'cfaG!w`~fjԐ79Hd$*bcm.?w +[`_8Ka(dJT`@">, +H*Gp6P1J j b$^$Kn{1c# RGɣDЃ8n`c`e1P~4Ib)w& +A,r.38]ٌG`x Z~Cޑ "My)`dlыT(@Sq|TEagNq9PAMN/}vACHtaFRL j3js|ZN40 +(HMMahm,|ՂVpUVDI$PȧƦ RȣTLQ+k !.5=4Ӓ!h"2;$JFHd ԙbm==~$f&RLu5ʵ 6FEc~?wZhbn#<'i&ȼz]"؝i(3X!k`E4N(ZS>2TӍM~i.M&@(}^$BPW6+i8I1B(b!@G0Lү5{6)>Dmp86}^(S%QJh n"c8ֲYI2L Bp2x `b (B#ǭaXckr:3!z8Zkh38l@%R3`1`[d06YGr(M+ X=fFx +ew؄  'X~eDOw :Q +ϬVVxy1zQQKh&3wNZ2JZǏdk +H&k-oG@X%3M++JhR$dlFSRXfڹYO̸o"J0X"!Xa^*f#_so{xbfO^OIN =2 I6s#EG788vvɉXOsPf3Ma_,'U@X[K}p*b3Nt}ˬ\677j Pt"R0}-V+X@F -x*Ȗa(+%] `% P`&dpsM7ZMd'|F hH3@II#H͍{}ib)^p$oBH"IN8]M7WIˉr7j/X,"L0Wң@'|&-9 @ ExO} &?TԦF9mEd"\nz(OY5S K齭!A`n +%8+/ "HvMX(2]=٘ gfI6bN/`Q> +(. + _^GtYdԛ+˽TVkv#\BD"L`41k8.* cF@(-6>9{z&@s|2SY(tv#cU +%)]PrQY|!Zm=܄@A#-S>"TE-qRpbӼza[Y,X@{<7` cj9S!``JL\`rWjI֬6apC4[Ĉ/C*GIJHHQxi$ܥ&Z``oilBF}!/@8 'GVhj92dRXLWLh>nDR0qVH,]^% %8 _ QN#Pt~ +##pU@@+7z3%$+Mddli]{w8BFajh2[7gjvQUF"7N =6*-Z5weSa&l +2U'3n ZohT6vj^%mw$D9ZR|Aǔh8ӛ9vG:SG  "x! + E޷fuRN9^ ×\{dmZ| +~އt'29>_D:^_sx[#f"۸<$j(ͮ3򸃊Ry!F*^Dn@¹6IQ3CiZ 7J8b0IPB@($">$C6[.'s}#Uo/̉B}?ijf\Lͮ]XXjO;#iM`u}@>  +܁z P@klG/#)>CY-ܥلk\mnv1%P­j{loQ'5bBXkes#0EE6%N ;"AD=F%Fspb3}>KO)Jn{ԇ>iMCDX>x3WlMҵH\^ˆ+CB`L>Y>5rqKez,3uOE KfY +73,IAr| )"dx L Nlw&)TҞ<IUPCcZ5,ӥק +^t`Lc8+ռhx`4pUa*!BS + S$\B4Fg`/VX>TuՁ8w9$-0NJF,! 6F\&lcLh>'(#Zs5lrlfobtW)6!~E)hag@JT`76{g?4MF6 Q_Vȶk2I1Ooz}GOsOT:;P:}3^4c4Xbktoj<xCUte ^iHM֒AQ +|&[&/iF|@pwht5VM#åppV;Hb*L>~=[ 6OVV,9'ҋ,0އe%)2 B xmps _vyPhFc-(-h{Kc 6'V3h9A7^&54ɉuF$V E ~6rf#N"&^c5P/RƱp>7C`ep +b.`:8psFdrq4!ETGZ~QIZ'dj=sup4#hf@L ?Gc 8kD. 5bfYHMU?lЫOl/r3$AGB^Ϋpr:U\SI'%iW6xPDEQDu=8l?`q GgJ~m|Jb}eh2 STؘ!76A=<IFӧUfq\):rV3mm)<C=NFo1bK6'd6hTJ;}/= +{6gDaU0bLj\jAd2mӰ~P#9hvT88>ˊ9/KW㹕FTnDRzkGV>4lwڍf3>2Fix8@{cJddA%05;{RRN`w^i"VA rZ`XP,%6l3;bhw 5 ~W V_\ݹ}Tu"<m5ld V*+݀ޗ#prYY&ElRD[ٌg,b,ޏTWpeJX4;klAkBnV7okum0TE#nXH&7^FT!-õJ}~vl:GrsDɄ(/ZXxDKAD!͎xЃ.3l,XHqO'Hq^VkϽHj?\vgjFYˊĉ" XBim =81! C@n.iP5^|taE 1\tV9a(RLWȍzLCiCO) u( B$W:'YiǶ-N"#N;H$r$`#/hP@3W`;Gb]JL>3m50΂/.1rMT8X`vٷ߲xgq< ^Lul7Kr`kG, -pۛCO]xoS, Ait$99 PAM6:KN_r_ a@]EᖠT.`xJUoUo- +B2t6lWnO@ܜϯ\:W/>v?Td몡v>O.-O[]q/$Ӱo3GL>H/%\[?ho"T TS܂l.,W`@ht\@V5p'x#$/UBrDg`D-IX|cccǠ ' +t1*w#Odt*7GaГT |ג@ +K `NX״Z:L8_JڌwoqFz +?p@-ļPLÓPyqy7ll(M]=r=}mS&N#i,NoYGK[> J嵳 IC;G)*@P= +0Β 6f3VΘM|%zY6 +n*-W[=>VT,]>CQ)]4-y:/(:=eBz\"8/5 yALt>}}7Xe>Z<`) u- +J{߫6+_Gۻ3JJ"7NÅ8\" 7P}h6bmJ5+ ^LXh^oKWnkh:eXb8y}bގG_q'2ESy0ePFl҈"0 ,plFLY;s;&y-MVɅ ;wJo\Atσ,bp״dGA%՞mjv;9ب5Vl6N&lw<(hD4EZ/YHCԓk WJboϬ^Yݽ{ogzyTXog߳ k\~2@2AEUjdȌmOC Qzh/G>I*שFRF2 lܟXR}ʝ; +"NcDb2,7㱧#d$6PBl)[>saDw3s\K5( w׷e 7r755s~qR4~?S#><vwլq(lnߴbа@5D%{ٙsL40-ézT_?|h$lu`sQBX8j"uTv>Ɂ(E%, + EC@B1pz^n9W׷k$ܕGYU73=ގTju0lah??dOHL?fgٹӷy9 )_xu sn!Kd  ݞ*V6cVobk3^>s^'UY>U4{.NQOԣ#l`h@SԴ=528 P 2&s3? t 1(⢈c +ɸY*f6o6/Fnz4;Լgh jCAatxd F(j#?FQq8gr+W|u>Sn3`q}Az tp8qA^4pJg&o~75ot:w/&2Kϔ 8\\]aQ8xnVX|NqV*J%\Pi]@lOJCMYYkf7VGGiI-jbQMӊҬdg\}Mf%<ˮE`40pHBoM{LSO   &GV@:Xylwٛo/^֣X_߹{Λӳg{}vB<=tW\ ܼr⑨UMwP_{ +madl 3B4F8傛ez;>iݧRj\oFtLYldL'7q< l6闢S~kO7*H*xk\m Ll=cG7o!^ל*Nk,,*F%5N)P|OlBnq@7UYaBӋJqثVB8~9UZBp{{̫}ƶ a75 ˝ݼB6o2ۯdn=[l0w΋W 2[Wyܭw*5qLG_޾IaD3'2hDjw6յT76 n{+uvEl&rSׯTwz<:#6}# `Wc($NFa@Pe4u`^jl:_V|{=uRû/^a%>yGg_^XϯVf!3{9' r!Hjgh)qd(.(Luݝ]:|ͣL}-][73^h33ً&%apwf7QFrQ*i57=KiN+Z`KXƧ!yx鷇?rnjreNKO?>$ZvG?c319{1~>S\dh{Gfk$AC\0t8j?x{dd= PcPGS뒜9b%pT[l'wcnVս[;ړL׶j)E+pIҤկ r۳+W|k}O~{Ͽy-+9Ul%+݋ޘ߸Vl>x=`Iۧ 8u񵩵7g} *Oz)xzZ[}ك 3W^jsw탽f+X$* a?J +bE7 eJ2y#?"}QW(1IQsgTHkLaNwhBQ9L]$Qý`PV%8 SG$uʆ}xq```%YM;^;?rE3eE';pbna (6t>X/5V/'4NN0 bZaOSZrxıЉA#h_A#I'K0L`A R♙DnILnX[lv +mJR8tqmVPU3+*dn)[^/j(rE O3aP7;4F ,E5e+{o?7nܹ+m+ d;Jyҳf 鉅+7fsE'Qb6ykמym˛Rn,x[_Ηg׿U+U[;7o/?O}eg̬Ζ7go#F(|7(S.07ӝ&_f4bׁZ+48?;>wN,#h'ӓnx5ci&]b@L/]oLVLQd-W"Q NLRNPrYL(rzbeh?A.Q b%Q|>+4^+MM lLR8Y2{/}kル旷?xٳn>rsfݙ#`ZIڋ9_pvh` FӜ8d$?Y)0΍N_|6u4d$T57.NNn^}0g(E$4Bҩ<ϦIĦmgLV2>Ybʍn?yMNȼƒ~>E Ty#>;_9WivO~$sړʩs K;I8byeg޽=73_-W+pXs/zX]|qD;Oc$P-_?֟ b⫺7 >݌/vt>5ފ%;>rp28>JzC@ ǎ={ǎEÐk:l.w7-u{9`,KEi`XtRvow +9aj6;{t㈏olEL#,%h @d Sd +#!״pwrk DM+E'NB2fy˂%AQn_6!'ҹY w1ǐHX& O2٦Y3@(Z7V-H4X',%.(,$x 34oP)8" + +`IM`Aslf0ieOV nW #9_ioS-YMIghyݏP31 ӣ!fAzc Xj6_4̙˥AtޕlnDj*0f5#\9p wIs +-{‹)je1p?%єcdN?pqm|懇"O$q& z +sJiX8Lr +q$ +]F#ڱ& D2V&RA&8>G%3M0% +QNa|36ahQ?60n +4EMx劔QA$˩JQ Z_b~W~d@6Rҭeh.*$*Ѩ !?!r'CcǃQ_6,0dDx$ P J)T21C֊(#CS Oj863h3q+)<Fb962p£8OyXTGGG1 2<8i&LSЈ'HD9t2F#A@\sSŸnA2|s +E#Q<ui,4cʉp$*DѦ39/ 1(@U^9f&d|wPph *kBQ[2)Q#Ѡ')W,gf,ϬuUf!cJTAtYSDKwXT,M@"!J}LUcTa pcgYx\ (oԙD ~! +Pxbq\3XOD 2rFy9&ѶH +Ef]QuLIq n=8X$qp#" x„H @fʚ+;k{˻㯽tuws:a!>5 pA68%$ѮX7,bY\hT03x| 99H?9v,t&ã0B^"B'i/0< $0!,xȕZn؋ӅZɥN:Z޽0lFމۮ&ʟ<64:@Cp.Gx +Xd:cheG',˷7^~nչn. `j`!. +J76^2͉&/Y}w>{_}7I<v%RF5ZEcUfKdpÖ 4n;s[Z{/٭Ͽ~s;w/o)$ bC,.Xc j5ss;Oݙ/vꏿo>Tr:' Pf('-" SFL+TXK6Ss;/L߿NvmMp/(@P'1`0G`X)wJ)O r:ݤ$̉>bK61Z"g&**q|t~[wkϾb'>}A7B>:GbœvTp#}WڭzGw6UFGcQ߈ERB4;qnFmcoxۏ_w.Z,oU[4瑖W>?^P//w=g~s_ͷgO?\7綮oi7@0EGz]Jח/= /'/{gwwǿo~ÃqP8nv:wp[+}w۟ZW/巯}ׯkXE8`Co4bй6{}|t>޳S?>ß矚iy,F$$_N\R_$\أ>wn?/s?}oߺˏ6WWΧ/z/j 3aiGFڨ9Ę)֔w.hw.k?}?[̹G8"lL<#]Gg +xm7f 0@]Nrґgƭsy3ת?ޯs;6 KwkmMi:zE"Ty_;Wo˗o?ʾ+  +K-dY Fi7/h?W폟7{.,Eg) N%08.! C~zv=Rų{~o&޺Թ8σO*P2'!E81hXݱĕ gJo^{̛7fvsmc/*$+&u-ES.J97:޼Tk3_y8W ZQEe!imw $"$ $TӰ"wM=n~?zׯ{?~DUy5U(t_UٚL$v8~nN.Mt?|kWq0F 8н;KGK_zcWs6 ;=Q CXrQ bKjQd^ P}8ZTܛLOcSƤsGP8HC?@ɍNpڽ~\=K??7־ͼwvyV0"K.Y!` dq'ńvtK0iXx_ݧׯs]YXl9+RҲДF9[rZb +YLUu~2ml0=v~*۱*&I#9 +f~vd8 1!X`$Eϩx^ͱ2⩜U,@ 9m\ +<,Sm3 4L*\ts+^ݔrꍥVY49K䍢QFE RX:D f$nyL0+yֵOߚ}>-&F)SxF!=U``@T]PF4͖bF6ɴ)q0"H4RbD J|HAPkUN3eHhN + +1>bd@X<.ii3D4M9^nwJj4շ0?@EVD%ЇF}~ueϑͬSB;\nws3飅j-9Һ lp0zH(?><8~2l9Odvxb2y ˉV+ۯ>samzRLʢHB0 YjR&dXXrtFx0_&r2JLˤHH[z"@E`PE.o? +R0FU!`> !*`#!X4YB! ޠ&`MS+)R eJjfJ?n*ZDh(T+آ2t!7 X$QbL\%WPgqI&M;ns06/wo0ZSvbIٚ^V96qLDw= a多Lh8ׯtwJ2*CC4Gс(K(*h* + \ +ȒQ??:pO˖]|̫-68(J%Y-vSQ= +P@qEPHD-EɈbBQؘ -O@:X!120ee%VP*5"'N0P<#kQ#1a8kO^aDp}R+FkA $2V(V8,Gaq^|7L`xQ)z=_b/ 3$7t+) 2)B x4/əxaH;۸DvՍ%SU74PO 'pX~jxhf*Vq +~ӡA'1%Vuр28_b)yld$pФ|CPQ@LwHY + G?1bg . գ6Jh1IAZٴZ"ͥX cRԋbqQkך{ՖF`ĬAg#Q-0":1ݙ(+A*5Iy IbDv: TB9Ao*bu'5;^v.r5jwXYN_޺Q! 4o$?cvg[1Qc:J*Ƚ`ЎT4*IR^T$UpD֓Tqk_b16>GҩhTL8 +Fi60H~!Yu9By+`DbrPΨ_DKT[>4jr$|` LQ2 ;"SVrь- GFX R0b?<@ cx",{< +ޣ!ֵ +, Q: eaH21͙q#5K=W LG8BzVl܊O+ fIy$ 櫕JRK +qRETgg0oXjVs M^zی-sr R0 PD@Elek^r6ؽkJ*e{+M5vcg-m_ JTw6Yܪv˝*Jz:+T& mAMNl=M7M(AD^8)]~_%LL$1چ L"#%aوMXwװ~G,D+Q|]{X- VV&H#cnr1YNG(7$K-Ya #N|dˈ%z+AHVqd~%*,4UgQZaؕ1/ X*ZYn;nvTs $bZgh֯2B +Ml' Bp\Rۺc Xˆ39/mʫƙ+x=N jPPTڍ@DFcdˬx2^u~b6#gX\Wڛܬj`zo+U|~1<nhf3UXnLO;G^13Uw'hDy%u365U/wgD\ÝIA&xۜ4,Myչgu4oaV˔XN(VIPIYoz31R,=nVjU9)zR-od +ztNrN!z32c $UC͝4IAf + @5+(&=|sn_x4z9k]M>}#&Bdk9uT<[<"굗΢M1٩ջK4SFb@$ xfʃ>0DH30'B@rb.O2@T|"5 *{ 9Tilb ;Vݼlo%m#mnf˧^/j5WZԬRxeCvi+ϬݳR(Vڧ3ŕ3m\wR>ӛ|&?w⣽WN=;y9w?〄}e 0,nk<ŕ驫<2=R#>oWO_~}nٿ?rJn~Ikėء5%9s''!W&*h./W뛇 H)-@aԃɘv&ivl}=QX,vgP2nKRk55ng4Nj>' H& Bu:]1`.5xa~B<ӽ6@ȗ>qUof8%1 _'"$)Rk+_[ Xu9>I0jufo]ԩnlqJoا;>q (0fy1F"EtARb!Z6%'|hP`qh&/ LF1;^jr_y +BZ+nrՀYKӧ}o1J.-yZ1m`b$ 4NyxNrrxCZMZFC5ۥBgXzrXb%vn{UQk)6!'2xt,Aqy:ks< P|)S/%4֯Fh%|>q`9qԯX2,U R-W +@Jiv(U@܁,T1BQB ⒗cVCfx/p:l \yC3bArc9ϫN*L<.r]TRK9;1K smySnwsU`-3"$ë`L,?[۝\љD?ߞq!DY|F+閥ih{O|uD +\\;V9fwYuwG?E!ŸA2x6Xw߻,-֛o{3>!|Ën`QSM͚B 7aNkh6 L St W翕N>,6_Afhzy %4k ..p]N=8ayfU t0\MprOd1]~_J?zZv/a'/-6o1qˎ8>4;6Zȴgu|'|89_q(4Ma ܝڶIӑΙ,p4{QvηkJAvaٽYЙ|Yf~4)R2 !x4{6y3*HP{pW6m}q⧲4ΎU|oٷSj?\|uI)`Bi5bTRGN[reMgn /˲:wiuU`yVJ5\4R!0Q16i\'Yf7W%\Vc&/W n14Qެ8ЬE_|?[}`sTJ_%YWچR>bf \ ـQ3^@3 ]vƒ֣yRg8Jry~'{o1PDRmNgrv? NٷVa#i/ѾeN[do:{whq1Eyk(Jsre{Q&=кΡ^QvxdB}% H7m5񂽼 eֹ݂gٍ9!va~%P:x_~ΉW{_RM8qɛ8;*:qy^E\_M_~nY3E:NLRCI|a .̗.7g^CSZT}UZb>~7oT{k<:X aqiyPߙN~wKLwk~0}秐+1΋s?sV#Ev7oh Yxm3AŊ]~-oD%dzp DlQhh3Ξ^ܾpC7>y1o ,g QŒ)t[uj%W~V;/>(W^6ݙYQz</gsN K+݄_X>ɧ7}틂)adq%ok4&E$6[t/z8xHMU}?KQV<1)b/LOlgmwpI `u |l|MwmHt+%|#D~>]rJs^rwWC5,-q}=M`/\:ne[iĎ׏8ߌfaMԻL:`f˽; #khul}yOY>??N?.<~t|w}?~",D9%eD3FYq;c988{ ]ϰez>&.N {Ɛ +ot #@E'L^u:խ0Yab)+ QݕamTmH3gD r'܉ë)'æf˧TP +װQjW'`U5m(~ҤCX@fű,whxRS(B 0>yÿxݿx7ecۛ$L*N"nLVR\f֊[RIU~YN*Zf9۟' Xf|I ANJ!h:xcX\R{&jUWϪ 981k܅(e;^&r꼬Atd[ǝcI,75AٱEQ~MF/0fu(iC Gp3'oVWa/h]hvx>5EېjPn1%Rn6[vYlvi A9<ջ?xvܤdKnQ gO[kٜ֬( 75<_?wN95=ݞP'EM;jjߴi6mdVտvraNlx\:;y`&iĜo/K[OMs$)9'7^0;yMwr 7Ioӝ˻>P, dCpUΛ ^ +0yĚTϾkp +Mj5~86U㽬Tw7듟`V}OEa{6㬖;v\ģTduk}?XB<fm$7wd{ ʣYv1p?!=}.cCIvV!}Y;}i:K$li)醢fӒj?hDӖ$Ea8bQT; RܩT>Q. m{Ó C\l0x:+j_RCh$#MMn/P浺Ж(je4;3Udߛ,lh8o;Yoyy pΰwnϥFˣ\w,ċkOf3Uٿ6X3:3Ju^P'1Ml8}3H &;FRI:dSt"*6Ȳ8AP2I(!0U,Jwes@wtgJ (*Ѝ) R +`GTrQnyɡn\fYS\;K}R^!HJCkC;!L鏂Dp"6^A×B٤A,qvl m3\ Hmߤ Ť+Z cD-J="[@ 8`Kuk0eosUIy.qs]%٦]ug.M{2<gA M}H.ABnk9]ER Ќ1RTGxR0:;UrfTe+/=V ͇i /7[! }*YuώiAH8>n=ܖWY6Dž>EփՅw +Zo=5}d$YHIȷ&cu0ݛYjTzud#,R_2cM'IIwxl6 ``Mk,ZM,r/ s\!CfHVgVw۬soxP:=n <91i5YH8}[^]e w}o՞,6eY]+Ѩ_ MTϫC?ZH +\F{15(Y5 +d1hƬ(/wPY,â[3UM*0p;|jZog/p>1t[,9b E8@ (bNmV3=wX"2;-#˚N}C*j@̀-V^!OAxdzwt#|DzHRj &X(ʆ*U墘 GlFLRT{\("]V0!%`lwU Yܰ4mzB EKBf {;w9+e88veIjz!W9)OcqM>@"ǻyuEp0Md$T2 AN:h%i ʾLgN,#ۙzd|1;h CE{y)΅^R^ QÚ8rw7j fb?>*s;z؞QR:8uq!,bt,ҹ]~[> w}*eu;(!-{[/@ 1<FUgqDC)UD:cء!( `Ѱ%aT1!Uٽ_S2 q>B0BE1<tԓ'"E ]ЙDn_Wxh r3.R9 B;Q|0mI,ߓQ.!', LJ&7m nEAn4O |V!]g0\^w'/Tkx2PG;̶딤dV@̾,g4ً w՜H,Y#\$/&;u1-7KIe({Eb:&28jl?gev`[4?}ۿ {@1>DE?,wӝwPf qpk4]ŚyٷJ +ԝl2"4'cUCMm +[,0|; p!N%pvM搒;~Qg?<ҁfx4!fKnAhŷ%}W7%;*}QX]箿A"YHG/\7رH9 +0ٜtgC!0Xa;R 2Y@Oy1 |/fn8Mڇ?fj ]F]ngΥ$E1 ym69S^0)NHn62ΐ<]A5|u4`ZD1FDӤ8 norWn\H:H)/8w{5ɶ$X֥)j8/Ges9^!ja)/oQw[}AG子κ>^aC@IrcAmmhR>ńRJi}$93̅B&7cj"&2jָ?{uo?7_A[t h|5OSכtUvvcQL=}7'o3Y@׸.@AP]tㆻ KtLq}a$M1@Naݞ#TGLHsE킳 +RbX!7Çʴw1dX&hl3YE?+8#/f~x|\FW%o13l80F4Ƚj7;fvGK XnTqj~oz+Y)խf`'#v^Rj=Y-X·rԡ" GYζEe " N0ҥn0_ճ:ba.8!"-/t6Me=n?@~t%'vlYPumBFߴ ,g^a&0G>S̎t@Cvê5BY({y3ER-_nMV_rYyd_zbh179EBǃ ܅6%Y/Yh$т-wKΜ֘bO i=~e%@R"!!B~Vv< +0"Gށnh9Z}U @ƀY2 1 >aUzyf[E'_o*5M^u^tK]Yw'7ƃ-^ oe} + {gI OD+NX)"=pz{W _PhƆ Gp:hb/MɻEu;y(bśI &"DT+ҏZ F|Ժ +٦Oj4yzxJEi6) -JJ^Ou!WlI1 't}RvoZ݄m ×){B6Z:Et9ڒX6 on^U x*ɎIU_Ňw냟Ee E~&1Fw8Z~شtɅ Xz9}U6aqFjآ݇: Z5$ɦb8= _D> (G7λ0e1xv|W%Tebxp/:tu)2cf|U?|>Qqn`8v?L_"8da Rm^V /.^|{ 15hFע2A/zBH2f߄K'rBQvlodwgAFVHf >-e1$,mkz`H+S./\[2ֵF:! џ<-^D]'[_V;K*,,6At8z4!\6kVSJ@ [4^*B}>Ok]Wyu +o +"Dvj4}mR).`Ke2B,_ՙ-5W zSsR E>]˿ SDoadodY}cA mBmۛrL:*L3Z*Je}^`9s:Z_ŋ/Du +mh0{XN6.Nk "U$^V(Mg8龤%/`r94 +7UhEer0t$u0Ib;IvLJ=n(d5幘]f/ $Lg/hh8?(rno4Ź-!Jc?Q-W+&M%9R Ag|?^#˚Jz@TAM:dŒۖ9L20eo4}OG צAY1PRs?_A @=,|_*Pb~鄇nh9@ +N!͆KݚT}kNȑ;~:!@;k?ZiY=i rBV9 Ͽ0\oS%AgyP)/^r z퇳8H1z _ LC W5\Pʬ{z~ůr߱{P#Aj6I(`sp[vp+FC)Y5 宁^x9MAjEAeg]Qڰ6~pqֶDѮe(&`E5{7}i9횾aa {]ig9O 3|̤)AOZpz|!]^Hku Ѷ"(@ڤ۹!󸀑 Z(x,,06"PLVk4 JIֽTλߖ; rTYS +d<3/vCÆ`Gyy}|L kA 䈱J{5#RCݙrѢ-N v5USG45\!\s給#=dڇiּ) 'Y)Fmh&)iOK֚~53eŰzYp˫yoRIvגRѤiY0=B1-x_੻h?_.y~&髠_A:O꾪WUruū/H9:巯^=MsyO&=?ߝ;Oײ8|_kWI}^UW_ q'hww޼~Et߽_CW#Q~|gqA߼~%?<-y9M X|XW?_9~}~Xޗ>Wxg +E*n<avQoϷߞ|O.uE=ׯCCDgzr*_!L>]\v;)gr'fI?7WrMKf+Y'M׻URER@'5fzW,m$IҀu`r=KTJI퐚bb]ǛڋI15gaE魖ʱ.)ͼx߉Lo:SAm\% 7rx0:JKdm FWͩnMH +v8!@K[dŹug +E5-ՍӴ=z㥧x;+匐&I5~vEѻs3b#E ([CIIum\ܣ3V,dRn}+Z_Tm]&?u 7,HQ@hԶ&/")5nQ^_9.x< +͘k֎Mem ō"<)(V1Q!g-P\e\gA +e:j#5Ѵ+ +qmפ&el)f<.FѸH55ÄFBQǒ<Ҵi/lg6?/:,Re90; hT͹(6PׇQ (q[#NTtVm<~xd@t-B9ԌΜl$I㑝 oE+QJ(.S]ھUԎe?T{ZaxJ]Řa޾|_Z5ț2Jҍ(09 sJRDatPR;=Ee,%zE j'JVG?N֯=Wͮdm'{UbݿbG}n{6 ta,J ۲͖/Z>&rDlb&Vi")s?~0Np@1qnL /,SO~Ljڍl`*=w4'zh?u74Do p,S L /oeUM]Iy3EbP~znm-> B Uuf[3MXfPkzVI=.x㰵BNl/P8G7AiIJ&p(h H 092mߙoրcItRe%(I"˕-x͋eccyYv0߇^Ryj-T‹ jҮ T++CL(0T_HE4[jڰH&Tgc˛6) W^z$8CӟR'e/w@ZCGަqed !h9/A@ *z,fVL3R4=&ԛn遭p/`1Y ::єC#(*@$<ٖH]RrFI•D -us!fF.j,14MA`3(BJQZMٴdmBC5u&{Q54\|"G3Eٹܶkjikb(r^ޮ[LTsd2%R3b4b"k^q`*w\5Hy|q\wΠvj- 5Ķp.Nw/VJِd{qv^V73ݞ^\&JCڸ^&JmSyr5I۳͓az~_&M~ÿ{qcy8Kț\ԇzr82 !蟮 wBB8F+;vlǰ tkP SZ)d4(Ɠ,3(%M4 r1Z- DLөխf+N" >bM"M hÉv7`ؑѲșP^n6M'"ߡЋ/YĶU^6AKG`X:3%M&`FŻem7톍&o] +@ʺȕ , XZFiՙj`͊E h6qi 皹tUVAǶ!KxO*Aݫ{Q+ wf;2bL:aͼp tsakp~ ++duds]⽖ʲxVt`R\U{'K]{tgXg+(v *0 cv%B%@VSdMֵe\\Zo8-l\X`f%C1حVX6i4m0 #,DrA[R(>ŒLմ!43 cZ]MyR&ij‰q3R!~z =b ńRI\h6AZ_7YeRICޫz@{]^Nv^Hjc;N7nj<כ /ϣ2~r5P: ^V_-?,LqyN .8?;ϋqI;'R&8;Og˯5Dh-r^q5qRkS~Q$CTagt-(&.T<I3QoXKC_ftcR̸@j55s?!eqخ µO640R)X.\C:֢/MsA1##<TLB30kO CHPZ6^@H%"R ; Mdg,!y)b"O@/H}ER 9R@Z`Mc$Ұ@{; ~2ڇ~d1)O\ޮ\ +L:K"\H1RE'N]Bbn9D#+OU h+lk{4Hm` ^,.Eyk82x^p82  W"paؠ~BMTHmymn:>a}á$ bV|hNH(LLpՎܕ`Zamo%cJm 4ފ RK83Ya?2B,m88]W7Q~eR1 sM^[sߟ$ǒA +"79Kq!|q+'f + +r4yZxɉBjƓzpv=Oэ1cJ,V86Eı,G8RL>тydٮiDx [#tl`U0$W a^R+ +e"k64ˀ9=05mL0pg[[($aHͳ% Ʉ)ϵIS>L!TlѵDPH,ekK<o?+87dD܂ +88  nIjr-J)(&)iail5MyR"Ѝ!YzR;3ت xO"c͜t/ {{ؠu%GcZ#/ݳ_phEF/Q8*OX9̥AGˤsUe=xRT:G2:Oa燓{z݁fW_&RgymXpjy/wݭmf{[ՆQBj!=)풒s 5x=8ܾ &Ae?Wޓ-akO e.Ȃ)Yun ӖSÿx<&B,{HSP@(9ILUw5JSJ&bzNMr5L`/H3:)ڸQWj5εvpWuc'j +lj=S4veȒ5-FljN.yy?`ef'b *9Ұ'܎:Utne8լaDr>) mpa18>T6( +{ى(63N Qܨu{GQ|%'WbpD-#n8piѹ(ڛN" +T6Zǟ +ͅjoʼhd5DfegA>rP:-7 +M;3nMS-T1}u(&Wy߈JXB @S4YS n05j3Cy>c`Gh|.fY3f 2,K*=׈tԈNOmT m!  de d <ܨԃG bQr11ѷkL>"‰8idAs2l<ɢGr,)V9XvDzf*V $͟uG- @0 $Hs9˗`mT +|`="-oLԺ +ҍ&7^v!- %PRBj +Ҁ2t-H*[m"xpj@ +IDCt5KQSQY,L>U kHMڏtk)J}Ya4aT'%ГXDwL(Q '8@V{U21)$<K1Gԑpv(O +\,@46MJB D@0[Qs +[MRQ ym$YJmn0kXOeh70M0AjKy| +0DG.P, fs{̀5 ,Ёma`i0fP⍊ңR"8i$1¸CcA»ѭ nw_9F#Ȯ̘n];Ύidhچ2hg~|4*m ~h6c^|d¸+Qb$'QqmZPI%Iu'GFfDz}eUey{CӍ{@8! C dFy F3Ȍ4sw]oGZzc92B!& <ӏT>Aqy".N70'AHPVe;<6,e#>2"5˷籑ٻ@qp@@'!<́?/CO5`i>_b@;7y=z8_>knc};jNd o_ۏqF +$Iд>s "YBv( bFioD0s ˼Ӟ&FD0Nbz(rR.>qB/Kr` Uf7`8K尽BМ7`͞?  d8q E0ĊHpHF?q(|TN8C۸0ǧإ8~_ {+G`` r)t`AխA݌LTnh9L2F9* BT 5pQ`hH0vqyفC$o Q^0> +@+N1DZ@[7Gu8VvK@A@z6a0Q x^lׂY9"F@% H7atvF^v$8P$y9cc@$măԴ.!Sĉˣ@:=j,04 vz$@|#^.)ra Gh@0 # K +- : +d^5*zT>DT|ECT`^a ,#4 u| R0D0T ~ + ݱgüHG4k|^ +ā$% Զ@..´:52w @$3{%8HG`g`N+ @+]{14"Ax|},#wG q< 5z<P#x7t ,!C`ou4E|>ɆD/(v}T}cy}Zj +ѐ~@0G >U)ɍHl ](lѾ#O:qڈNऽdױڻ0e2XBڊσt -{wn16`~Aہd K`.GP;0`"%-NC) /gAB O1$q a>($S.v0ay4ػxfoa$XPYݫ"F@ {K2L?;zp[8puQ `,#2cuD eb{:6jW{B8ĈL#'CKM\*8:JZ^ #z(| + J$Cykt 9_c!1FUn{@60*^ۄF|($5@^'xV ]fo0 +a9b?4WU`Ui*G9m$ho#ɵ^`LB| 5/aU * EQnT +ifJJ/rBGf n'`]~4>DN ll_j|oϗ߫t͆r8.(=#>P*7PkF IoR\h Ȧ0BK1'1W) + @gi@a M1< + hy$"N{K^\^tRtzf*V[^ d-`0IM@\A{;R'm/p.w*"a. ށD,]m,kL4 CXkFFlă౷Pl hStzpb}:#WY#`r-NW,ɖMޠES|@핁'U6+j HBY5oQ\E3䤨wP*&md)b)/l@GpF V|#s'[DjtJq@8] P,޾dø #'24 鱗,ApQ]m/m$/#vm78d8t|(Nf-g 1kH\P;aq{Z +Zs(v"D TD1BzЌ0/zzŀ_ +F&,'GnP^>@#6 +Eeef$zJ!bkU# 8UA,duk HzCY];6A/1>?/*`X%fAB=pѳ@B1̞dtkNJ Z9UOUy1 ʅZgaЇ\ R^tI%F^2=]lLĖh*43W'P-G̲hj0R`s8 ++wشjNGⳢR}X5ZlZ3'DQPAxؖtl􌨴U>8^i /gG1%]Og+5YA` AzEc)/FrҼR 6e@jLk,hl(.sspA7!2EyAo z;UX2s0YVw0b$IE 2ڍ o45&`ScʢlV;ݛ9RCrJ*JLf +uxJg7W[~Mv}!-%̦*i.Ǵh!MHS7ZRg֍J0ywMJ 92Hf'#91' j䒙jXz>8o<zsdh3)mhLYl^&? 29֪K;9s"ɾi+r$9Hgndp&qMiT]RS;7'vq1hDtuEO/ +5te%?Ci35]-G#fz7<e/k fJKAAXm{C +BZ̲RW"H|2[*\3^ *YZ|c=4>< Wa<3WT:G5@ZJ41(.h@2:ٷ3Ie.5U3㷞}Hf'Ϭ]^=n\^8t釞xMSbs?ڜ86pvzSۗjbؙ9xYl&=)ZFISZ|*.[Rg?hzɵLcIuOKHKMĒ&9Nq +(D$>LWhK%n$'2Tq\ooqВ˹ZkpxbLspnIZwj0f|B;Rln+SKW|7sVfA/2;yQI29ϥ3z,A<;$ ,f$DOW҂l +ذ=yRR9h-bk|MO \u^P +JjgHj'0JTnlϞ)69^nַvݝ+#zgmj٭+яĦYtS ҍًvEdPo/Aiq&a";oZlv7Rrt*l}-d_E1YT\hmUKcD<743Bc.[]Lgt8̧RoqL7L.^^/7[x>)3szyAiBskbƱۚgf|ϖN!z=tDvmjbg~ t j*S^Ξ[=v oMמX?o.U&Ϊe՚|<1K0œŕC7p^R{{>˹TnН:c}h[.-(q* JVV=w#7w.J1+⹓{ Y_=qC\> 3`/ǛS׵GSgݔL5h-džB22y]BpˈO!0~+]P\y滞9~}"B}8֬I.Ir̙;hKTm#88|=-Ch!TGPU՛$6LSwʯdf0~4bV+lyLlSsj\i씛r `1lUg.ܽvFJB{;Y^nϜ͵w4򹳷pÑDei0h 'wg*Zeykݽtl^gnGH6v^l6&WW60b.__)uw|"PZ;zWr,93p N0_ֵ(^C\h-L\BOM'z+N=Zȵg)#hQR0aFL'"f;<4x*Y^@LRjuʝOif5_^К<JzM .O +%腕!E5x4-TA8Y\> ʧߞZ>;X8;?9p;0C>lP3PVe03z H HęśVY^犍U}Xer}0[YOOJ*`Xhti tSoe}$|}eF4>׶ 7h+t.ݙ|ɴzy4'&R#G/\^cq k ˹NcŭSwƀ|D+Q:yMN^p0jld,Agxtp7{H7 :b&[l٘<^cJ5bָ00VspMj:+咹)^ZC5>u}g sxPEL*ګ@kcəխ/dNyˮצ=b2x|m;{jbV7o.7w3U-?uKg+4#yhj +C+fJ3S\怹bs7]<.B2|@RrƊYT;bGSϖWٙtf: Bn|HXAk-+Y QG%kOhMkMNv8s},f Iј8|쎹9t.ۆ4/pRgL?R ArrIg*kAHXP`ś yj%D4- 0+fK3eEJ).U+6j;%˳R䊤7# 5:ifrF*+KnS"M4Bjlș{w@ͱ@Oc*0XHZ+U=Vc?$=? <Ĭ~{p=Ҝ+,[4A3RgFkb7t +#bR`^ijF;Mj؛<"'oIeZ` +CݙYZLF*OޚMY,._he+:#TRɉ8';^LH/bz,Jff0M]K5(T4 +!Q/Hj]RR%P`nVC2Ah0h`hͥ rOhC+4Etkk1j׶dPĒ,6.%+ABEiZt=]$E&#ք'r8s +UNrLnBX~*;{in#I'l1%E,y bw~#wUW +yuh/Ssx?a)FÀ{¸k- MQEIϢLK`!x1V7:GR9yV^b,WNtl,`D|XۨS N%Ӑ$m +)|*˜I^)|~Ol31}+Fiu!!y Zrr\ Gi6-i +\Y7'Vo^.p{`H8i.g$'EM-G_BJ4"T篻!KQxTdP4q}_~p0T5E++nJe.*t0aZwbVJFqЙ "%XTGOH:db°ze8m '-Hj-{r[R$$ɘjXgT1LbR/hBD\>]O!SUhlO-RV!⑳7ˑIEH\y]s Zos|ug[XLΝۜ^ڑ2aD2FR&ĶZ_2&C1zn A@Ar| +GBXFqLcSu G$G{^ly6S[e) A#=t)f"$o*;[mlœý#04I% +%L,ѫvhe N̟MȕWi02О@ #åpv𬕚% H7ePPLBC^ + 4i}]LaUt͹D92TB7X +d2vsHY!-wn؝.t'6N\?RH˲63aDiCQsQaZjY\u/5&h9ɪxٜ\jAL_*NXNjs< (PY72s8T>adF0ax4W.-s'y^Ӂ4v0מ8")Ŋ$kdFFOTx=kesۇٍ')ȣP0 +,H$rI%|,3d"NU[x8h I/KUUkJx-^g|aa WO<Է_W˷ܹ|ޘB1Ba Ӡf~DTfofJLw溛>O>яջ{|ȳu/*(PH +xtHNJ-Dt.=?;?wܵpxK_oo>'թ1p0tLH7%Y3lAc(3l|ȑsq{=}ڃRkYYsОZ;t7'ҋ/߼߿_αkk0jh\`!x7_׿o3_zg?|o}ufpܜ1bP_^\هg>oo_W_~???՟޲]LRfUolls𑫷< ?g>܋/淿ӿ'/xG<*ĭRuMQL=}=S/~[?+?{/wWy؍Ҽ(VƸ h 'N=>g饟_W^o__CQzqivSaov{uړgn{G׿{7ͯ~/~铷ryccPX>[HXFL-*Վ<|w?{~O~?ɏ^~;?Ͽ/~7zƩRf:Q(ѝ{\|xo+}~ge`"Vf4jTڋk^<}cG/~~[+|{?[-HW Wo]H"̨Lef:%fȷ+O/{} ?gݿwW_?s%ê"5+I$éŅ'O}>O|~?}ϯ'_C(7 %HbY_Ǐ:?/=W}?{yOxW?^+?|ꃏ]\#`Њ%3VN>Wo7~7{o G?O/_SO=y-GoAj(  N_{{| __O?? ?s7XnSx֮3s_s7\:Yf9eqTy( HZ7Sû[n,N\8uy[^|pnފh%A{WA .2Gl;pӥwOo~W7瞾3313mDK XWLqUG/\xݝ;s񝥙>}导koWg|='z3x=(*F5| ҡz5<7}g_^|__?~s򱓻KNZm,'txZi)tj?ؽأҳ[۟^?CWn>nVDZM%|^4vˁQ4i#?75xɛn7w/|~/=Ч?藟rȡb#D'Q0!mfoG>g|?|{/}۟y/::ٝ(MtnCpH +xI<S#r^̋/}???>sFX`H{YEB p4!F1{ hK>ACׅa""XXbpgU4Y,La CH9NB^2 cp8h#PIXGdpa D8vz:yR9>ge9Ux"IU䍄;0t2T̂D*bJyp帔g>P; +ySIuZ:#:.^;.&d1) s;.G@&+hR^Zt՛=̥FTY.L S#.h"FFGn؅5t,d%Y`!LYr6՝袔219ǎ1Rմ +Y("`ax"ބ|~yz$`R1(`EZ NEq%x0 0.PZBOٌ, H!"e dU)Zc5^#RhH(#n j 2 %QD(਽V62gv9 QY:iD\ &틤|G xA0<%ˍL0,p5~bӜRT"M+4J!pa YͣޟRJ}!к!I kdžòCOQYK,W Q(1i"[q~A$ q4mK#'L%d;Q##Ӂ x!:ȏcXZ1aHt$#vz|gL;xN)KMUkT"VC{j^Ě +ՍY#>vIC.F ;3q΍`6}>GRiuHHSzpPEQHk3b#pBi^t& ZhF +_0']Axz,[_Tom!ccAtϩqYkkQD8^ĜÁ8aE5[&HҙL#fBa>`FhBR:a &‰`*q{:JJEnb4 @H ˆ2EhSg85GZ4 Ŗ~ |>z}rq"n't߯ۻ#a+,^H#F#X~:?@܄Ϫ`áH<:DBӉv#A TqqlQ\bbvD:&caB5߾-ǦH/DI2&;-ds>p\8$b QPyrqE%.(t;PR1BBC%͘Ī}%JSR-RMT{p8[e9zZl@ od`$$dFZcB0IĒ7(3)I;a *N@CgWChkTeK S .aat4sa:ͦEeucH\v:j/6Eb2A 5 t:p @  31 H + ~ETL}Eda *cP8:D=>%s W㥢/`8 +aӐ'%=b܄=HHE^!J(4ad'A9PT62SHH6b0J7u q¾0 E+U&K5L}v lh9L +JQp bU >>z' Q^440.Ɯ(2u;K +dh%b[X?Z +NI21T/P7X>s`{Px$aD|\ +R U@H!,|u;v!ƔV1u8( c(:-&s_"*ϝV`Y>su3{ 1P}>`q,OtNp!$vIWyPTW{'l0t}p!A@RÆ@dx 30&M +hf+֍<1qTmgLfA5'F]4G'g')j"$2`8]JNʩF*FU*qMep8$(aDC0Ԣmb_#FhbD' kG+a$4<Wj"El(nrM3˜l1T!'dA(2k1tP̤'N|K@ "Y&k͜mߒ h3@Ham ME!Cc\}Uz /WH:u". $,AHJ$|@KCFGQ5/pmOh8j +!ĔF<=MHوxx^B6Db՚Hdzzӕ%AfVff  ܔT 1Ri'SًwsZ׋v{x3s7_ +"2TV:Vņ$A`"/(}ݚOZ0M\Z(ny(h6/FA|GfWT̬AĚKLa{X`ﱯlzRQn7P #RĒ6hW0 +I]FRsQTqo^/e]`<5C׹c-^/X x +6\"=^mB"{.' H-5=E3,TA9hHoq2A"7HE#>I5/Ec=7YٷfP,w/KkJ=^TpΑT +i@+r5QW9Q,+Z z<` +&O$+Yhbh[Zb(+>asZ>  +&j=Fc>$tҡB=*YQlNlj>k,TWg:y'/\:rZBPq39,-ÚIƓ ٳ#T2D*ʒb4i!ϊyAҭx$IۃdqHz9vCc vD 7Nor +ÀĉAT3bh*d8G c\ D}[x#!Jll?9.Jbs:8R81rB֒2%Aolk_|x}}‰9!Kwb5cuQBAR+)Wx4 ` X3 ha$tcƂ8|,9gF-:Yȗ>yt'H:/5ܖ)P2Lw3{`<_}0\p;qse,xx4{e8<ϋJ-WYΖWfOv燬T +n2O.4a$6o,U.o BP̓L+I3LuHLzmz{?DTlyb'JSnijs(n*PRkϐT,[^>xKo BX>/K1 jxCHz7W]޺5\u`-)3/l]{'/\ydpZJTxaq&)g+KϕW'gr )y-)jGZAD­WZmhpҢmAxJ'!B5ݙCn hO~/^^6@Rp{Ao}Е}Feck,]/_׃D"?/<|fԡ3Ǎe!ɲ1'3 A?KS1MQ;Ҟ9tgBt0q$f U|Db:oAx1oA-ܠG@83Q$BSiD cApU$3:R)4&+݉VzξÒW-BXN) 3D 5){e`rssre ۵:ƘXzV{⸕"la1J$<)1F\a1S\M7Ť%٨1C@@^ၥkY9,zc٢}wsn33;w) Τ`j8&_(x{H̾'UJ֤}?}#a@PFp gjkg)6%I(hrs؅ri{y'jׯz""Y%Vִ'O_#P5456hJE I M-6cS k3 >~NZV)nD t!cܻ/ O ۠fmvg(F$9va0b)D-/G8V&ڂ"BCFf}>Q]ɕz.4bk4J/=v6kٵÅSשf#.X] SaH)hQ?&5P ,+V&/iHV*rRLLpBV2̱r{yii=2`搑 +)瀜0ҲE9HAf^r0t +$9.4O ^>|> MC0Ƞ9|̽T?$&sd5~ +cbV0( R%!CP:3ȧ.t+TQ)`1rKZ`pFFM=#mHq W|^ <'kDʒB~,.JFjIMGNա"4?@'}R(maeХ{Xo_Wph 'Gf4v!7xvvbsb7hB`n]oPD,A|h{vzf̾L4X0'A +r?n0tRenec8y}98"y"JP*Or]?"sst0I R(J(%+XhIkYgzU[mo{.T59eeȯwVܱ!x`1) $2g^, +VBdz0? +G#E{#ȓnRub +( +rQ,ŭkGwߊ;2b"{M'4w`eV:I+XXoU8/%*Phx864SOJIN 3FJgŅj^KNډ:4gЬ-9A*Fug kK9n# BAt"-LN/_K >19`O{4xV6i`\*&TT՜<~1j]VN8-0FI.R&k`H + LtAki (zcca@@"ltjK[Z~m%E )1ӵ8EU9 Na4 +OkvF(p70B[[[;qy̝[矛[knLV?{SqXuhu\q m Ka R lNT*,PL`V7fv ^"p,_PZ"9]-1칭Ze9Cے +/Hµ:@]W%OW'<߃v76w`qI+QMқZ{瓩ƹ?/ T ը_c U4iU# +S4GB(hPyh5!*p&:<=1;$D 8:0\ڪWIK='$]''v/?<'_o3J kWuk5ګ{ ͥBs5QZ 8fmw]Ih .'NRX!I xm[&CO?AZy.AiQ+mV_OfWol&r3Tya uEkICAexo4:Њq aql'/#,P5ߘϖzlif ~Z_U_ƼTJFw(bӑ)㲖?2ZId5-He^gA\C'" ++4須Hv8G4#e@ +l(U-L'R$"\ +,HؓQZ^{ai끬GGI`ǣǂ&B8bd.ˆÿ7VȧJ,e/esvQ浪̹/z̉9^ urx8>6ĢQYD:9xTp'4v>^= 9ת3u5x]IkF +eڃ@:ÕEQolU^b,nZ =i' R5@!IW.mQmn?[wrRY۾ܛ>ʺظOWD$2Y26bP Ke%9L1`6tiͰ:k5S`@drVˀCaft~`4aCáQ tс^ ++&"E$þWaiRu4+p=4ղ_mpfG#!&p;>:N9! iwe)qi/ٻ'OߋC:AE8=WZ +dT~&H2?*Wӡ% ת8P>c~',<q  @&iRd2Hb}ðK6ԛŭ+Tqr´f ;H̯ f]w(.2\&W];׻Swz{Nz@iɓtVTnj޽_cgx!j(6L- !86=v<:eI]Aqgd8<>pHT%PNxX6fo?{ZjڴPL7RFùSLNN%`YSїnB2Pʸ ,/d'Y;}Ԏbd쟛_upo [ +^^:={ +F1Kq(m'QHXG O4މ'0Lz#\c*H܁(eͰRb٤f(ҫfwQ"?t _3uLTjnj`32}U윐&"(>stream +Q0N4F6Be\\Enym,&CqgIfd±'JǪG$jG $j#L` cCo up,TIx-0h#(K ʅû{f3KEALaag> njh&׊X5DaIw';N:'8*˹KGea7J^rnnڕdzNRkԧ?QgOA2Ts`8SrR#x~:Yo$ֹ0KҮ5eTk9zݷYrM%sp*Gk2#dŬQvt`ex,18a[t^j{527јl8D~Ln6$J?1^?䇆`Kfofj78 fu$Y3퍃Dgqԝgߜ܋4{$q>8.0 t$BB=ӝ6vS̉Swx썗.xyuΩ{oUZ~W?v(duMu7V/FNTۅadFap Š;iYx$D~6U?s%KR{;d읟^|XF# I3bQfbVf䒠Nd8IQ|1UKѲ iZ J?9x>՝0zeŊ3{4ź͋ϼwte$kvY6ˆe6 CzҌ絁nU,0!N^O%$PMŨF^]ھa~>r'&w*'1ϐݺDwko2Pլ~Nslݗݼ +מ}wMIG_ۻ)0bس:UFG1Vzrsk<@Cb~Qyy;9-I_}$=5efJ7o>`"'&<:pЕKѨuX\fQ`xMZDu]FO۵n^ʸptL8эO{WV6זDxpy/ Ed&I#~7"-6'D1 (nJZܪ Ϭ_4݋KVmg$*eivvlRȢA LA0Z"m r X\GZ W[nt?'Sû^a:U[>lsRKLV8֍#"Q.WZ3I/VEhTdvڼP>v,>)-׷ {H8yXݹ/̙VxS%1֘ cTV.Ӄp׃~ v1G1.Ce 8z8z!]\2 ě\Z>/,㷇9GVd +JSYUo)ƄbUuן} Q왙]ٙP0tS G>M%FGqKBc4顈}8 S>> .EDr! 53yY E*jg7{ОgMlol7+/&sI&u`f,B,+2^0 @: >`ޏ~/n$Nv=)o[{k']΍vA ubw9t͓_zƟ/}&PT{#OLڝ/yx8qx6[_Z>\\tKw^dܜغ^ˏ&/&rs\ŚuF9iw8+dRp|QV YDГfv-kʒͱbaJ ]AH NhTV4ڀ&ɰIK)zE7@8$+3K I1g:#!cq96!5kK{<P K.3Hg-IA|ߟ҂cqdXlxH`+h48t8o8?Y"!Z3mLI25I jkubzsE)瘯ΉKne-E 6-KEpc00P+daٙ_>y7t'.k흹_oZnڍ+)gV.oݚ\<*5Wl_s|xtfRՓ^=qr}uaj;^uҽRc;?z o~?٧W_|(Y\L|~3I5YOϝIX\!0frap=nrjMQJ5f4 Ĥ&g^fm$Z֘:7tͬcx7Z]t-pkm'ڕF$J6S=\~!S$GU])Ѭk:];=]@CWLT(Hǣ0 40:=)a|[b{3G5QM{Q8(W$/@z07RPwUJ%rI͢TDf/Y6`n|wr;Nw=z~²s r^x3^Խqxރ/^h~ܕ[mZؼwoa"04Ly^pqҜSN?1sKYEJlL0ΝSO]~cn$g/^[tH.'Xc쥳WjM}KV("-#*h<:a6gVw{ےYȤT4Uj9 81%ysufV/?Ɨ g5j'&/F]24;ۢTTl&7fru[&XL鴛ӒZɄ&o  & cDcf1!\Gm9+50 Dcf G69/ +0uEfmíCxztu=(_/ ё81 +tgr-d%H4=Q/n$@X7rซv88d`,ȦDfhUp1!$Y wФaHn+sl579֞˗[2lu]8]n^k`$ 1.)8+emIͻޤ10>9r9ᦗS{3Q_ɯf6#Urr;/}a~亅w>swc +̝'{n//e_ԭ F$`O)>' +a+(F=s}nv:0V7n}\] a)UE*ܺ+g\dĦ\nW^x33b?/ǃ8UO b{J~G@ {:Bǎ!q(a{j-O[J8DL8.LE]AQ߳)*8)Ћy/=<4AɸA!.xFEH思Agbh ڳgN\x|-U +G9 'N_beV(H&%A F;[&"~)_ZrWK*|ۑ0ݩNzfi:̄ꑔ# +IMl42Y'Hy1ԈE%Eː6 >3I,ฤ3flF?pM纪Se$]#)Y>\V̥D` 󀞒IɘDTn1[^ٕݫE|k,E$3Tn:^42pJcOS3x.i^6Lofs98̕YKӘy}4 +pHG+폿.2~Հ~= 0zBbuTT6e!,4q\eQTebL̪$+y֞?Of-fy +Ē"Q$DB`s Œ ֥&'KK+GfZ aZbbq*Gq8&Os|F"ٖ,Fn]mmrK39?L`_AUOFd .)F-5eM1+d'a3 Pnu b,1#YߑHZ6AFЄ0 H8E'ʒOewAb~J1*8a +1\*jZ]} jX`f_hJFl˦ '"<{-A<ѨIpS,"Hdh#"  &pD2``1#DQ\_QPst@xqccqr4)tK>U: 3"ط(LŠĤ(ԄK%'.|?x˿y~tQ2),NC1cxgߺOϾqt_?{F)QVޓ͢tZ[?3c-*Rk]gsxj?oG<)]"!PDA$I>"ԲW{Y띇;<>ʽ?xҏ/_oU{Y!aE"uSڣNW.~G?+}~ ܏x/x/vk2L#F|tHM}g~݇ ~O}?p_~}瞫>wp/zz) 2m93OFgf^>_y|\o/}?xϿ{v dh (@PФ"69XOϘ.wo\y/<@`:;!U;o{[o'ÿ|SOAg$ecE€z:~[ܹ/^Ͽ~~ί{7߹?ڍ !0Ll u%ürBr7z}_?ͿӿɃ~37O8deh*7/= X^w|S?o·{S c +ط=#tuyxyK'ʏv?K~×_}Z]K=N*W#L1׾7??oy߼W|W_NUFFÃ4KA{5_~~'>sxe^LQˉ&GYI4h7<.O3N|?Ͼuw?~~t/}O]NtXie 4IBg=C:yQIܴvK{izr_ٝ_|OzoO|{K XS=|D^R^9[k}S??|N}pb1AQdY[zJ2!p%].Gs{'/J}~ʏto<8W;T+))Gb<l29N9gΧo4ӿ~7 o\vvw+9іY8\3 +-U3U\.KN>8Wߺ_Ͽx'x_ q(+$tɝsfp0Z|lk<3 ~ط+nJ5(h~EHI\ڐ󦔨3U[F;?;r޺kG_~4W+VUvઔMzR0- b*1o[|ף+bƨDiujc3ݶZD]X8;ݮ;Um/孆.@@A(lC Q` v䲌fxuyԧn/>:;;f9NB[+$s 4OD7%]dKb-e]IT4qRV}|CMVr " ZOʙ*A)m%Z`ҢB P 18)(ƅT @ax*[W-djgL,9I! ~m::+b- 5< GO|CZ(s|$ _oJ&=.F;gtG+Žs~!qAƩ;6E}< GߤB.X/3]a=h\Y!J2z}5ڨfUYH +80pT2~wh)fTZYv`BMRZ6v^54Dc15l +hԌF4 ue!P2 c(EY(BX081AW,JaXL7f)H6j ('DΩ:,* J1 u* +0O/cǞ~BUGq=-Š, :-%$?K 6, +dD/-eOv'T'$q YldK klȉB0ƃa^PZ7cS_Y++IjcN2* XˆH4SxBk S06$CA& -C/-/$HUYzr'L)K)E-ad*jAIb1tu4 MR^me%V6J@ jjlL.fFF8 ,F?A E'Ýe1 cȭrCF,%P*d/#ʸ߅Yk )X<(IԞh$Kʌ9͜s䬲2vOWOwOvp;`e+X`83.IZ p xiLST Y +`o%}$VZC) )0qJ޹j/Jm9[2`+%"t$SI텊jpi+՚`Ż,dڔW{aDw^r Nu^D-]p-Q"w"LE;<۬w.cl)pU?,>|eDvi)jj@f3o?zɶ4{X}'4Zp̋P1/Y!]o҄xCNX;xhq@ B8U奡&/[h3m9TnpVu/*ClG_ϧ{^| |t1g/?l]F&&1<5N.t/Sz c8c0B$(˟t9/8b}3e +ڀ]^p$gukp͊~0{]k(Hh9ʦ;y +P*}٭/NF*Ay=80}Qx0>T +M-pb'^TO`~A\BGOnNol@ 7A#VBX3Y:_K䒄gZB"iBg֨\e؀O2\#bzt 5y]<Ω +K8d~UwF+odZdz͵'``.r` +2l "P7`~s>{'+;\̉ƑNO?/6Vo~ǰyW/cB{7{#^J +*imQm3R,B:Z|jsHw3唶폖օA`Ti-UX]RBWn^<~񳧯-fl{ɓߔ/dsSպ7q0&P_Oo~V-*;As-/>mnpwgZ Be^T{NvyVZ(?N`M G6_2\ 2@p>*=zݷ;rb3% {5͜Nw>439ł[霶FKHT >^[)Gټި-p|Fv8W==C1&T4'čη>7WqfR?ϟl^om/M?__ J[FF0$VkGs[3ܭwto\MZ FONo~xտ}߭NvwVϷw_Ѽ5:x=n>;m'g}fWTs3 ƫ7V8JX9`p5?_OFjWo[~: c)Vc47Dwѓ)/\AlYPFxΓe} +i7+OufG;~\B4ϒ&*nArԟj{iOOAT=0e}PoWkfOVۧW_~߿~|UVx??bTĊJ`q̓w@ҾNOq\,Û:G^䋖(&Gq,lq>g>nvX_rf}Oup*Kzz~|0t_&l̊ QKTsgO?~sɘઌT *oST*qwqcp1Zv/IIIqGßa o>&@$ax]^;`Uur^Po7~}{ ^0;pI҈vp~SmY؇pӼLEv W^_UkUgykLwEx[4 "poG3d2Ю7fWw0:!Ϣ? WTwOqB~rah6Av% +mAnִqNO^}VNV3Aq5qЛt4{[^4++,w]k_J8785veXiywc Xb nE`h׵Y Rm|t+3ga•Qgv5}FŢiKvhizN8ϗl4ݮ48esӟ@Az(fϬp$Wp5AsxYmŵh śW=2M57~;f Y.o=/_g^ ySG@[vgawx7vVZR0n0 Uo +HlK(;t˓Q"GE )- nLƋgwU*QPm_=c>'%t֋Vlv7.$~(Lod|+Wޝ]*W[{_Ud7zZ2VEߟ8';7!uOj-%t*Y +&j7dVۏo0ٳ Ԟfon ʈ囵rwK ^ryx'ƚֱI\;J/;=>RQb>ls}p I_?~gn +޸h6σ`[S`lt>fЋ6e NntTו)90r}L OxŚ4{|Iѝls-'VRoLEzx6_q%Lb,l(rlbMҌ6@Y닧z'-.>ͣJrڸ6M/Zq=}K1ns7{eK٘0BbRڧ06F3Og˃/7 EUV d7~9 +ғ/h6ńaUGφד9-vA@\ +{P̩4>G,^ItP\;4 +]o՘x>l+*iӮZ1 1LbCAn$IQVo'j cۑqhoLju4[{<|Adv%@!F:T`2\%_҂퇅j yA6(J.+IBYbm,)CUY61E(&$8*[$dVqQ=v%B$CԴO84܉ '8(qi@Wh~:Z7y7->gヷ7`cjӌO?ͫv]Z(hjmw/˕Vمr]l̮>ƀl pUkҾr٣7߱JSzL{FW\+7[O wᆇMK)}Yk5!+ (4k25PoɁ mgciK%cAa{>&`)\lRV>, E沌i+չ>ߴ!EQLЭY H~.'8DQ +CTҾc W-B a`$S <ӊZ6Ƕ;o ?\caZ*p5EL9з_ڐ|yy(jc66"fưM7l~*(./v1"-*HIo_XFO'v0 jV2\{s$;2qu ѭ +n)Hjӛ DM+Gnk{Ip8 tWȒ#( b+IZYщA Cf5ye; `,g{ kx8hTc;~uv׿ܻ>H.NpNҡoS;"|M9d @VG+`Ms[V1@)J{8f.R +@j9^bMel9j +pTXdrF8cp(##8 7dTwLbɆBƨ2NjP +9dUuJ!,<4 e"ɨ{֩|^'xs}7rG?9,4,Lf_s檷ce~ F`n$[Cw1>6(HTۖCiZ@XțI Qx\ jT.A@z͓oH2r4QZZP!@nLOLPGR(\ -1f'~upS9#O:cʁmR6)8Y4߲j4*0tmPU*T#)C|Q_:6+MiU*%xNHh4UcSS~}Y3Fhoł3E r|v6fȏDh YqO1D' ŏ?!29%8нð|]>[_?yf +/dbfC*ư& j&TQT]HZld45{U{ѮM`eV-fjƾL/_ m&dB.|afIyj8; +X  6x,bQ)'YjƖnXSBAlLGlVA]Ppci<.$+u^NT6g'XO{ j(~MU3xe%4 Mg~6 b0"Ա6qz( +Xj@H +(KYm?p6^f}IS6 bm>>M^,Œj U)2-C L5]*p3H(MKE$/td}"3rbZ?(jUV֨|A=+MgOP9CR*iQy+@]KeD(%މr5Eͮn7)-Qlc̾Tqiށ-h1~7?rvK-XD\ q*&؆hUZ8R+IbmT/r0QZP_ $‴!Ȋ>X' +9VՀ9[4fW1\kjEm[%ֲlQeIS.ǸDE UV;`4I .\~m-Gaǒem,('uW;DgbL Rl!Hэ\ZCakX\˻ +zeG"Xn՛Kj>'s +lU^JkpU0],BVzpI>TVhbjZM߆2xu |eE[N_3X҆@[.ifC41`g pvgYkpQia+fKaAh|GTN=X,ӻ˰(8љŽUx +IPND7-Vf!1ԁ[5wCQcdYUjS$LMPZ=?Yz"k-6մsTKP]*~P/8k,CHv,439-_X+;`YI3Vh,$8-8[m]|pRfErj[R3 De L|NzF,JQ۾MAhJ}\1e2D.P\^ EV꭯%)KxL\G!Eb.n9 y`#&M+KQ18T٬![##q:.z^l "xGRqx>Um= +s^RꅒAodh2fb촲JA޶%]"88.$̰veڞFåɾlAJ럛7+ʥMtMi$&P9>8mPP@T2$!'(5~dWm?vcݚ{ZtV,JNq @ w#6VgdxUmMPTD`8E,g=X9ʧI7 'kv0Ɉu00<ϔ_ޭyTC0ϛ85t%?mx@J/$B^SMm|"oL 0#"Qܒ:\o]8,wJ0 |qK[xix` " Qѷh4_ѝI>;+;ً+pZt\! !'VEHEL/V߂X뚝G12(a [&+ B[]y}]_vf< UBc;mOm2(nQT`SaS.+`N"j\? kggOPm\>|'!1|+VZNV5Ű Wrh@7?~!$ծfB!P&#k!mW@A,vdi3'JZe#U,ɐnQ2qKUZTE19E<(@0 ML_ƩlecݚSP(iZirj)p O_q J) A4}Ti\ Jk9ʖk*BX8j ?ڹmW+UꉀKlr=5|58n J™e QL-m?G!,C4a!qdj㔟CI[6wtqbQY_Cqd1T Ir)pB~bjH? e5L8m>Ehd~/;$]#pcY";+[0i0\37K9H +I^h5Hː%/J "0H b 7 #tG D]8gpCqot\.\N;LDj +7h&͛IXᔖTsSR(aB7ꌟևyOFaBӧ@Nh^H&L31I{%D@UIqQ.(JbʐR7r*#Tec.{֥gbAFɄΧ.§ښ>بB 8ryXے>!, +d!1/L@Ŵ/I(AQ_W=RmO{@_ [aX6zSzSZfuH|@ihK:tCM#KBָ,Wc%$[sEiYZoV7$,a>A@匀jpkٷGHDt cW> W Ѻ +E fRT)M){l<T^p'N5 s>N^t nP,jND jH/@`ҒLJ:u/Jy@'@+)}zjn+?r0|Bb~y,]A6ƕrH^o396H!Q*quZl]}H1gΣsҢ.^PyV;o}m"_7rza117cp%}Ɣ"KjS+ȷ-u,@߽QV%4 |#*5QMxS.1áK%Luk ((DT2OrvkSl.<._L^T?5mN1`/xVb,<Fę|@InyPR Otd @XV ɯ4w޻  $hzC\cy+bݘf 9(f1\ * ӌ>*:<aHjKַ}AhQ~s~Ӎw흨ḅP͛K˳T͟Sb`Գ]8`@%ջ IXr ˉ})Pn6K`p J: "ӚYf1ԑUsƈ- +odԍc"4QLwkS\D57[1Qӝc.kktRVzfLRȅo.I2֑( p= +_SiT? 4A9\b +bbV [K7Hʡ2 v";(B>>#dgq)P+H=М_B@3@=IrHSKz[B#Lҗ̅ Cn0b@ ь/qQ %YU/$|zcJfa-hhi׊Y#A⡄^fvR/Ue: UQ\ I+¢߶:dt1wʋ糝O]"1M67T A5xl<)+L80%*;#C@EE[6`Nry`YuIQ42N?䄱yF Ed6*z"HuvmʼnM, LgGAgX@V&z-[2H8f-orZ6#KgH0\ (~AZhhE+`J!Y~฻(p|UO +H̝8(Fl v|#}U +hYmؓ'po\ok0H5а< x8Hr1|_/LOSp¦*+5Qwu{.iSGd|H (FিdzV"Pt(: ~|R}#/[ oX3Zejg} +Y5W4jxY\Iqddj6DҵA9#,pߋu{B"X!C\Ǎ>NB A X[dn`fU}h}>軵 1[Kxy-5M#}:e2J%)zyfM쀾q/1hq"tMZ^ͧ3X~)ِDTNAѵ_2̃ EOgOڰHń-(RxWG3j `<A=<3Sbm8zZۃ.P TаT zrMXf@> 00n\SP3wLH:Yf#a.ژ x)|UgؐX'08o:%PIr3j@fj bJ1; һa\#(1H=C8 +U0 +Z&:TYJ⠧@́ +AxRNҝeqLJ%7[ `(B2uSP<'f@76QW_Z$O9sbF}N5⺒g>5s'{'y몱lD:*;}jlAxĨ'۽[q(hVn-y nI0{ +@0Vɻ習q5 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kސ6 kW2俒Gyq>{{G?~3?՛?¯Nƛo|qYN'^__hřa_[et}uuDi,_("E]6>cukw?*ӟW0 /LH㏌ջW^9H.~xii~zGϻCҁkvt_t1ˤD <+a3\6m-xBmNRL SV 9~`/ :J[Aϗ%i:CLی/q sy6RZ9) iA +k %ebN$'*yŒA 7Yi8lt`f/+][JƐ%V +J e_QPV^""f[<=+IRB[ _X7_TsyuY.b8W\:%#ӾtMM8N1 NUrvpV@lA5T} )"K*/4E,PF깼¿"iL=42xr "KRIӲڸb~ K%-Y}P?[6Xdb.40%Pqdu" +%ŒC(rdLEf2z]'ôx+Jv؋&%DˆPz3Np@ot%_e19bB8sbz Z#_Ω꛼<88gڕE|{Ɂ=DIY"=pOVa)~)nPE{\Cr5a_Aɀ`Yzj\0Dg{q]>>-aEV;_ f/P&̗tY/%-(a4b,(P2>%c##KsU&Pel"k0XDLplOĦM@bIR@J&88e{:InmEcqp=lxUG8մSt :1H` P$!Xңb1-p lP8jta$o0pfsB /KFV/bA +, $d8 Mkv,k~ /ôUdi=t"4m+*i"L}YPTXQ~7E~tbϋM0(Y.ek VPCUA:CZLh3=M'=pKZhΒ:t%R-"Ԁ$(lUIPR-||#n7?k 0֥bek(Z#J^$ qO5V4HLD6͉ٜmb(p"+Y* j֊lAyihfrupfL!hT4rY1e3Zh*rQ\fC7 S(8G,?PՅ,O% +vc +Q S I!&7LE'8e6>yC-c@W*4DC gL6ejڄ ]ߠRk$)ZZsG<(jN H hQ6@X 40@%T=e8Ymw$fJ>'4)cdhmi,El 7em!kлL F帴U2 SPP0 H.\.'@J LVZ9 p\ 2@V$C?xXQ*3׳l !N+cCD$xN8)ocC  G7c9%cQdC5kA\pBK'6e(!W*d4x֛#^H&_$dW}.W@ 5y+'h&͒-Xbyq|-+B)utxxP(^Wx,P8 +CUθG> +y +*uBǣB1pbI6!d+H]HiǕqL7htyK^w86&ND=_ +aI3jRߧ³d=A4WE.HΒZLh'x>^Hc3X᥊b4mw/fT!ux<71oڋyF,+ˁ7ΰ|qoOnM얠Tk=+5u)[Dv#۔NIVd԰L;H'r ൘C.[UDb`EO1Y;16s3-/G`.I :^1x6︓*kS7P(٢‰]|1at\ʐ-~ Ͳ/i܋q Zé*R+XŖ?m$!LYkn H>K@?u@PCёE+ ~ Z}Z8x11h| +^(IK0uhJj?cl0dAaJ!> `Xq:irA"IU+qwêz;Ƨ9)˂Ͳ\Ab7Y.qznZ֤b|!̒jtD.-J(Gk Z0Ajp79՜!6?sK #]ZТ* `\(yAn̒CbfE/dz9u?L%((Tm{F18Av0?^F+͔euF4U.&ҢG( pȤ!<, +F0ƼJ | Μ2_D̑0\E"p:@GI: zȖ`<+F +0=T +L|8KK Z +&JdcTۆ2ss7zqX4-(eBӍ=(h-NH8LaEkϲ֡ł/(RiY)Ԃ"utCJ`;$D KQ&} F(F^k&$aR; dkn=>U#qK6l4KPD8pȤ$Gk!C +(Z2̌qx&vB\WAU1:$%KvEaD*ҼNJkFĀDMFFTfllufC@ hߐTn[{pvj250ppLNL Uo$s\/7I@䷲Q\̔udѲ\r =4#پG hu^߀9άpR92rEix'zqi^wU[XNLR,tnDE)![IgN^6c1wl'O(b=$-Nt!!$x Dӡ#C,;DnZM<`Z A!"Q~3֊BtRʈu R6 uKˀb4 491c Bz`!H|!;5:JN燸dٸG1f$d2lNQ;^&y!>e|ElFˠtH!L4&AcƱ*mN,d nT̗67#ä%ʲy(:En)?}.Mwde*jkUOHe\*3K0Z}g-.bPeW '᪈c '"_@DK8B#L1>c-Fb$`ZhlvHĈR.DGƅiuh +q-4et42@e#{Q#N(렧`xc836FѩRӌwy0ɑ1 +QTf]:t^0vFF\8)i"5͋ٿҠ'CDwԂU6E$`@0cQ$]i;6# AH LX)/#&u1eRx426N!%R1\IS rO6 +X!rGL ˊBjN2<{K4儼ew94rtS2* Cq#L C0_LU5wPKx@/"llZ =s#m*M_Fy:B2='arpdG y +țr$j"&_b!$48M{*@y$"$yXG]$kÂydL2ypx͔PV44Qd$ydU]E'g rƕ2&ȓLzxم: YZ5ZGa8ʑ +ͥ'˄(]u1'ry(hECD(jEcѤ,UCT喓Z;sCWgtN֪܅(b$ 12ϐ!Whhq]\\%|dH"ܯi9Hqh$,!ҌQʡD0 |:HHS +4VWt˼Ԧb:G顧? B=a~2Leh P + + +sDC8`fL `5IJ1:'Ag(LW IH4$AM9R4 |Eq|u(<(LHM nI֐`QWzqq@@u,DBF*gAh)i."l° LAmҜ A)~G&'S˱Ubq_HK&ީ,/ k9Qb 71#lr|AQ +Nàh Z[S澓^~![3yC1RDq%+tkL.pZ14[P^J}HyAG) c&/P,4ť8ΪF [aĘ'd9$̩@n>x}|2 +*c/< ڱ(D!#hoq2 g˺1CfZ $T:M UAz Fi)PLpAf#qᝠM`JhA4PT>тe E6e(Huy$.N"ĢQG& 4#>Q:Ȁh.>RD8 IP"T#7#`{BS3'Ⓚp%+cIDQ >D؉i\,,IPtF૊ܖ5z&B2*adAeVLhىIϯɐ0rEj6=#7Lr&7RK [ ESV6 Vy &\17L|z=ƼW sI..#D7)d)N8U wCqd|X>SтogapV֘y0M.RNLx!gX֤2ÏLz!< bA m*rVP_;t(xw\A( +!c A@V|8A^cԃ܀(+ƒYPL`p|~7NWr}2naqR#1Sh7c|\؅(YAig` g ((S:|CG8x2;ӂZ0PIiHr 8ms  QsT$N40QAcfaIi9y8bi)fEq)Ci;1UHTL@hą}ec)R!Sj~lEmJM @>DV +C < rD5FG]`0~ 2Cׇ<|(@8x} UQ@!X ~ (끬KccCR27hZ+L<#/8x r׀ ^7zؘPn8 0=F~d$)z7!w4$}^Hm8hKC$8DfGX26 %` %룢$cȼa20Ҁ_85J%#t1b{J$33&ӏlg0,G _Ga. H:P( YúU(:G?֎Y$It +gD$GېQ3NV{4;Lf1.`LH(d̂*v-&S1*)PPz@k. Z + yc c c.F7@` q ."!4Q 45G .DΊHXhz-o8@"c}B+ZIŝ )NBoZWֻVrͮQ! K(.J  6:b!WPkW X]A*F3n y)H 4/Z:^*oiFA>ErB0HCPFlG`sڒ+]4W !yÞIrC:7U'e}(iSPQ2i f--LJ Pd6H`r $&{@vd]hB@j D!TQp(YARUʊօkl2pM"+OC'Cn-P^h.hvl"C^CW vb +,9 +"(e9`Ш c\%D&<#HQĝ'1&Qn$P܊ 'PGAw5;;4d%DV/]X)w' +k&7y)MO JA'Udg%,ϓW62xb0Ӛa/[چ7t ++=٘RiQP;DnD䤗l[*VA%Xx(FӰvjtgE5-C:dʢHq0%B.6 +%<E3 (&r(/Vmw2068˵B׀@&o8S5qyRE9 ;5V,<!AhӠ"^ +BhČQQ*`8 ;H+\p! O@,@E(8Ҋ$U-*遙h7'v YIsb: _j$#C$*$TCD_R=n7(ČVa5},S1z9xh_4HœlvL"7Zw ]jm:u ĭFojviCӆ;-$YX^i +J5 +RNzJSUA RICS'5e&ugb+UI֔Yq+Z<1'&8fV,~wg82 +K;P[Q*+li9_^ۓ`@ؕ6/Ud{4D|>7wi/JrM.fOjji&Ee%;\y=_2SRCxR\SL+@f:'5$ KJ,֒iKR |b"'xf*UBMfJ2#1xb1nO4:@5PFB'&fNެv׎^jSjPMTZ3lj[@Yo&b/x嫫iv (YV1SnnV1/]I%NRk>؉'ZHIA'ٖDPʒ^Ӭ.U(o-_[X))E-NMk[ґZƄ>IN,nrD/B㨕4l ;d$4{Z5'sٕKfjPt~,P59YPqw*ʸZgJZRe8FV*v?D1BDXKT!1ʭBs+_[ÅD1bIFbHLsuppfR2JjN̡Cs`]Q odPRgJMsK'fV϶v0fdCEW*ˠP@Kx(Zo7mp̥N+kN[:'1 MdAYwZGʍc؉P`frJ+[:IrlڰZʲ_̔jc0f$ +o]Ձ]-45LA㥊]׎v.l?tƿ8|udqLʝrp8_noͭ]Y;~w+eNKjL'3'3N:V ])w$[N<7OO;Gh>(ZΖVS皳gSg卙ꬕjnn L/WZ3xa͈9 Uvr*_v&ΈZU+vCN;_ۨӧof T~9_Yo;S +`ZhehNThny35eggsU=1ഺNI;;_lVa)~krt9|mfǖwo>}ΙV6/rۭD!Ak镛zg+hH̕uh"^8zCvN!+lm3˕sh1O3f&7Ԍj ()z]=qkxo?g1^njLKz?F-9`eA +Ӆle?KYho#_TV|A5]̢^ 36wĝV MΪL\ܙ?s။wՍ͛V޺sk_\g?٘Dop敕cwNnx֙''N9<^3fŬfRy8lMwfOJ3ţLfedJ j5.i6Upv!_.ԏtfϦ LaLSŅJpN̝ؿpޭ`KjG',l^ΝiOtҥ7\JˀDwlsxYھuck==x6&TqU6V?)nX6+*5Yl*˝fb**,ŝNҙܫ6dWVKPŋNzXvhNfkKj nGJsyjl-/twzp]ظq]kNJuݚ1Oe[,oݻumeZ1yz? 2qiĽs[/-\[>zG2to|;>BaOfK+{.Y];|= f]@n}W|MG7/KJ՝o:u&n;v9j +򲝞v33s^z x^ I _+VO-_bI‚L͞zw/ʭݹK壷w8NnUVšTX!/UZn=r܋֚>ޫ[Rm~ze+3s+7˭0R4-^ʀqQƑ[V|cp5qbq}wCvwnxӓ\<|#2'W å&nJt@@SVf9Y,֏{(Wf\*? =E I(D餧k{;b\K3 7(-^w:3 ۫ N-C616)H`XI 3E 5s1W?*sl4.W[;Kg N췇k=_GIncD}xrJmr?UZA^y·Jޠn%Hˉ,@;rug_9޽-OoԽg˝wVQ&2xDۙ:1qexJO^#{x?ҚU7 +0u-S\]ۼ*>o%&$cwZ}v0-(y^Z&DaF6jW̮̔7 +9͚,7L~X^Hf'O/l]*%Il][ٹybBf&zV/huh*reVLf";B҅Fg icp>Ko^߸ynz~/|-ʷwp,)6Jc*}?| ן_q~k۟xz jIT +`0|n~󆙵N~(lq^kN,^hϞ2 \* yddrs^T*51\8ә=.fOY+֖H ]MxA9:F*R*gz;v&nɔvWo/^sӽ[xV}g/uk*S-ݑF-I-z꽝K [?sduq.?5,BۜZnJ tiY5j +ȉʔ֡\ZsxP[ۺ\n\E$]9ƫΥKkVj>R++¬a϶OڹyÝ8V1|9nOf(6 }3 7L,X87xt'՛nLU3ODS n8|[k0r=Om@ZH75+c#[0p2s)4,Yx#2E[քZԡ5^pRN2)VL);ns8[mꘉa2`_1fg?{7ߛ?%? +#ˏDwbFٜ'z|$izҜ)'2*k7jQO,^+v&vb"1+"Q!%?۝>;\9ByIa+IOeQ.qBF{=$ɡDg{wn,WQLwD2r[w kr+xZm岍'fOWG*]J Kx!/?8vkH$ӳj+w6v b).,_;zn!-iWsDIzt3,VgWQ_߽Yw1fXK34xmn>et$SaܝC#\xY-fy݁oYF +%8PԌ~Q܂-8XG)G qjJm!2Ft0[*Μ:y%%\2rKfrFkЋ̯]>qz5w⽍&Jn|i\CfG>zҙ>{mv /oZ,2rp:Jqh>p5!74 E+8.u*MQo!tÊըΖjuPXgeu>/4{{%oKɹZ [SRŘEnz=މѮ 䲹i2]7*ܲ:-eZSډ…;WB231VK-봓ϯhzJrUVjd({ivcwl, IN&egX6 Q}y8q\q#s[gc%>Az|"h}ONڻDd۩fͭ_:v֕LaXz WTAƝ)˝W 0)E3ExzZwgBw=q^PH5êzK5i M3C,Ϲ^I.(:iDzJT^d+YEhbd2L#R z[u僷ȢTh}~AW2̾z4fGq 'ei>/N-_YظifZ{G:Q:D)fLE+*k^+kf gŴj4jXDr\]ֶ,8(W~a!tYEYLTu=ajat"@@cT -E$O6WSK[OݰwiZ4LNrsZFrvj [p2-7׮un񭓗k*N5_zg[ͅ\a # :-T/*T&ʴT|֘n̯v^sdz\/GiD( .7'%I6 ;,3k*BGOTsƉ3URt:x>k|ǨhX+Uar>I4r{$Y\FJ*#-[T91֜ZwԂA;b.4)*f)Sv*/F!H7ܾsj:G0cLqITiAC0!sF&h93=y1\| *!lQsnUHCE55wyyTv:-( Vw;s]7Lɖ|YoJ+|(lfc!8 Yw#煤4F=1oTWk,WhJ3T#;O^}=~c__}W|_7==sB^93_^^;q-mw=w{<淽O}/|?vSWU8Aʸn2;b2Y7w7mz->#O>}ů|/|[|ǎNx1A4Ip~2$rZgqe{ąS3+G6=}g_W/|w=4ETئ$*~,B!ŌBkr;y͏=O£o}'[MRhX7evw²ے͗dw035yܥ{os}+~k_v#qA3퀂4 7F" KJkҚ|y{~-'_Ʒoa7b1ꪚKc*tS.OOMoqʭq}?3җo|Ͽ׿/~_7/o{R_hw7斏lڼ+O>ć~G_7??p&~3ͮAd1~/<~_7_ൻnlI|n,D }~䩷?szϽӏ_O^߼9Wwө9#Εə͝7\{s/g|W^ů^ÿnSrh4&+$RN$=Ǟ~^O^WW_/??ׯ꣟w_khK,kF][[9voxO ?O۟^{W_{/go~s{N"=~h(yS/䳽`d~aܥ͓_zgo_?3o}~42.%gN으7>k ~ӟ~3_krY1iSMfDwԙ7>Ʒ</o~?O>>]qF)?lwjvt7{?|3_ ֗_}ӟ_+/g?;_yo:rT2i ˩VnЙ8zʭ7^so|^/_{/o}gkz׿B/< 7%1+ tjX*rPT}3qė>o~[ܧ~~???~O+r}!SpyiksmƋ?|>?{/}_߾?3=ripP"&$x}Ν>>O|c~˿ÿ˿楟/ҏ_s|?POVIV2fڥ|QO|oQ~wuljcgs^x.O&zzseuag93)ʐ ͺ r +ɱr>|?o?w=pœSPHXP Cl3#tṷ?^/ӿۯO}y{.M;\R +, YrSrz֕+y_?#{s|o&c0(4P/S 3c>;;~xm'zӏqv3܌' <5Kݳ{x]}/='?}?{ zCCMKŜHHY&& TYNllnS6[1Z(cmIJG"h xڑ$G +a]5*G ,qqA@HF4O!/R-/rt)9H$6npK;{ru @GUFPX GT˪d2]ωSTqJ7ZW7s\5_Xh62#:R 5-)zud4 tQڥfWҩJ*dgqկf&+' =(UMR|K_?JS+7nz侻;5']p4>SA0>]U%F1ب[b'*N)ՙDܬ*V$z/Gc nGr,cp4:7_V>9ub{%.T,g\%eE)EӝLFTTP!DVrF np)IrZT7F)N0cCKC3d7핳X'J[Vu7;ȕT.Fg\XqTJ-*Z$$a ǘJU6al$ޡcZ$JjYvMZV$[MEIYNTB+7u&)QJ)j6a`PFHD2mTuO&ie=AP JV% X' 0a,째vKѨ}ky8d +|Ow*E1pԁrݚ?{r ¦Zrޔ +.5y9^-PH-c8q\gLͭTj"(\t&ו,d tsA*Di'>[79̭Tݽ+R 3;yqF-TbjyI][X uMΠV,W"A; +*40tJHxTfa|x)/S~_An:^r/j Mop\ +2Y֞d<$GFccah0J|PkĉqP(לN,ZnjrK׼^arpb''4\ 2V6PقiO5g84 ++1\ڴ;FAe<Cr\#ZXJ'eѱXu Y؜CpX!\}LDŽ$dnIF"(sE>s@ aR4&S|8*-9!+{c#1^uᝎ%e&x<q| +0Y` La%4-NHZYΊlzՂCr^5X:MDȧE5%;9C3iQ fkۂXZ8xlj,.ё(fꍔ4P4(nϯHr +Rwsi>%96zbLTaM֔Z0]kE.yl0O5{vz2W\?SmFٰۚJdf̼)6>x+ Y.cm'91a X[PnvNB+%3a i 2Jsl9h5-EíV̤{4mS%dw&rDjYJJ:;k!Ly>b;DIBfR**~sX6JEѱ( ш2E'V:H Jcd`#O߶qfOP +DJ|֋ctyŰK3{=ʩ ef-rBՈO%[hU՚DRDTRYUcZV-7X5![WX̅It9)($$\Yv3{{ﳲGB( 0h3mnzz(J9#p,0EBbs0t`{o?F^4:a,Ffݙ9dn(RlVw1=n_\Ut)*mZTz1V|CXF_0xhҲIw(EEFmGB$Rt>־ >0hCb*K31IeNeW1S4pBV W1B8G#BϾgR+Va!)2GQ:>ת\LV ++Aw28SCKg$ËdzCV;azs$]ĩ"VEb\vy3! xru[QJ iCp$;#hl.Z W !\+9]tq!BAI|"#  Y0>c7~{ +s~J$NX "1&6yrtzE-r􉬶$ +EIsR m+< +RY6$ɧO>V 1fh:Z+E!/Yqb2|cGIܲT)&$~"E%ȃhEH$#P>fgЙi.8W&0$ + (1ԑUieA4Ba+ { @[aD*%bmgB2__nb.' h==ۭ}YzVj-JK`jfwf{oR/n^UH’媢3RXpdATFb-Sm 7 öF8P:)kulP2fsW_ GT슕^XI6ADK/$3x8@bz.3V +Ķϳt2T;.N%"Q@E*g@if3],vOY)-~ ioLv Be+ç`U*T'zmx!}AkA"^',ܑn6N{i$ug+E'ffbT|bOl"% \1/y*YyUs`"r]m+ HL03<>KL,_LZW^*퀸KREp@I|f&S0)a|2^)^mɅDn";Zb'Gv?z;[``RPS7~ ECEu~!2u7;WwMOVpm6YԸX O/+(imMUpU :qFyMwV.MVT&UKMj1b +m$f*;TiBQFFs|GкރW0v2XПY'Z6S^O6='x dhs2˫.}^]#+k7!%9_jFKۏwO>@\B1*IqWB xx< @v4ęhӍ#3 !i51N,ZUwƎA5 ÁGQAy;6~< +qͭRz|,T!efʼn4/) +u“iPil:V3= TlgWoY"8/T:G+A yPzl///L\psar<"3 06˥̂,O;'}4X+)lpj'FA* #41Xy)lE +UIc=: h1ҫ }I cIJ=oxҴ SD4MIk=sEZ[voW[q7UP"A9%2+Ʈt[gwv8bJ^o0_Yvg|4`X % 3"A\2'׌ĒZ7_{ۣ9RD _5;jUQ.Y'ܾnO {xm'ó_|d]?}燥HMOY_ɗB!1\rl%,+A|-]؆Qgf*<7K,ʀQ{'FCPpm͒q 3:`-bDpA%Y&!Dy '8 fm;_xU|xaImպǝyX}{#LimFl`qŁpq j>x ƍ;=V,\$[ut$'x$x1p|]Qlm_ڸmNrtFǃkVf1J% J93;GrpukzIRш0i+AIR5[oofkQ99 + cHjݓw>xww!t1)fl6D"N`L0<ʢ\¼t$fj7Sںv{w~#]UA.Pİ8E-m083@Zc ; kD;,&GR"ƫ}FsrdArTUWјշ!0ܪԶ1T4wwzY:1\,Ta=CD+M% rEN,Bo75{C۪s.͗@TCR8$"hX] +,d۽W +D^^ˌf2vGK+{Z WdS$뢄 a4iҎPT\o.6^gDQ("=G2#`ۻ26k7o<>akt(7ߖF2wk[od4:B,wрD&RbXy tPw\ӊ\*'XaPZݼX@P30;GT@Y >\0Kr5[˖7G+gw^pcAovaڃL~PwE +63 9Ƨ6(4ҙA8"$'{OKwry +W?a<0|q,ڵrt{Mb/)1p|rW% 8MH2<Ë_Fᎄ1۽f8}۹-K EJV+[祲e*j33WyYLELLQD<d۝tq9]^EjҼ +;\iu]w Yx&AP* +J#p%p c @͢TLM&CDtڸrmqNSl<4W>ǥlBpVQ4aIMKrUa@x)qUH _ f;dz<ٺ6h0Өd'_ሄxT!SC H+Y䲨V8! ,_?V{ځ"fśnq2fyO|ԼU__Uã ⍍͛|ok_z# +Y(_ܼ(26&H":-0"ԋZBRYCBޚ3; H$G)Jp{ex'On}> Tz(gb,kqBK3"`јAd,h0"_/t&$i.OqyhZNٹs=լ+j/4JK nQ zucD&Jrm +: +,yݟ><}C{W0J^RD4E暬 t\N:3߻o8 Ҹ7M505M@r>jΫ1n,hb)#)i. {< Z)DOg"mO\I65pR^' +3\;8~tWD$Bb&"WkyNa];iu7v%}%⍣+w/hD"d% U1lFUM@)m/_f!B\ WĬlT`~۝Ovy~*&gds̲JY5̦7 O3`@Z,bZְo(phdsn ̃|b5bm߈w)ͭW_(PRa\,͠E&0!y;х29UJJUݣd$286L K8tT'GhVugh54Ko< +R\=Ol{MR+פR i5=}ٳ '+;mP =.]\hHM%0\$(+B7^*f*`k˻nn+⊓!n$;`эw?? D)2u}~zf&6?E#<^$$)CNo #cy=5V"9Pv81Bb(fsBUVZεH`Ph,J.j$"@)nۿZ}7M.HDfr{;$p4{{w+pбX{y.!&pW(+A$Sl~%(j\)ު{mkw`@tzY@77^z% +aLpn@LKAoDft(A'Tz)Sz5fXD&5n)rB!vrGP"l2=|o\,pz +&T_V~h:=jPuóA?)׮yR z4gEL$"BPM 18me(6UHrsr*'7l_MN_o^dT(&Frg#038 2em):Gǐ B}ۏ?,>yɳȎ)6pEZͬ5wGO܊(:ݫ~<9Ь@Ыolcp#"34#Dc*/_,TX> z2WX8;r|s+Jm74ӦFtőf`:\L0,z МP+5jGP6woGT{jҽ>"9 d^Oc.֖O^L] Ɠv5Wp!p+TOlBQ +y;g| +S1D ,ipCitiջ +H%J+9^ +H( P@B[42T&@P`QH_|i+SAjh]. +jg8iC+P]KJAi&խr xFl*k2ܸXfB UE.*N&fgBp8D, !JPI%EO+k[ϿOL^&9~wexbM =V(ňWYK~? +"ò^Lr +j0V(ҬuFkuVěD=CZ,ld] N|D:NjWzSY)IeòV*#1tQYy  Hy0u깬wG靧wwrPÈ޽gS)A@T}YDc C,n(HC8HDuK+ .E߼Wewz܄HV4H?xO.U(;/}gp h1_ /bҪ':Kfg3QQPfB{շ *P+^JdʤtPoR&UXvTc'5o+jM,4;;Z<)uTY@ +#8_+Z.|!ejхay,Kţa7tvw[_ڽH6nLAZ͌-gItsDPnڽV҄_U>-g3s(X4eHZ;S.0/q͋pq . )&HU*j6h setZ|0\_Y(nwz{nM.bHNT1Ж@#mй'׀+5 ofkW^9}vx拓&M[،3l霷[N%~C :;Ga&[0'8享PHMaѐ +>ɃpUZ*!)cj)]Z^ںs|C wilhH19N(bdKEV$)D#"rC^ƈxa}xʍB猪UpCPVQIWVl:ή(zX~[~镠?@GId2ZE5'2Y``ʫYt~RZ۹Rbd[Wݝw=oXdbX"zڅf`,qyFKG?7"63 G9r$]٭tcpͥ/~zᇑj%کM,wn +bm~W{i$2pi +JҰ{CdoI퀐GٳsL0!x2[G`t'7_kyN)ʅz{?`X5p4%)~1`ZXWsh,*Eb1e Bq$گɚ1 H$*aS+4Q^];z_/c9LWj#I;(SLֳl +FB2Q~Pqz&FT$ݮ&-j.4{`*qKEͤ6-H9E+[^I4ZvWᾬڗT+y@$u^h +Nѳ]֭Y2?Φzϼbd=8ݺ85njD6UԴW"1bO?|`Za)8QV5) QoVl +Eq^{0;@P.*΂0v*Y=^۹Sr|/@P$5 2(Tb\vL_6jwʵ̓ݳ__l]}m{G'/y|qhn_'_"V fvZh,>5Ec!4;˯fHY=>RvuAhv_3Rˑ|e?>Fseaϖ,N8ܻͷx,JPWk ς + _5&/WYVO?xkWV{"4Ifwxc|7[e2` @KOlf ل EDK#b(bư;J_-ntGj]jlv+ܼ9Aӹrk+]\4Qm:i߬րA| MKˏ|4YQPprhkϿgyOe51V-VwNQ16f?n'г ʠr xΰYQF\X޺frcrybXy{/ _֭c135Q]qN j'-˪QZ\uP[W*\!ϥnϷcAĢW~nwEW^`~ep8׏avlSlpzt_-n?<{?l^sSfb?|vRKAk+U\NZbZZ)MN|֧ʸBv_+4ۓ7ʍMN. ZxzC4Gu72X.R|!6H=Ye_<_,Y~9嚪FKDžLy}o|~|kڦlӼ%Iɭ .%5Nz)8:Y,%]ЍQ*לAtvRonw*A5[zw{ACO>/Ԛj{>C{9ɬWCհG^g|?<|y HCW|wnt +94e??>j0b9˩./ Նj{g o7U'=Q›?y׿J 1I6'o7^mN]twx4Yd+*ncݻrAF8"*;VbAKqHD渤Rج6IJܷ>A1HVoɋ/bi%n7D]^gꭝz}3Bt\{5L6!s9&ެOl8?_?xxݥ;WQԑ׿PTy{rfkÊ7.2yhV_Uu?{e3zoN ` "H ˤHHIRK,1gj +yr. 0A*I$^Z9"p'Fgx:\>.q]ɽa.xrͰV$ +yM@hyPl(ĄC,(Djoxkvcgoo$+\u9޹_l8'z{|`poR`x# ؼX۝'O;<{c~wo~3X<_߽wO>f?~>э/MVD& DFwzTVqdz(Bv_՚z2Mi +NwTۈ'Wxq̓Ui 3):ss`EtqiOBF3kf cL}kYL㕳fFzg:^ocUB +qwN4" m8$< +7Wo$s4_%Kr!(*v/nux.dӿ:F)lrtz*?RŐ +˦."!!g%!de9ǰ6dJ(S,;IwH5 αX_uWTL)F%_)E 4-) %90$Ujn޺rO;덯`?=>{nnMv[d/.m;~~Qio'#í^|[㴛H8Sܾv瓫w>6~'Oa=X=Y>{???/?xw~돾͟ҺY-7w߼ƷN>*'+gDQČ4KykRu ;V쾛_4.Ig7Hu$_%2͖ɉnF5ºyXojL;Ɂ&ѬŠ 6PLx[RsVQ4%^rQOћ8f}- 5@B ^[I}}A,*bFIrN[T*CY%3}'h9c](reIIk%*,';!A(I6 D&&f5-)Q-Gn<=xz6i^j}/-J4[v}HRmխ*THƥ/z"M%Ȃۃ|>MõݫS]Y;}g}{鷟珞oxkw~ǟ=^`ZY>Iv>wg)' QkJ}q PMq_W(jǟ} +j N.,߻䜤'O>akq2 +t=+^o?,5JAiINcx(*} rFV +x}{v0Njޒn{;s-o/܎WXoS@gѨɲY7='^'&DSt +0;@4mfz@OOczfXɡ_3c+HԊ9NpCbZ׋| `S|r$Fs5(W/f- bs11BIU+$ WP6+q*Qo# 7 +BJI%pv{Rp(B)kFHT +hsA#N,-&B_U3vVw +rv{7GovFҲ璄F|1ոvأ\fM.fiS5OOoь+H-7\GKڻ/MN|ކ떾No=":;]. ]bu#}ѷ@X{ܻ[߹SngVo/LӬf{pv|˛Xם D@T+4eNnNvӻϾ֋/`||tHrwʞ_\|)ʯ/_bHInu6Z<[*$Ʃ\(sWqǩḆ|J +t"Ej2;z"F@GrpDӣa2fI6C3 [\-|vλ'O3PD 0Ų={%$KbX2dD6`*?$[ᶡT~XYk͠1!,|~ȋN8Lp\LkwHr~23, ()0D&γ'¼o%pHy2 ܊FMʉXrHpI,`S֍r.6-`ŵ;Q0͂m+ZiC{k~N\8*XLzJgzm'Kk74 ԋ7+ V2%;̲eWU +ͤ_6p BRx0&F*U4BR$L, vX( *EH hg"M:4ќGQdVKs^%TI3QSJT"q98vlE4&`^ +E80F9Uӂ~D-*gu'hTCS:5bޭ΄aŒT7;&I>k맚 f$ *NӛBp'0 Qt!Խu1%MǕX b20/MV0GԶwȅG6U7AZfI/K+~|s1Kۡ xD4*0뛍Q*6j4Q@+, h!e +9o: Qh?4Orh~*8LPr[C@vF,* ǓN7.GDeq`'N_s)Ha(o9F50x"Ҕ\lj*pn m$[n5bcQ*fCV݋돾?b+6;3¢&&-#t s~˾y墼.2$Zϸ0W̱.h< 4Jb*Yqƣ G))65Oba1AG&0<:=1M=jMd84&N'*H۟_sU(i$t +GP$p1.)S!<$BK$;&DT4"; +=B8L{ ֕CHTb1 ]MPYRI!%L40\MEA+;/U|7BhR7duz' KsӑKW|%YaQb]&ʖQ +(<&Sp`쟝 +X4! +C Rx*g#SA]A@D vyqOģ7Ca,v~&hS +pe1duÎ 8$;[vҩ jXgrl q%2;-evv6R$F$lfN),w~|1|d~.$2-Y!ՕRD(? VH͒sݵq oZ& KSL떡&IuL3.Ȟ<*1JXouL3S*te$._zϲh\ ]4H6Fkk1: (Ut+b9^_KYL8`1b]4%&1([ +fpl9e%͸.)4)Cq(""K iTep 0h8GBX8lJhN+<8]GG9;1J}"iC]p\vD0&Ҍe(<>rH+t2fBS/ <uαS˗3H@ǂ8% Jgy*p &JaLGS:)=w{i%+E}Lܽ~vox߯;j2,ݥHy|p>LFq[Rcᢁ2F‰ %'[\BnWÏ9}hǻZ7Hkʒ&%"%㓚7,ֵ+O|lwGO$+"ǥ {V"$p(gF~~oݟqo߹?>?]tV,'J2s +6J{5^7>]Nx;'?^4EGq Yk(Lء}ev⍥_{TJpT)n+9>6~oѷn~_o<b$&0lj7Ond[_>?y?~~$=#f˛̬uWUWW{7=۵v!, z4G9Q8p4RB)BFTLTwU|7q)0 +!C[qMF?V{_~w?ϾWηڂXȥI${ה.2oq>u+o}?w;_?o/_yIohg$a4{O⻓?g7~}'.~_~w~Ow>6eP2$Vn>o=w}+?7o~??廿?V=}3bmqBNX#^]r?GKw^~o?w/{䃿7~?jGqA"XpR{8xO^xïk's!Q|Aߟo~/~oGvٔMd%*"||_2ű'lהi・{?'nwh>K#("Whp v=t/޼Ϸ?Yկ{o\ms{g,f+,y [#ʆDZ[ЗgN{w{h6LYb(cE>xC\A@1'`?s۟?^?]|'`g~`2]̸1]f)~4uK+;zOg/[SObݓijϹdI{44kc_Ȗw޲bTW*|ۚ{Tkf Nrk+@)G2(D4{a0 qt.sm]zJ+ V$uҚBF}PfH58Wnl/'v6>m4.k׺q4ДP$w@ff-OmjS;*S:{7^l;}0{A9hs M"2@b(ƤGNW:꼫IfJ*XT( UsBs*^T{F?~4YYc%0"N +- + N3Uǵq| 9'$G iݭh_Fo-0k\+/Uu`}SkL"V_m֤ώ[ޓ]Uox.gSire~sܩNudj +ji o'rw2tUeh`1 '\Ahh8~Ќu9>~yB(ޠ6l 5,K  +B. UeqΤW,< Lr1EˋXQ+VDz0f-xu!qhpFOP-׽'{ƑF.4^$pc4$M=yMV)+F,.Ur9@}ZHQٸ!̴3[9]I),[=9ޥ)R˛LXK (ic;ض-)USby[sA2CSAP +Yrm5_Ȋ YV>5AJ"K99GQth[f' +r|G|$='IZ_7a{#U4MRKbI$*I<FSUы͠>stream +kۚ5UEm֐ۊ=oGkAښᄁ# 75-ӟ[r՛oS\̰DN|Wc g]wƂ>!.#}Y@@v+piX\k} 9u{8yɣ+mJ,5 J;邵X.DP)dYR.8-)}˝gs*V +pNsrbbk$LЦ9v(Q;cĮ=-|md +fsq7t׫NVZrpr?Bę(R7`[%܏g-^̶8AX^\L'BG*A_E!lYci7`[Tw۫+ .=p8;C)+zіWٍ;b|vP,z(QG.0’>-p~` /EҬYظFW%}Jsu (:N(fHZ= o6{aZۻ~5~k;Gۻx~g0\ejųiwN5k"*CFhA|L1;;P5kiIg}IYC2D/Ӱ0q_pM`T(6QgOXv]117woǛΉ j/*50 bfvRi^6N9M5s!kS,(gg--x9B+oO:s^가ئE@Ո;(Da;1EfoLҀbخMm Kx`P!SiL͜T<{9Ve[|9we)͜RTX+!^qL*2M;h![Y|(i\ TITnz{Lq RHJg:z䔨Ps7hx~rS%.NN!T"Rlpw;]͝ă՚לl ec:ӨuRrJÍfOwkkfybd}rq۰b&ug5 ZAuBю'?}lZ.ď.N?s{$S֬b.vgX=[gnalEwa;Z3HO1z=K <wvٷV`Gvq/E9\Z#XdNxRnP];ĝdF@B7>^}$rq{>uƧ&{o^cHLV[K0[(qkpϯڅJg(Ю)"Ptښ$NV +_iC$ +6IhpXbDwOz+l6W{kٍj&=.îcsu'p3LAlAfwO'[,4g.cv{3:<~r{vyF]@Gk:#?7xy }^[oo8|3 X eZ_8a@6t7ݟ?' +j;4^r}Zi/pu:v>Hs*⍃9e"3sAzur}`_Ʒf2#Ⱥgo`닝~:#kӰ}g{l?WFyZ3#ؑMN^ m2H,Tg#]z槿.= +xɫcVh\;^KJmz7KKd,toHC'RR5gIVt_o o5]%'"cg7>[ol,qY$ 6OַVN4ߐ̾lhUfNКl7[/6_t$skw>w p޿~xW?/ŭݨwt($&(7:iUgQeEAegOCLn9?ՇiϟO*{ٸVEpP2j\p4p5^WlξӨqH4vFV;m 7W :y jGA vy7:n,ptUq'u+}jQisB+/>[|}`-/Dz K0Q3}|x _8<|L>'TGۏw]|]Q2*/1{~ȩK:OwֹKxXi "iz-D m +JUR\uVT{B$@qdi .z^\ޝfo]u@ro{~Pti 5|~9U? '\և*zyW6ɕ{ރ>}xmiv_<,'=AA;nY' 7?հ$9s*G^|_90ڿE_`.iwwL64;?>Ti*#Rӻ6ZuƳ'<)2B8雱lZ{5Vw)N7I]tN12~^xC_jbXa0Wiz& N^9:{X \ ?[L{cy'n&gw:iF?_mH7̡A*i'ӛw[MX2pCIJ`]`sSGQ(f+Di-)L%uO)lA" +^h  V;qv1y*JCՇ$fe_mb /BhG󧺿IjHbccvװT9槏o~f}UŝL0y +4AȰfD6z 8:J{ω"`hvQ[X~8e)۴͓y?4Mt{|ꫠݍ9h ,Zj:AqMN8ԮTWo}?[((qحn{뵟+k{^/Vot<`,yz{|aJ-XF kR}Qm?򂅤k`dC"Mm5uݰ ^η5N>G-v-<ns՚Mh _݋:9Cx~qxU$ HTݵq]f2ZRY$UknGOm5WW,r*I5gCwDl\ %FޭNƑ 67樈]YJ7-g&=t7ەΑ,DkHJlVZǍ8tiƸmV1 +*3e94/#{X<͚椀ɪՌ:ͻ;o^ϣ*ߊߙcX1<Lo7F[n*'3,dAX߿z^ T +Lpvgg<>uzs s#[*:X7{|tN1ׯgVe7?=7<!#t:?d0ҹ?X>f}ޘܭnvwaI:ݺ|=U{+l\t&k3'شo=x'w@HI-jߖ EęVn77$>'_>+;Y면`WxʤR'O>fϿ |ATAzRL+p)'ӝpbG4̮rӫl)qC!7Iɫjty*o|IqJ=jK2a.])7܎g7n`#IkTPK%'H !3 gQ(vyOuX#ohV됧` + xGU5c$mJkׯ-1}yS^ j;7֧W`=Rbh\4m:F`Y{Pa^v!/{P +hJ+fPFB|\ +dM [lpT"PVl0FJ!FTʍSgl Q$w{; F{x}y? +"VsT"9ĭ7ͪ1ݺMsk+m\]Χg<N0eXsb(&CUii(j +x 3Y-ur!&/8OM蠺eFm>;f[@QC#?uYv^,8DCH΄kYUi78_w*nmuAh\Lh,?1D`t)FEP3NXp]Qjg[3j98tYmkz'ʊyQO筻$W`y&I#DٙHRS{ԑfr/_P4շlD3ݝbT3WtzN-8ad/X߅" Ԯ~UPKdٰ7wF(4LcV4{CQ[ MHAcy XlZsMŞz`DEQ6d9޼=ؼG2 `!C +Ɖ(x-7l&LS+WtZh`zrg(jRAQrWVZ!i-o5|V;c^)^AJƈ@=ZE + K JT߫4UJ>8V J խqw})oZWR%+1>k?/mnL0i%:5v۟-o|[Ԇ׾3}b^o./ ka9s%R Z)T,B)Y[C +#8 +l+Cy?Սn:'ƆnYkG%ͩZQ1GK +S^努(7@:OnXӟޘ=sj{ɜrz](H5{~0z^6'V=ZsNt#<6Tq$\E*G}ک ]0_ByҬ)[ry d[QViZ9wKɜH6_4wk٣gr*ŵY>ȏʵk1\!Ȋai(C݆7$3J<;8ɂ8JEarv]t^}dA*#IJkk8Æa}ox?{ ;i8>sy_q8:5 JqC߸J+d:+2LY#V,)u(||KLZ`xV(ds ŔsyX(8r22n&M$WTcy(xeAuxGqu@dm=TtC5E\_ݕ!I _y{}9FסnRnU%6|Cρ_+*R5'o WpGQ٬|n:on0| x~G;v2y$\L( m0@ uL"-)Cop.d֍!/tI c8fl::N/,sĽ|O@v"-#&D}+Xr2+WR,X$^^6ՠR\8PLA,GnybZ$nJAqgG[K8%i\bh &+=ՃʸKmsZH+ a4m_p&4 iY;GW8<NJNe^a {KALEbhyƞL : Y(Z(A<@ !^v#A gUDQuCi QnXTd5XDRHgKZ`lgj1ox3`*PtsEtѼR4 'Aƫͳ۟=cZn60|UdR:!]߈ aauUvie=AZXpf]FhtL0uSEҲΆG3#R0J8}'9CXsCӜLFy+I&Wq (JCp81rNs Q,(QuÃq+WJZ +(DrZ޽mBAe~6grlʝ3՞LZ@V%\RD|r"j!`0H +G>jyП\7 g?EW}_5{/^i' =D9a {0߷<"$ c@֬^"}Y U(J_v]mX Œ[lݻܧ=Z@07lB OqMP ĸ`:@rn:-R|:+0\v!^ޏ1=x\<[lv}@_^hbېk 2 R)6+Qu FtFY@,XI+.a)ߩ9[=/Lb7Dp%ry8ȒUUp\ +DxTݮ4EuӍU&)ܠI+9$UnJxeT૭xk +j\&oo?ho3Q!džް?>#C֒|*gLW2w CTXuIL3iA*l +jm̤p!LH#NܭJ<QS#QAr3k> ł(Q`nAR0 p)A7Tcޅx9KؚݪU%LdGd/_TōW3\dLVA +14nCѦ=F6+Md(bg3 X4鋧Bqa;n>*iL+ɗ%s滺IT3+{DD1G]7Yڅe{sVH%T/%Si̤FX| 2 ˕H:D]I!(X +vr&V&'rjc<͂P\[c9靂2Ꚁbei^qQ~"f/\bf ]hi 9E$bE;ܢЌVnŧ\vpR(8nt|/AH׌q8wO枨uIֿ+(vkd1Ae,b{lj.1`.ńP/^pl8/򹢺UUE0]ΖnmPO#)xD lui[Ҳ +X\:#)!\o8cAn!5 MWq>2O֐-͕? lW^h{|_ K\#CÞ +M{nyL  TZkGkk@GjB ezตVW$fP *[D#\[c G +KAn|O)XVԸJ ٌ +/ u@0 &V*#tJ(b qgJ,)bӁδ2E3Sl#, 058?Qqn{H/ټQ2dr: +8AWx߰M]7&q\.asrCszLPH-WNW=,UҥT"9֊G&@i| +PTOX1E,QU +t_2_TYSY u!8X د6D ^)aB$:Ua:~cY@d&dԀo'w!hK$SNe +7No/ GWk^%P;[!N@M˼/`@wB"Ad9#9zI ]4AaxhyDMpO:%t!g\YAsB۫:эٰzz2jU -W'P-ƷuT(ɌQ6}WXPDV[ BHQpB&SiKLBR6Y#"QHRƠ9,bNO=^"IZ*TShHw@Z"!-X +Y|&AbQ:džHN6ѽR+nL0N@#K uo ΊZT*FF1X 8S՜/_=m\tR8V(@aE_|`"N'+H1B=)2$syO,w8f+- Hd@zݳ1A.4߁t&*|A/ IA!S"*8]_[#p$RB*#1+N#8ꌤZXz&ï\ɭY"_w{' `tZt bhXB^aj30PqLkΨyɃ7'杷E\95z9]tI]z&J* #PNy\\ +IP+yPx)ֳL^PVIC1]YCPh۠l8ݬ/sǥt"T]&8L≷u|odZ%`$_gLXGtFJwP"Ot A{8v|D{޽Z)JlNr@J!+A@F$_RL%|?ƀY.km79TΞE|JIn{\A."fmDXSIa-Ad&8:ށ^d0@_ 2#q0@gp3`"lܰɴ/g(+Ffkx5eLFՅp!J%\6ZPV#aq>dmNd^E,b&D."xx| +QxP^2w>y2jbDHWV)~ Ox|$R ._FYODnP?_4 EG㩾+y=)b`^%D +ďͨ};V\ +Vd 13^΂:1$L+L$} y(ڊjΚ]-I*SPP2R̥[9Tɷq8ޢ͗'(F4 (\c, 8ƻC#aQLC\Ec +ѻF3xM<F5 Œt* +9#59d:`Nc.D 4[7홬Cq90t:VI&6Ԯogꅂ&łӵ|Nn3yQ"wG1Ms\NrH9v&$ QZ!]*ɡԑjYEVhbHPFnҹ0 M׉ض; O yH )ډ-ZMSU1\JM3Q&gsZrz r:\o@\A遬ԍZ/_^q@ q@_oX$>"Y ’N?|+ZwWЪ8hnѴ ,'UY(IJFםNjbrKd%~<%fri(#&<5{+F" +G-HuE +R>3;M9HNQ,ݛw7֐e|QU;8'T6a{ayb@p2:,8Me"/m ֟ T +) +˶m$# s9$h`PZn;r:vW`HC= V)B +` +VTJR\Ȕhf:%j2)&ָLx& ^ Jz& +3.yԃ,&nl :I D]Me51+-JtX[m^ϭx#]l +-3Œ8& 9Ȱ[ ՀaIp8Xr1HO+ۊ5)ƷED+!Lӹ!iI +qgAŇҐCCHpŚ\c%"yX)V}5ŁƆno(@IBղy j+ !Q@j(-J,ӗo *]/X"Fӧmے6t)͊ȡj' Vyue˰e/)HY^%@fi\Aﮬ2-zW==_9 EpH^z'WX^/Z֙`j4ر (R?(1` ê@w $mxSݪ%)=YRwx[1*f/*( ^ša:d橬5HUh.M[o? ]]H ,xXqqB +lʷz8E3t)(eGюIJ9/[]CBX&F!AKkT_]y.h4@`Hb7>םIdTBY n4: Gp@RkTyZ/$JP̤D~k,nlim꒍F;㭗gX2Dġ޳PEz8$\!UEbO,BBO&9mݘrcf{ +Zs4/FP> Y4a?>||8P +t*|j5m#q曲:-op+/Qx@͉HYm!0c'?w:.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#E;.;rюˎ\#8Lܽw9~l ^xe+^ /f^ܼJ5;^NKūBgXeݼvtG7]+Ǯ;:gK[v}>[|t{xq?z''qڵ3/ϜtIy}8p>y eGl^t>/ws~\ nP?+Gb>+ ^s.'/ml*4 S]'Oju㥏l{/}d9M3^ ao=z+{j○߻w|;lInyn'H?k8͝ĭBv3܇/L/ U\As7 wg8-u9r$[r;'J34rYR)S +/udNju%xdޑ> +ERq-6)&\$FcR4*fM{gg9-L&ts.u"NQtHfY"(-Ime%Fzx"09yIz3I;gOҊqԒ[u$'hV +#7򡞙j#8R% KXјF3w%(*h\g\9rdkREVXaj>xPSn$nEXnvt"i)jK{aThWS ֈ̅MG QrbaR)i0In +b-E_I\gęsɔUmzIrxf>$h(: +|^D$v8,/OfHz,WeYAh/ BV;8Mt-z?4O1JtKxFj$mڷSٜ/Lkx 9̒bLxGr*B!0Y>gٓHTNi%{o l`XB妓;v%Iuy;IeL"EIfb +)&[ሎf R<+V$W:jO7bշ M/A "Qb!z^z"}^Ql!`i& 3BX'mR7= %E^qpHS*+IU1Dm81B⒢N"dL +E[$v"8,hhČDԹ9.JrD댳BXD#1}r&KYoʌn B$ +ҶfiMd0#R9Qn F5ŒRItq8*i+uz Fkbv&iBTlܶ##3~[W_b@Amo=W)U%Iz+wY$&AB35\檪1 +A rPš4`ͼ\^UƓ7HTn.'^:6YǼT(UbPO=h&#de&Zza9^n!t63S#=ffz:ORA<pB]:ǹ1zm (T:tlzf|:_@'(X(v *0 IAS.);KJ*'4bq+F­ρ-f@D" + IHJΰe^lRed:"Q Z44#K IJ7 +Q)j h;F X$#,W%`6tac~(,Dr2q W43 kH-wdG, +3e&N'`x}R9 +Ici(\-E/ tcg$2!$ET8FD]XA(#:>%:Ωr+CFƅy!APTŠQ +/!(?d=V,%)ڬ72517+Ehe +rZś/*8# bJб{Ѥ̚(F[z\Ų&j +v8y;NkFvY5x!CP%VqJbJ`{^a,|%KtZj4& ! XKl$'d$&Khpպ3nvVgpJ%P׀WNnȌTV1).&H0[w5EoG ڦ<b +ճZC2 &՞_gjќ_P,b +w67chG R-1%eɄcڇ%I1WʃL!UB e@m )PH,s +)/,Q"%-iGJ-,$B Dܒe&+ M$D (ҀɈRdM +j=4t +x,@& tJǚ5*pr :C9_835AkpRMҺqdW(4Fjv~[6]qRT[^yf1&ZTqWn*DƳggQRuSw;t"\\o +Ff_dԈŋPwM:+,-Xt @ѲA +E&.5*6CaīO1 b1^H/Hx, 8ROY<I8?7a58VO&x iBTJ&=#EɊ.'OGHLE"h +| +G 9Ee%?7GQJ[HHDË[PaO:fGYˈy-Y j]x1Q9R9c%I.E*a\#KOB3*չ! I$-*RH:>~= ֑Zի6_n<1<_kًr*V0],֮9ŭ^-ͮ,0L +c2ƔZ1s(C3Wi`[LnF~n>@RB%֟/=T~Ln(cn>1?Os|THki 8_lgy?Em=[QX!ϴ:T2GQs+'K2v8*́BbCn͖KH*l$bfB +q,a8 M{/]HE*'92J=CG!r$ ENQ.?&H(5?O\ +A~5c!MRI8 JIj2)2I!BAtPp,!O&&Ƃk/5ǢRd9̹Y/nLϫjS1N(1\Zy;io%r4^:;Ww%;gsl rUF(S0\QT[[~;:|%3HQAuݚ}JlŽscqqD8UT:dTd|{Hyelןi u<)*M3HWFǝO8ug΁57>?S)u~Ah]knFY6B$p°.x6"F$#fҜn`!eIs3u +^'El;CQ3HE*CXVjg\ Tcx!Ʊ0R5xkKUQNhHژY{#@\Œbܢ1-HD6@0 )i#ImէJ@ Y1+D t2W%Cq!:},N&SSTLL}wdm`2MD<?Ob{ D|n2I +Z/( $wm ԉ!x"5$ F-L=x䅐L,j4F; hX3MmĩUh=7q AyS<3 n +h’u\,%!zzjdiOy,_`_.͖dH%<iEʈ+HtuLFqO.+W"YCjG־.}plcFa~>SJRPD8$OLUN@7e$=K#-t(Ol8OHS6 QQPR$PH ikb=@D"FH^ +CD1Rj_v#AzeF"V$fg\g!ٔK%ɍT!:@m] 0l2W(x<& t`[$m@ +?6p"ϗcd)CDNO1h,Ure;SqΗN F +yi[*Ս(5@&|KUpe/ջ't첤 |Ldܡm1b bedmE'Ttkb|Rי/jf0PM,ĒhhEI#O0)1'*PV]XP  a$]hWŰfJ "wAe{.Did3(/P_=z +%)j$DVAm+BVˡqyqAU1Q2a)KfmANcBl( ܔLS3*brWP/  &a` __LQMWl{(дާR1Vut*ga<%NS|Ţf:Q:_0frlEIT +J5X@#C +QF53$nb)6% C_?EC +ԵfBF%ΫVoTk"E6 G"XLg닫w Ld/ J2\SZVa^9xYOl ;X/E| |=f" 5E76)T$%7yrE* <>$,9tʍF$X32|WYZ`KS (3aJ8śUU!ouS)BD33p*Z61ʕ2?DB:LDTvceeZ2x#0lu~-M`5ǐ@¡=H~S/D*t +'k\f}0~:_tKB2.I{dC p|ET90GhH,ρc_Vz[$EhE#T" Hot @i6Hy^(Q4}1xYu + t8aHT (.$, X2kOz]N4dg"h#A:hk J#d6,i +.x +OLv3 WR!G(yH42s!P;(&#/̌&J BpJ*"=0&@x*I8R) (5r)b[* r@7XH ˝+@to| +wl%/ћ,A)hݘ +- +CdR 4"%琜"|47{Е#%4 ƌOv?t\ '}YBƯ,H{ZH֋,SVqt. D""](\ԡ+w2쑖Ddux0EƩ,Q 9*BYe؜,,ee:c(7Dfyv̲y)7q|858tuC1}t-Z 7[d'Tgɶ g.͇4!J@o0)+TˊŹ9QiNC-\A`pV4;Z۪6rlA['[=v(0b=TA:Yxd| Y!]3 F+a"O&1 + 9,vZZ'E@Y&PZ2F€5| +IȆR/D/!b1 Ȓ HX=9l}pGoN*IbBG,05Q/RKI*BaÖ8{D"-1?LU̡_˸3tK +Q̡f `+䪇Р@&K2eyf§7kW3AXCYZnƞJjWV;i^7AwV?2}yD $ <4}d͕Ǫ5Y?ktmrb5̕Jǫd;ǽ;YS\ΓEK CkQ1bUU..plWDAhZ],WC%$ \@%!4K ЙrSMxX!Tk,5Ƹy@jd(T%B{:rkE|Kpb{);s<xV;Rq%L'RTIbQ'{i6+6dm@Cn;P"㮸,#pIWr+6#T;{Nqnk "%QS+{'7y/z +cfxQ[\U-=O5N~8(T73AaY{сR[>Oꤸ:"#-dˊ5a;[} r[^@PDUsR=M;S'V/I-^:dɢʐ%Ȃ.|r/xH*N!{4pƒ*օ-f`ƍ(%Ex ȗiOXLb=P*(`E%(u PP=˞`T^d,eR]2Mİ5Eq +~ſf3> [Qզr'?V*/*IRS՛; /Wl&60Gw1Kz2N\Y)hF>ݴV9W&lA$5-;VҺaLUK{Z6jc@n!}h0`9MLOWt'ޤAFͯ"\uW6Dz> +RrܢN- &гchIzSdvNPV7Z/mF[:+*mR4zWr}7,U)O5Lֈ,_|ˋRUպ^adG22]' U.aR}?W޴ KXygrC]3ss+٭bkOw'Ae+W Y]Q4כàz~gUQ3}N o4lB%BT +ggrܲPȸj1:ۻfmp&]łjEB-E9bViO//5#mJknP^:=0M5WZճ!JT՚ gzwܞd^eWrL06,ej$jL{*õk{O;fOܬ: +jZ^zRzcб[RcV:vZq +[itb4[l._s [Fvjd'HrY6oe"{mƅK (u'%K(j)z;IS2P٫N*ݣrk +5jY_uVS) +_ -5ۻ4F|m-l GGK[+KgH LSj7ۀPeӄJKwZ3ڟ)r֛{Ie(yˢR􋀬Y{|;޵zgG9IUf6ذjh$#WQa{Os$Wް;Rf?[]ymz=>[{OiEfg|cy+w~ji뮓 +JY'j.x!9>[(Mt3Puzw[|K/xUZ=xC1Uk̒mK.blPaXllVAe[P;фWE x8^qlS4Uu77X|||O=yOZޤ<8|m􍝓n_'7w}[3˵htዝn9OXWz=Vvl_V+|_P3[R簷t{z7W[n6&N~/jNP^)6 +ՍQ6Ne:PVCō]i_.=>WbZ7=ݺZZv5>8|>]ߟi of孭;W_ĜfՑÕdz6r9#KC|ThܞɎ-jջ~eUͬU2,^o`57R죵3wbkWF~e}z5U߮QޡXJ;_oW]tz {n7K\9>-vP_VqU^nWVvؙ7G^q~WF78)Wn}ͣv*wG~t'֎>6|uAy+?J4ibm3qw|~|90Yݝ!Nkߪ4O6n?Gzd_BRm5{<׿1zvk N~+Ի?{ByYM\!a?9JjcY_\D!-"$~pi{|c r-jF\ٓ յFz܄z1{w?[vZ_z.mqw\*)Ζv|w0q_8js3֛6z-_ZqW߭&2[ Aھӥ1/rU)g桛_nܷn?~.Yt7'Ҧ|KU]oMn^}[KwY!2+P0VڧX_{hZN?/^ڸ5[=ڿqp`r?\9pz?pQ-fg[۹O_ *H²} Ҷ_^E.<Ơkop썇ޝ~/x?b4*>? nl>Os=johϭUe:̷}غkd^̎ek[Č?4w-Z}),F\+bsj}#(..o8zZjg8wK{m +{nqM6j^K_Yٻ疧Ftcz.lZZ[loR((rt`N>Z۞VdAڛlT(o%Q`cAitE!J}ex +華G 7ƛhvƧe8!m^*4F[o[W*s& 6M&/U7#("P= U-򌳵zǾBJ!+PHčl<:QzhtT4``9-̻L3r睥]FΨRWfi!JAQr;_ln=ן=f6\H Դ:160 V/A]0\u~~)&5F +=ۄi ȍ'Kacq5 [k '7hZ14 +l~Y4Pt<(EN*ͥlhf f޻ھₒ7i7vfȆ+L3"aNzO^lCkjkA0+tthZq[ҤXW귆ko;[ ͮnܜN7F{ݍReHJ;kǹƾdVmo\cduNtou;SVY4 G(1ƃ_Sl)Ց-ڹ_X~ԘnܺoO=)ء iujML1Tdɫ%,VړlNKiVqL5\DŒXZZԫcX;dy)\}[Iw@ʛ'^-4'1ZJYZn)z=#!D)/+D%夳ԵjP޴'oyڙnr֠ +zdRgrd9}#CJ|\q9RZf^inA7 loC0,_^+֧zsTj;v<bad8QI۱GY{0{H|]hGޝz㚩wƎܽ}oů}ㇾݟo_Ͽ/~7hy6;).nwe6^^;9~}K_g~|Kě_~k{~Wn}W](Y-xaPj4ǓÓ7<{>7~/gW~Wo~~3'hIϰ*{ޘ~lz|pvwegÛ=}[?Kvo6 eR\j7kVJ&l}}iZonw>{~ __g\e)SVj١ljrm.'+Kk>}Sַ[W7g>O3vs,L5 RTV˵tF<ػOg/}G>|s__}KTl-(i:Fs=KwwՏ~x_K_W/?'91n,&el[7ڼP_7ʦUmا`mf+vգ÷|/'~;~~7oݿۿђwo,UTxxܻ>ޟ?3?{o?L)6{3Q*JS[}3kѯA{q]3LT]]9s9b2D&HIT%Kdɲ%QdYז)V ٖ{.h^X]u_:;}o}o_Wzr|q^* Xj҈>g^{}'>/~?~O~㟿t뷾y㫅ʬ'|Z!QtJ Wϼ3O};o?_7/~O|WwY6(*|VkN)rqӨsI'^x>O~_oO~c?mmqdxԝ^=wo\y}}_@EΝG666v,ðXQX*"2aC6Փ z#ַ旾ů~೟_x+g;UU'F2/2։n]/կOO?_/Ol-YKJZbrkq~sgϝ=yoO~o׾?sh|ݾD@LTgky| _o| [Ϳw_o{_~~U=V9`D;hfϝ9>go|Ϳo}巿/~7qWDaQ5j R{}c~7o;?y_~?|֝\[ ֋F4k?y|7w~Owڷ WlxTT6)ύӸ2ٟw=g_ԷW@}0QG_y3;VTNujfUg&Wח熻OܻK=vѫgL$,1 q>Azo?8yֳO_zwn_{GcfVV +h +Gbs \Ν|B:-fOn-ܸzgn=O_~7?;?GW)=Rd Sd!vĥ˗o:ӵZ{nYr?7_O_?|x箟;D͚ϓdAU | vSqZ%87ُ˟ysoſۯ?}KvRi k)D4ݮvVn_u^![p ",&#z )#{'?}཯ܿ{}_y^Wv3{}#ֵq1 >7!l!Y9غ?7~?Gӏ|۷v6h8x]h0@cA]/d2^w~aqd4ڒ φP$#^/=vv0D!piLe1r"V0"H($8FbYUP~Ts ŭ} +GLbDHB,&%ZX&L>s3S'O]XOR0ntc`:@*|z$2B8=`Gz$JdSr>YEc3>j5 (#,4}=V* +3dPو#;+VOu[d43h:But9BN;X&ZaWomdfU,/;z)]!6w9c1Ӂv1MΛ`L(P $sZ(GT)Stg4AQ)NcL8  h\Q2 Bs͸ـ\YUN`@LVs.F&U$)l82p:/Q7>4TZY·HbFW^m:EŻZ?JfCb~q,%Z;DGGQF88;KvHeAF26C6B`Q| pPf? +UZXL GwVU :'6qߪn86.l+Cݜr:rn +*G8VkvIeǎH);cccMЈԳdbblc>")]4WHÓ8:a>[g}q=MQt /Y. +ea3ѣα1|ɐXg<jĄ&J/-x[4lZd Tv9MMh@x]3qQnK!{[=ӅCCQ.KbiQeBB1O"iQ\fGMUZIљ#۫$Cv.x\pB0+yQ#hJҳvceTnuS-HcTQϘWfd v;/;]4HFQ4>h,kFdP=aoG 4(sL>0_ i^+-*Ep F" +&=.DbN豣^JtVZ Pǎ}.bq$I&R('霪 Ql8AP Z6DJRڪ> +U%9Iu9+TʑV,1g hW(GMσ=c!Ox E%U Bt~VjvCDp((x"~(ubPwňֳb` F\R ܰ;xCGBq{;W7/MHWK6sHjJSݍ<b.?43. h 0Y H"D$IZgg1&HeIL1LdD i6 u2NEKFnDzYY,4- <C"A&A$z+y%Ja:åPxq]; %Gp{9_@& |ty|f*+@VQHA2MF1'$He_¼,sZ29^NF?}T6$,EVFV׮jJ͆jJs.^o8vvU)ΫM(dج"|$=KKeIizc{څ[/h#cފ3qs&^PqRIY;0BC%x:T[;d۬R|0o[^wJ &ڇF˧%A xrQ[^+ ^Z9ẎTrT +.v(PNiˆnsr6 tfP~ +XjZ?r?6By:EE DT cINC=$=MQrrBhF/)r}=*/g"*t{tmBꛟڹkOXf*V(rB]ӚVbrOͧ +{ñ"~Ӣ&>J4±A|˳+{}FzVO %@ Rtb벢I et45V( +JCt\e-D|~@E@)zorWvֳBh&gSy(1+=vU)B* oڰRM w9zi#5\-W$B +fP |ˉt,ijX!+VYv6k%YYi4d>HV\Jk,PP4h*KYCǭWYA(j7nv\.` +& '+ŒsH|2Arù゘-4V+kϗ@LLJI0E|!==܎#Pp,&k;Zʅ]kRcUf4 ` X3[+`PEapkng2壉Y*ŕȰ=+m=x0%YJP9QbTN,J .4JA85z``zc[>xp9+Qdc h.'ly9SZ>%{/6'r0qѹ|}ˍ(v;N3ixIbfsV998_3S6A R[ivDWiJAmrd#̟޸ؙ٫' ZɛWo>Q:C#X/vN)I9twn9 +5"lktYZHGycwIGٽw.Zq^O0LzŽ;\ T,+4 lPdfCå'N=ۛcA46p[Q8|Dor*?$ЫGgz7@Т } 'B Sd +dvWQO Tz8cq♙J{gL^.Wn<ҙ<KYq.4YC0 +N!0`92 +,˕åG\z0خC+Y^o&ORSRx/ɩxjM 9<@/ F,=GIBmIҫHH:PvG[z'^dbm' F'ajX:/7"d^I=6Dn>2}~)0:D;lڽSo-sPRr3Ҵm FhU^E|f?Z0KTdĊSp#Oo0fFD$>RCML0)\OTxfS!4cAenuޫVy ;x*TAjB $ÖeGH@(Gx<ŦYJ҅ CAc6A<AK(z@6Y6fF81'`(-h*XMT JŲ4UWˇ,++Js`QiFg +eC/>rŵ +K۷gnֺF (F‘XnH!%2 l}cFq&eΉ; X4,tٝ9՞9Yj-/_^1p|rb /&\@}88r"3.. fOuNG #Z8KesL~;yXn '@?G S^z2x҂&:hfs<ŗ ,014 +b`R@&ݜ6|ۉB +dC8łm-l^9ˠhEka4l.OrizP(Re~ؘ{|?6[iԃ2) x">/#E5Jgjo//ON:ɆiNYCsTmӜF@axe@\`8kDDr89f^drhJa ۳{SK+RiqsJ>G 39,wD.ۚ1 Q4(UÃ7tqC/c1P61(QcO.{ kG;&o' cQWTty ^HlAEh=N|"9HCUny\\h6n'|v z)D͡ qrWk 9>o6'ÿ`Lа6bIpܛV@K.tqU:.wjb{핹VL#aAkI5FзېcG= @VK"/. ,[J6;Kʖ#Gށ7Cx닀iZN'pvs~G,hR!3-.&'e;'<-]4jՅV#/ELcGռ*D:ʸ=Lxgv`#( +FZ¼nWfvW_fe njHhP>.`sv MvE1`nĝ3s'I j` +xa:Y\(uvcEBvmmpLH ,i%[1ֽuħnp-o5+KW Bs%QZ.Ngbƥ[؃C4|~҂Xc,W(:%Kbq$@M-?[ࢡǁV< `ӢVmV>|K3|`3NZSS^e-\WԺwIv)cK J3,d|c.A`F$L/]pyYP5u0!li-_"m4j}9` zƼVJ3}#8; =q\6kCaX_RY$#h Rk݃hz2:L +B&X'iMo@ Aǃh ʢԨ}=KYX@Eӣ9ڃd4U}>%D{e#ƹs7fRԤnvV.G'q2p8~>D$dQ$ (v[aYap{$A<1LggS$gww1"LgRG;KU)dz&2l#|nC-LwlX hzb"RDcy`0|PE"+Lղ6|"EIztn& 9xS'7wv DZk*(X9& ɤu(Wv;)YL*(A@حp$r TVX+u`tp0U\\0"+s41kY`hxnGp\uiܽs_MܼCNSL0SޅM#3 VxB!c|v6I01}2se&O>rl}9ResGh%D`0:QF+r +/dAϸ=9JoǎY\#d4kg.͛fv8yuc Y9bf#LdV*gv9vw H0d +V]ؾ +^ Ei90I"G"IqIra<kN Eۄ7<7VL/o_=LT[ڸ09W]%ј6=e n"b$O y.ycPѪ(Q_HqpUN,H6{ǗG_ Q 72xfn\P|.y&pM{v׃{4 !JPNyI^6wS7=oڴPLSFWGbtu9c`-MOi@R{`Cqxu |V+E!ue0Ңxv;_XݹqD~z~G>pLTjfjӲ2aZ9.)[DPxQTvq65a B*\4Si5M햫+,fDpIAdv m( X6AzCՊn`1'DzK֎nQ" E[u3I3fb*WZGzXz "Z2vW*rL7l>K-0tZl"ɌZLČnֽ. +CT2d\ ɐ2N;ӜCu1qG;ȳF?\ +]Jn'u^ 0UZCND0bep\a{ϯxl6 +tQPL %V߹ޝ$FbV;4A*- m<"NPql<t' Ѫ*MϬ_)~f9dm`) ྩ$E'9!#)^w'xg옗$M=ږ*RY) rb2e + "RLopX_[ڹ'Y>;?Ӊ>uo7Tj*0N,jKrؘp*ItvڭgL+pJIF|.[]* F{sJpata@͗@V|[[ݩ3{W/T_v+.q@QAcxD@Qq(>+^U:k+K[k>y|sOv.>qcJkV_}W>LRQ Gcю4ȱc8VB_>kbPZ dY,-*'hWۊ13,ili;URkcr닻7o:Z|N.>.+9Zjn窛rd^t:iQ k Y2ty^9}[מZ9~N%Ab) +|,b?9/"HtA50VЌ܉Ėҹ59\x{}˰|JJcԍ&˚jglrsJ6RV`D$)6p _Q<%!HEh(7w8te}0w;yO,Gns-Q@sV:a0POԛf'n:'K+)*.9Ey*jbyqfb 6ő齸RlQQcnV תR5N·p]׫ڂΞ|sx,HZe1}ғ'/#C+ +g]v>a&XÜx!8t^Xp(@O>sVwo_kw^ZغM^ŔniW}yv催7tUi,Ffx$L,Ay$D~&UퟺqҰ^Awj£JD0B:#F/Qӑ䢠vI2X8IQ|21`EѲ9uA2m`7S3+Z;X`z7WQ*.,l]˻JWxduA/jNVaIJ|!t<RY0Le^v%$(TRm,n]V1];h2:v,1籾!]nof2kejAv96yWqIBmknƕdiA ?O^ߟ03Ul6 *NpazQsFr$Iw'}4պ.6]N3L^Q>#NMt=vԇ"r.3 vaТ<:=h:;)Fkrwx?{(_@gy39ƭ^p[),~<}A| ^4"-m6E1 !<"iBs6kk0Tg̭xa*.-tĤmc]8IrU=6H +|>aF Gֳ9Ent$uqD 6:7r뱗W/ hAxS%1nn1lXVÌBV E1G1&CEQh+^9..Rl94>+Y\:'kXCX#hGjGn)zWfg^ˢ왙Y֙:_) K-BOS ' 486Oj;|uݼ~OᓗO.\Hfy‹5YF<FpBW~jS=>D][veNI'-\Y86j\՞+T#YVl0L~4 26XiXg$&Y.+HTE|<ΞZ\GCqkOǃw$b-q\.bC^H7Ժ[3'9yAPf[,@} +cQ1H`:[Oh:q\N:q" uӢ(tJ0)JQ(MW[+~K1_Ua(kliF5{lIk`@Ȅ+mA0hSFg{nk7_Z??箼{N5kfݨ/\x1#~anzɅRs%hfܽ#w f,9T~e?WOmů޼|,/5Vzs+?ʇ?O}o^'>dq!YX}3Th4  +$m$ڕ*F$J6L<5S14\~>SzDf$3sbSn x( &lȃL!Cp<*H9^.v;{'o:S﯊j:j.fru-LR0nzӌw zgMˬT)dHьUDk@֡ަ f&3Q<;ps}ɗ~gYZ۽Sޟ[8fׯoؽ=rL+&S/ ;tќS"\};}KYEJQ$8'N\zyv$g/ҫvI.'GXcӗ_mqӝ+ZG{rw:iNv7N[RIAhVͫ@PĔ(i.2xgzc/pU$jmaG>. Ζ(%M*ns\$9Ks`~:46t~$ULX906٭lvku1L <2xFSC=U#_3=>#Oխl `]Ql[7HPrk; s;X6[6/P@Yɵ\ *'b1;uBqb-W\UM,N*]L58. ݔ /\$˘ +>k% Mdb+˩h8nNά'gn֢N:-έ,7Wffv>I]/sc +dJk dRsf|R 1 Ⴣ$erBL/;'=woiZ";ɧxo37oggv|#g4:Yx>xpQ܅͙|c?s{L{]^ Ir}w_vkYU:~?8t#_(WƬyPǰTEvY +ׯg"EFlF Fzy _PWI2ͳ\KP4 +C0ؤI{v&3?$cG +2vq:;,(HeY{, Vǫ76\ݻ8Q6.`\Z~ %X HREIa +)D!(W9KA⤃a\ui/6kAq\I:L80òEE\@tG-8kH3Ha@\ғ *!2 ,T5yYU 9r.MF/+$%bfr}x3B_.)ctJ- $ˮ"'220EYAl0'(LB=c ư8s",P W "XqF9D`&Uqd(P&ꍩ&$ز繜y a:$ƬZDK4&Dz>|]"! wd2㈞N(`2Y>kh$sOE:ld. nD +C +=ZeOLA* cT"N)#6E*(nQ*u~PF;3iȧ"HHyZ.G =q$BEh¨tv> +\.c i%FubXȯJZ>R?AI>I|߱pҎDLG2ENH8-e ̙^k՚rX%uA/e'3@Yh&l"Ėa wb|6.Tu`vsT8WrX؀cr&M"T 1 ¥ +Șwd)$lVyh9 nmtd>M`s8`UQVH&+Wd(;#2 KpDN'\QIDEyJfHGT,A!8"Q_ SlZ5:H4@&D`p"p2PXVhW[*+ȄdI*HZFG9?gurDZ'E`]4ƙQ2$!H%TG(D;KDq4LD J/ f+ڤ>={gh8l9 M-G쉅BHc6/"mPɊLXmJc"Wt^]o<}/p'OuB22!)ʮx"KJ<[jƦuZgx;}|nq,lc> +k|{Բ+b UUx9̢+ˋt9:ƛo 'RI.`n׍!˖[s'fx/;NVmr$!2A6n][]=:ڪTdr〗P ^Uoj0 ۵VaI=^)<֋wfgS9tRd6AJR28Mc4΍j}fKo_Ͼ^t떨PglYOb\:nbl9z>Tu;O?~??k&5W%tR-ζy|֙ӕ'._9x=7+oݯ?\}Bax"CxZhAp OOʈ&vΫ;#,~'{ٟ~ٷy[{4 +*xUsŒ?0ڛU|EMJ=_;//~=={eCx6Ib2?91Ƣec䴪l}yKg>ڕ7=|⃯7S5&JVK^]_{rڲƝϿ~g^K+w__O|ϿqƮx2Ib +2,w?sg?sϏ~?s~go=zqRze2:&AhvG7߿_}[o}/~'^9SqT$ 6Vdt"!gctVWxTu{}w᝷}!0F-[/==sO/~cW?ʓǿ~}_o_TArg +M;,h{5yr[??^Gkg#޽_у7lt0 I'2C6"9cwyn7o|}~}O9o^9ʠ#IϰB,5OW?¥o}poo{O]O~/w޹v XHD2I 免4q2c3~o}sym9ͷw?y?z_ ͧ6Wws4G?;nۏ}ѣ|޿c}WowRO-I**+S,xO7k7~~??|Ͼzg_']G7<]Tɰ`iwp0)W~wss??…__|勿cwW5EX8ϔŊ襀?wz +_/O;w[?~?O7^{H$9Z芄Lj^)n7eKgk4]6=2/Ć[ﵾοc۷__3?_/o/]Xӭ.ڢXTӋJ.d,ϟ.T>Wz>74 +-J&21NZQg+kՋKj~<'֍qm4syIAET,-GkAǻZhon7_/+k_yac]㵳Ri%4c#"M%^/&?} _}ջ;պoH* jwՒ|5omW^WO}C>%qX6HD3ٌT ƽΩ7yˤ;qsD^5^>N՟:ۼMF+D])] +zSqe5Os6.U6rdH"MbNsɤEבDK,rtfR?s?u;?~;ꋛ߿e]፰13Ce۹4^iw'vu/7'n`o%DZo*7M۳R0³K7kJIVMFd1> (@ҐN ٬eh^7[5>,ʠ6Rx\ JS*1Mڙ$m0:QsѭՕvV5,Ȃ,`34csI*NlUP"Аm~^2:mx^XGŕ<JA5 1,yŖAۍI9h:)UDp^<"YErVjbټ]Ns4FR fIe|ޒxSsA] n֎'aZ6E:X +SHMdji6#<:|C% +v~Tz=}^Uh] w)t'nJ5qcp K$5_+Vԭ8ѱ8@ErJ8S"Ǩ4z*_)HjpT=ұ fE1|best^ ,*T1ljEU6_v[a*K艰x\.ƣ‰w/ߤ1Usg1A(}Y⒨y Œ^l;K\C2LWkk,Pb*x33 }[5e1URtjwciC$]dM9Lʼnd*.Є/KmM͚XYOHdꈤ긹i4A_ +|…rKQۚѶsC)r^8ϠY& tZ!p\]*JQ[l),\F3$c vn0@bxڧR`6*Kk$9n"TYmr;q3 LϟXM'az=ET@[:J&hgzurSH#h|yh̕6 ͽVؑvaqersbXriShҘgLƊGGYU}Xh)7,w;{2M)#ybJ-g%uI}~!|,%y.Kͦ,Eئ|l!a4иNrRZC?yW)lbE oV .)u+zC3;;^NjU9lG$_F% 9/zC(B'Y\ɴHRoTI1,oQӻ\Ke,ꠄ + ÝUt>MSR7.'ekT7O{m˛HJm~GzffjFn"h]Q|S BIe4Nl#Gx\3fym@MJ*gpO`"Ţ E2l32)IS 1(5O[YJ=g1 WFQSJ&u)prє972lɊhXH#|QrBC$]b(MgO(adbYd&ɔy0\OtVe-h;cY ed`*D*Zn-99&x.,jc8~> IڑKs[qs( {MNI2,OHGTˤ_;Dh\;dz8W!yuW:ʵ/uY"n~-ìE!lҸMɬIfw"#ծ[7MJ`LM-[zIgMc'JF[ƈ.@1"a{: +J[ƙHfU۵Ճv8zxt] ale[ֹVgr:$@P9.=ڵ3_R\Jc_k Xq,ct^8AH؅Yk>V{"[S^馲-5Jh=-Q2ZKAy7X-i-ÈPG1p #Q.1(T9lpU6s"vD +1r+IĄTR!{ +gy>WZޘt ++8jC61ȗ׻sFn1h' +N&K(O6Jd7{{_o=@"toVH.$ҝrBypQuac:U{ ]I)(_\q_=uRo&a SOzѿ?_Vs[k[OֻSi+_;/:G:\(ϬDyLReU!H]iy;~(,o f•b-b%𰛛llfb*ܥJf`MWiL[֑D*J3OU;kg{=J+ן˄ %Ϟ~Q}/}|TJdlٚt7ﮞ}`1+HercB#Wi)!$jֹ+'z6cJb*#R,m~mp푓Vu3`# +L.,P?OʙPHTD@&\=|j^a9[;TnwzV-lvNsp90l4Z Έ36Z9X>{WLo^kUٽg?诜P9N]//ޛno HƋ&xF|cr\Pd.N}="CH#ꬶ's=՚_y(B<*ԧv0A2utkX;}"J3/< |sA`̓_x^x/:BLB.w78jgtӵf4epSGAW&w7o+azs:\DQI+-6V`D2PjO{njeَmQkt+xE0+g&Aݹ1,ٯnGD\-s z+8Pbd<}"dn~6)'iJW'('<cK/WL{4(.x`ziqj/kfg=HqhKVڐX%sl7cVZjJwpAczM4:7>}=3ۇOܼ'ޞnKnZs;_J2ܹoܦ@Z߰:ӭˊCH )dOn}0Ap㧮\¼,暹t +\U>;Q,D-i֢bD{(ٛf~++8vv 'e߸^[ΙjNy@^i+*Os-Fgyy'ʪ-_s5kΐ&Z,_>u8uǟ +Bҥ'})_\]v "gWv/?:~VPG usrō\y.n"Rtq<7/XPqbg>/DK0`,sJ)'g _Eˆk0|+^|XS # Mj˒TݸPmcPg/<ߟ^qSE/6n&A19=7uW/W{Džƞf=J{\eNiכ7s˫wǗ+Wo=}q+W$Qml_?gۓK]}k7_( aֱbRY +NƁ]q+囗}p3A~• fo.oL~utK6V2xa䞠9h->{km#E}![du~H_oͽBPǨ*3>Bx.W'W܊4>xe `:Kھ,ޝ;ʊ~aٹ|3_0֭sx}Y%7nh"YU[ѹF((B R"Ebu0lws//nޕN{k  C^bUmIzfr{zaWazR[s!$Aj>[ᢌ{\i7id˯,ae<{\u/݁5wwol L :9]hFCТi\\;3lҿUv! }We<+Ǐ~t.]z;W8 $jѽUCq'(U(")Cv:sAyDLT{E^4O99Y{/_٣qR/.jv k8*lBC1処O2TBRqOޕL#5Kou7K9 aVRIqUi^ J '|cxS|n}]1z/Uk\q9Qy!$gIR[=+7Zn3bzuUs"")f5-]\bu/UVx-:ngt?=ۛ bk _1Ay٧Ac*'d"q|4b xGZs|ru9ya{;"`\ue#D!W>] Lo +i1,xo4wϼgiFgs8]PU~X\,5Fa *|?S/ *xOZ*GRLWnJ R ʭJ8Y'˛5&3N"r_߿M9AZ7lYۼxRDyCmn,,ݬ4H#^n}էff)DBqTڵ`Tۆ3`2X;69(O,$W%*tp=cF lKAX}(jM)'X7'^|gZ RPg +-b೒YT(LH ++,CKsf` +P5>-:Bm=WZApaaFɔ$(u/.N9BI;7(c-nW[ק;ͭ,fJѭHݝ/T6De_Ommަ]܁A1k| $" Σ \kt4@_𮂅`V6V;pz=w.{-*V=6;(nV.lA$./6Ϥ?Wrp|b [rR/lǗ:A;[W'ӾO;wt%8AE($j6k%Riw!CYb81>@!iU`XݸP* 9j96EK~W*Ɖp]έ"L_Q7!ͅ$if+EќnOT;T8 A}&PN ( m{Fs\ҔJ9NCt `79H+T*k흽o1r=:;ٹe6<ւ g*=hp*hy˥zbNXQewOSTwdmv&k{` #1`X_܅# 7'*HU_oO&ӛ1J@L. +Ph8K{@;ڭBuFhwiY\nLxK]Y7,ĸiWsIq0̓Ŗ r}5hXn65c:43/Xh&|vi[2bx !F`t!H HT%q~JӾ,Je_ːɰGIĢIO$t3"y\vbQ|a̳ 94<㞬'2ڜ"r$u1(꧵$glIE+ޥX/"3I 4YlhX\Peț$Z0A5t'Wzv5 T#)3x^t[o| ,QmgQ1$SW?tj 5xD~!*%ҺKN˵f W\9`6,jִ:WNDiZeu+1JGpJ}f;h.nKƔZѭ5vFKd_)_):NA /DX*iJ;ddXjCA$RJ'4Gq =+4W. O.<ʇX҆3:Ax,cTn*߰!EVw@Lf2&P(wYb` w9CpF8dmV)dϤ -&/eH'NZY& OL'r:et~n}TK-ZDlNR/\o7I: WհW4gۙKe+X3/-+Aܽ([KRvUj58| +=,M8:xحdZg.=_FߩַY5lKT0"D.#6]Y,&DKqAca +*NLo3!Q/˺ʆfp*9"6=IlXP:(Dcg(P:[d,5w=U>SSF5(Yj:cXIg4lYu5c1ui$$,_/VϿrxKϚz<)\Q$7mKZl\M !n5)yq!GU[uZi|E1FC2d&pț >x$0}J G2bsBXj[\ORE?O jtNw  脰-Ca;֕n.%3"AT*У-ߟ'bQ:R;ɴ`O(cT:Ń-Km0D nRt)NU}Ri^<>.&(&#W,Ҙ0}OR!cq9y  ٰ E"AVO*W0@Dt;TGO"\H$*Ί,{٘Gw?fI<.8H3Th hĪ0`iIHVN1KVZ5r)(Dz,lt9l#7hŇ-z1B|XG꘹',='a9N# ^dLu,{$bL% T,t`Oq g2+= M&+֯L&(gfV + ( h~Wx<1Gc eK()cYE*Fb2a */nMA.Z^AI\/ +Ʌi8䦨.J)p[2+t(Y˚?UDBFzфr`u`έ]kcx fy94xXʁNĸzs,Б. TFJ, +kXfy`D&:A0X* rD"lk$f,&'@N$ǰ PcXh%sv">E`-|0|ŏz IYH +  pPOgI2G.'!H5a*HKXBq;Si L +&ATTvͽ!M)9ST '4r)?Y"j/tIz%CxOY,Rd"+CX.n/kj*\b*Xlei-9a2Z|ع^T (Qj2v?0IA50 mHv8 )HTaN!@e20-8UFqHp|D ZP>k$]ޣSG"֒-N!Iq4%sdvf*p@(ܢNVLmdh*.XqO,*WnaF"i>)Kxs\2.Suw?yX oHZT6d9,AM* DBOzĝ~14zY'6h.5g"FBغ[d` y#%TK'gy*2P `jXY(F`o+ _g4p0>f,[La= ]KU@ +M:&\"J@(j.|6G Ah0ȉ9b؏,iӺ)*CÚTғ}Or뺳HfB*8πx'xҁPDy*\od3sx4&PA<*ر3_=cAbWfXghy P.Eu$()uB_; 7,{omUaޓiHf&W]={fzl̮4+vG @"zADHAoXL2=90>ŘEZT2<Fr$A`4h|%[ł5E1WE[I0X*Y0 +Co=R:OnUcP|xHB I:@8?uIک`(6̅)dd +R]D{`MKd3|F8?2:Ċ:(|6P3۟iZkӲw<7D.NBr|L,,8=uF4Ļuں8P@#x)1Ωp|O /e{xUk_PtR V ӝjV߉Ve&~) +\ycq^hx_כju;ZotP\Fz'?/1B*M9[dTN,]\*iׁFqad,r0FJ  {ni.`xP7D+H`ѮTs:._Jx1R {6>RQ ɱ_z>r/**ͦdݱhSIF׆Yl; 1Z~2^~"bIVEmKJΰ D9#`?d#ca2mx6Nx$m@e[S1Oj~ zøކ+|=n;sVhPnnbBn͂ÄZ\:뮬XTi㸔fȇ8 7 +] %P +$ex^^U*ƺeJ-V<9 Kki~@>^kДIUƤJRÃ?XY/h$TLgvk['5Xa}Qu3zHEqX9(4?xmWN8/7U`̠LbXQFď#Y#_,ˆ7nω-I7뇮;ƃ-6b!۽qop䋇7c VJ1rC ӌa޺jnZ,mA}dP#x;̤ bwGUmW3^algnFۓwD4itU+>ּp.)5 +WTG>-|LX*jz[3F̋e\5ڂdjSׅbrdk9dgY)kZ#- v{ mUIKy"$峯96'ЈWn^jk+Ay +endstream endobj 21 0 obj <>stream ++L)\Ŝ//~?_eb!xږ'qf{ `#f{Axt}+ncno7Z=6JNڽ0ځ!vYHf7ϻFUL\[|wN{+Y"1N^yoeu۰ $!| 65vk7n.]5Bl]'/4kK=5m-Ȥ(!;㭏Ο*1=0ܾu:YAY8>@>=n@Y2jP, B|r& Lkΰ)i}b >nh4cWo6D4)>XY-?ӜA}M,ЦiXgbx\v ESꐛZ +{_= -۬qү +Ķ1bCdZ~?ܖ .`Kb|$(hƱUWhe|m oڔۥ*sP2Q:K[#۝Z:AHxpvܑauX1/|~v- MÑu \g -auXrUnC^ʁi!YGI\ +4,dOp[Np+ӆgͣ5ׂ2d:k+QS7:N!SBe l{.+-AlƖnn{˦brLk\C(IvgOW^lM3[#Vj ((=AP$ VՍ^|.hT2`&Uj|XC33?8>)UG˚ނqy*A>-sR U4;T7z2VP) +ڎôu=A?p髽ok+ EuJZޱ^nA`d5~V88&\ATCU xpXrX%_o?LG}ls1Qf8)P&+dArhKUood"=C(v:B6ꎢSYTsRk_@8C(ñ('7Ⱥ0IUPc#F*vޜ_޿핫q/[ Qn$Qq7/d0afpzplV\\(*,"dk` ] ݽ,Ze*afEhlx?$Sa9ƈ-z) $੃/^^^P +%G@Wb֪_~˓ouwY,{mٳN*{{y0J' +{忟[-bNUZh +;c8RdT+T?,ʚ!w!$1a Ij*r?.Z7^xR*C|`{"k]KFE2eXD6zpJ:1| +]jx[˟c +oQ5_{)N] \3j^{X2$&S뭇6"2 0IZϖd]b.'O Y>?+e]oJ6; =i _ڏE$Bs($RQFOqAeoo n\ήO1'I8Ee}fydVhwsSγ VpS.U/$23,Pa6;A 0e_W@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?vk@q?v#Ǯt}7||2Oo>g|o? +}_oui3g~4j>_4y&-'_??{d I&-?yy{xyۓĖh_j;K;!ǂRT)f+% 791$NuOb&!^jB ʉ7U],()6rtZG7n(NOOqI*,mwJ>x9ȐLXT[9ư Ŧ9vTY(JI"J%u & L*J]QllU +W*zRYY*@:6e''ysam^lU96 c"(*T@za{sϢh}VLXӭaU*e}ٖudIz+ vEEy硟1b\?smt^ǵ'6fCzG l@!K#VhBByH{%IuQ8vu=~"+7X9ADN]F `?y_>W̹l8A3rIr %b"E %D`LB= .59 +-^Zt"UCd lD-W $iƯV] +Y&B!ުbQ+J.͂ bW 9g+ڪT=CJ! pa{o<8KZX*.MeKEYEP녢\1\X(:aX)KX((aJ:ע4I/L7_G>i9 4tGZTh|7pxS.7>E US۵UR$+MINUki#d}{Yr<zޤ9-(3o80_ mAʑA|'9et9#ҵ +Fą(@QFeed (%m[rWarcX Xb9J*r :ra QŢ^*^, +rrv4cK;r]AVtYҋHIZg(/f:nullHjX&SeUimB*1PZ M[<b2:CP`ݼK&HWqrbLoD*k=Qn7n4/QfrxaZKI!| +PLMզj$m0Va LwY@X;w}Qqċ7u|ӟF&3JRq[DMk,-RFp\ $J R_ƪk +dIrd;e/b[$=NHbETt$J:^ZfGVV>2HΖ*WJBk1lI3#R[#0MU;4 8J"h77J-͍ a1R3U%* f/W Q4raz+fA) `fA(dYjtZ^P,o#'FaY[bIj  b +rL^qBk\o5v +5)r `QϏ~> 朜$*JOjVf (pf6Ğnn;X>&uCkV@a&mweۺeǧg_ 'GQ5m{v~?%eIg> +7k\u9OEB,)NStrMYXplq([9_`ChJE'ݫzv%0GyFQE\JS E\H-0 ))6hr٩VCIrX(k%fIk9۪bQђP^hE׬bbQml*-BP9vՌl+]g|7KJߴ&3kMgGc7Xph}8?oto`g?uXg8 (v *0r|ไ4ag%B%RWRUʫpxT*s`YoŲ<7I-#UbajfQ*W4hQ K9ѵMcʰ90IdW_ efn0qln1Mf!C[4Y%uf$4RKU{8'ΉGjAtKeQ(H'B%H! c8-*jŁf Io>.`v4y+: $֪Ѿzmx6^JC59iN(U\ǝX/N,.P^|"ȷHW;Pkwo{gxeT;K?N擼ue:[$˙lneyAqmZKnd ܑl;qbkX#~Ant}{^2T<IicX25{0H D5}TQk8O4 Tcƒ@`je٬T 8FD] CP;.vJH7:r Nk>*UQ2L:(+&&b* Ī +wgڢ )9Nx+hoQf ΊZAv[o<4%1+4t -(ڳYq$s o&}^mGlv̉#oW~r'b ,pE}&+C(lRoi{iȸ5 %V]Yn^B~4%ؐxEdhom*OA *}94XoII Pb@!3<,XP*vBh\2Kr\"W`YTͱsM6i ċDRPХH3׶C_fOE C \&dek7\6Pg$mQ+.d*i_~ũDB-{=^Ŕ~?T*5PG!mk: ۝"ϖN69VeWq (.4+KQU 'I~l +.r H g}f禷Z kڜe͛:邋F */tK iqwG(L.DP GKÚ$K7>IxFvgVrfYO4}\)}t& &  BL( 9Gi)Ô"[wGI֐3oa DX6 +MrZb&W.y!TXə=TTET@Ru@*IFkċʤqҊQ),p/t=4'((%xO"#׺5KFָx,7 rYu|zLKDr/ߴG/vH`.2>k<ٹ} 7G1Ύ`{bцf?[ۂM&b76)` +7*llқ$7HP; ,IH!.˹A܎~нY׃`"PzEk?768tȚtꆹ%2BTk<19p[@HT:V2b0x !CW=EjC +Ia6 ͧޥ6]"5uA#T9ulRK K]䅠u8ʃO+U.À67W F^? +yK!Y8Ҳ)N3ǐIei._\PG)L$LoT +<^ KKgWV9W9T6pLRZT>ys?]UQ;9zfk6aqUk J9n~`uULc.vcNŽ9}c m;aM": Bǝ_?c`s(ɶQq!x ᅈ|^HA +83[?5+{R1| I͏&M\ B"F8@ׁO6ƥ\(HPt9 fvU (` X0\Jb[4v66X +'::j- V*'u:;XD$ nx8Ϟ?\a[XbQc3`& кFAFE&9JHDDRkVOڄrC!4o{3XHR=wƑ5'MUoGR5{E +tMyO2ź<ܐT~\7nz(h*xeZnTR~!Uq/\!RJT +6 ,(of{" +B(|៘ +YiL7He*A !Q9.[N& +X$RI(۰n#zՊV.+ϑfN!eD!B8l*E}M;(UW,A2PTL9MSŐb9s6 *ޗaH{*qIrFXFxPh_{H@z(=xBQ'&c}d9hcS.! +_&J4 1&,zZA "P-waCEH,g uKXm^&VUzâm(`9  Rlp56TsPm,]ɱ`e8hK5'z7_):CZ ġouo`E lAc\7SHV,ăWm ju5 5fH1B""?8 8VA]EĈ־sAHbRULI=)6dDtHA@AJh> kPlC6b9z1ĦwڮMAxƲAU@I#or\NPHV 3@] *eJQ%yԍMYJnk6%h˸ WZd!7R^j^lnnB>:-# ,m/PUVΤ20.@:/d]hjʏ.v #HCcxִmOmgjElrWY@ .mRDPL HQK`rNj0?mBFpm&JރyUBњG(PVsJ%ZvLY$Mw;c +>quoi.Kvp<(W|dDۛtH::yBR7(o"YźHV($(.Aq-vyӕf l»tM%`LRPtr)3Ih6Qh~X0E:lj 9N4mͷV:VJ&gsxon4Wfi|aferUH2R Ȣ&B+r3b +Opl>YjsX͒$SƨYM*e W@V +e[fR~ +fʠZ<T=U ቐeP-4L4 X`9Y:V +hƲУ2ߔ6LD;9d3XV*_Y7 ڂĈ pVH8\?A zN*q0 +'kfcH@r +ꭗ,Pn~>$[5ÁCJ@9[߈LodiOLk<1ʙ*p +atsxyх1YA9e\ %Sz TlIg +@ɲHs)"4a}L`,BUIbıGGe^ϐ H)LHM{3)L&ᐅ@#.!Mk0>d|ȔC'  tφt1tB!ZtPTAX״n +R2_7Z9چt;œ-N +ނ5 $l>UELd!eٜf17K +/#5m[d8rG,2?,jYg(P@zch~:ZŜeC A]VdO|r %k Y#K% GBIy07Pa7N%ˏ>d'Z,!-h[arV? DB]`,%t]Vc>7YTdRHI"P1s!P;( +Q{~[S ^ RDp&H bĈ#bR葻B[UNJԡ]\Yk6`ZLl6&lUz*ݥA)P*;zƆ\Qp`u& +dR 4lnЛHN^HFֳ3EM?2U& ,1NLI.p2)`AAG&g@vZ7E K{`"Et dw!ux&*brpFNe2 QJ +6*bB 1ʮ ty#/XLT>PJX(Y> ((|iy1)V 24 +@nNN/mF,Z@ `RQTT޹T6iIC-\ t0t7[ږrCTɭVOs׮%v@*J#d؆m֑#Ȳz YTJECs,Jf@|zAa :Eá&U +Ɔ[aUa(ch\S88p Ò ܨ?@ +U1NWdwG1 +|@Qj*d_ *Ba ${oT - |ߦ5-wԏd׏q}_5'eZWX#}X# ZfASݜ(yq^0d#kA A$ izAxX}d/ gf+ۂY_;]ڥڏdr:k+mI1}0&YŶ?T8_5)XHd{ 6IM$ԎeUm(J=$-\# I +Y&@-qLFi!398eڬЩmw ZbHTd- 4T)" [K"ۂ/ @hwe ~o޸Rщ}iC]fGAY!hA<$B!0§ 9L4?@+fncɣy7PVs_: gNn +qZ?)A!+D 3 mU:^l$@ˬsl˰vNhF{'S/Y!h ;CGX/۷=A<!ݳZt{Th"5CRۏj{^lW3-h?j\&˼(Ȏ<qfݿ̞6{ Pljsdc¾Alo;uMkNe#'Ƶ=rfzS /Dk؃̻P3/d_YR;\iv9u/s{5z] O}]\RoC7B,5:eχj|uѫ-^hFe +Bhdس8ٛ_tF(fك:qu>a<###T}ē-j0O[Gv~Y?:s-'Ӄyқ݌O'y m&Z,ȷS/۱¹O$7-NG_Qm Emǵ:=m}9UG0]ֹtoٙFٞ/,=~vNj]~*lۏƹ86O֝qrJs.7Ic葱ԺP#"\B@P˰ y?IG=z DFO~g{1+ $f,֋y4߾wX1vz}d7FZߓfU5Yïyg?ytGqvp?= (?W_RTU~4k.YxuhqltW;O gf=N;WӝOp0~AҼhn߼'_'O~m= +⺿|wOG?9='V0f/~uݗQ\QM9Z|2Xl?$֎)ڴd_<|__uZ?󣫟4kn8[aV"ٶ8!;{Yw +|xw.s0_7{G_M qcp}g;Ї^v/>ۻzqS/^ww˟\˯~7do;o>9W?9}wW_ݓ7?~t.~uOɚ;aX+FӍwyk5]}To^:I>lNӓ?.^iNM&CY- 7OEgl'NfZtxڛ^v^y/^~hu{;w ˧?ԚO;7=yӟ}"]|i\pKQ=Q0ukݓb:by,z*ɗ}{ǸZ/OLw_4Guo+뜬^Ox2~ӋOƫů_TA<}?{dUw؋ h>Eimڿ=o~/Q޸tE2!>x_Qq6ߺZr̉vP?N _tO&ӝC~֚Wm{tɈP_ՈUuޛ>^}>; |;y{ѯ? oO>[Y Iu>.]~;\<gA砛F{xKnw9rJ9R*éS':Gw۝6G L2 Cـ`23}w>5kiyƭ_}%Q*ZK,ɧdk0[̕P0BhQ1`tgc PK  :bUN-8qoKȖKr$ōnUlmjS*Fge Zc]%Zǩozmpݓ8'ڱd‘e]Rw;W;*#f (N)jj8sU 1>au+v('n`RY=1 J >wP'T~> +ŧX7=*Sȥ4V+Fg<1( %%..Sd6n=V XR[3wFˋP9~18?f.?uC z MQ?x䞙TҕGܦ!shÍd΋EPTCTiځ5jb^Eu%s?ԐqHb%# +'""9I±kŭ 4+Y$j`x\ BE9|iݮt*=6XGrD5zp#Yo8FǣZ,Ų\9kJ$&#ٙb+4s$u{$;psՂ`eliN30S382r+.'PCB陥s9N)PA%!W1,`>\X:*.zԊ/"!/uAX܁^jp|̂k|(OABAskI/ cPjmIăq1ԍeqfD(U(*&Hi5Rq-ڑm#3[n"پ8|I&&fL1!*+s"{Vwoj\xW惵hb&Ϟu{ EpBޜZԝ< +jù`mq^)B MLmi6eP4J ZK(flȘ8̉p84KRnE<&JDrs3J`dMF 8Ȁle#7S1ODN.P\/Jsk|4'|~#F ΉE*`!bZ#<5c9~tf; + xEf ]qPbPXm4! I*M#^y|CNB$a-@#g2La htFAhA iA-ک\kʋ $ %ZZ!aF2pOH "0^DňID™޽Tl,h-q.NІ@@֔|TΩ +m.]2MSdmN̟j*BȽ+R0;j)"Zx U_ɚ) +Zd%]fϯ_̟n±V<8s3w[ N%H|a0A0 PBͩ]QVv#8vzXMS㼔]r9ͱtmc~*åP  ?(U-ԑ+өR8=Ii0M Zk Nyrm#Cd,W\pVHcJgK I.n< ?֢ıLqbK#2~Dd$5^=<ḬbN!FʰRZLϤ3((:&i !'x9](R+X:dL3PMp"f_ff& +9!гHҴ|{2ךhw?=XUeVD`h&p~D(]V2HH4pA3+o))(h^,F*o@j'r<|\i;f06.Lu\OTђ~:HP&^Xg9Jp81e%HJH0^ECSZiH>Y ek(kF;ڧ zF}^M' r}ȩR0>siD=x!J ZF}QcI.`Us@8=vqyL8]y0"F7 bvB8u8$[E^<3$w\}v +Aչ`I9Ȉ(ih.zupPZ,ǥ`^PKZQ.ڋ'Tn.[\%&VmC42-9,U*\~a 6m`ܡ1߈7f 0|%SNX:vI^T^Z>qҵ{gЧ>o~Ǜo|w?d{b vk EuFu- '6~Ǟ/?ɻ^qoy?}n}Ιr} +NP9hX1 sgw-O=>wGx޷_◾zc+;'`#4%q5jTE`rayNgrfjimncĹ?_/}+~`bj#n{%GRju"N'- +p5X*ԧBsjW}C=ɗ^z~{8JbYQ\$)#r->qړ|y/|>&X|B+t?*%V{aٙgnΫWS?ϼĘXhhht*_u:DD$fi&ah&rl{N]v>gc0{ߑ伹_cS+gOvw㉗__ůgݿ}_>uJ{ӏFP(\IXoʵO?/|̧_}/|җ|x<nS窋sw\W~_o|>t=̗X2 +f`lh#7~wϼů|'o㗿o~ۗ>#sYA(/#q#疗?[zw~ӟWk?Э/>iNxBR,#ч|sx짯_ooW_ß7Op\eAo.'Gw#=gҏ~o_~7xW/ǟ ֊e-x6+QEJ6?>{ę֏W^/~?{O?O?y=Fv7o?~]wp~/}饯K?oW~7oǛ_~X)9IIRVjϮ9}䉓'浗^䫯_{o~~~7fg^s$aM%xƈf=} ^ﯾ??}Gԇ^GG `%o'S?񩏽~׿o~7_;4r0^"AQ֫sb?}S??oOO+?~O^3zlK^  FVW7} ?|G7??yGO38s;Ed>8*x8+ϝˣ|/2'~ov?LG_wlGJu#,'^,gS˫3{oy챫7>sr:EQCEt9R\MV^;mo-͏;qK3hFV8hˡ>@2G6x쑇~˟k?}7?{^TH 5 c" ϝ?ٞV[3ԅSϿm^{7o~s_x>zNg*z>w߸tB.]8Cp 8JSJgcn٣~k/S~wO~||F3A!H:Ų#|H}?o\;w񍯿ă֛};Ο]_s^wgD:V+n8Dl>Q_۸|/g~w{խZ3^v2nh a)\|:vfAF-9z*dGٝWH<42!rP:Q #*9/ٝ>!,j1" >GEEy-(ith& ٩#N,&IG ;10 =b]nFRp"ӣ`Gcz(gR6#hllsa^flˆh.} NP)+|֐|dBzJm--j66i%xΠt՝va ح~k Lb*a6V$ ^z&1lԚ\=߭SYF>z5:p.ԯ2DDsQY\:Y`9-eJL:S f"1bl䘍4Y.je#(йXM- fksa Uc^_DV.&U$)VD0Է Qz=+q1f۬8( ׃uI* +lffrp !hƜ8QE6$}͐LryBM8&Ҵ.)YdZ頹ZA8&Hf u_r8prI#RaŰ`PI1:"^@4[#S$Z _YQۘcG\6 0Kxpvϭ.cWrXqSIt$/vy82l䴺DBH4`Ԉj ՂbXdဖ!\A^u 耆x9L68SaTkXWN<~}+V vT~#W^kO֣v;pXrf&Z(NjuTf6/f&p,|hrqRZ&;OeC @A +ax\3E,^cymVJrIJ⠅x1r@e.kXԋGv"<_Pml!cc^t(6(l՜głX~E%Y '`eT-)<]3Gc0ր F rhC!Q.IbnQeB!1G"jR\b|`>4B2E[H(?:h\p9݊8h@܊zU?FPѐgʈvANm s: FCCgXv;1:;hasplX6 MAml%P11똟 _B.6ӢrZxBvH `Rj#N *r+ I1 :&MgD.~ 槏djI*1ΪZ/_źJ;lTՠ5,c>'TRq^(*qVNXlə)bE5#f/]f$/Y;jOqE/u +? 8@XJ1:e8W)^ 5.Я`8z<L?==))t^kҁjx8TQ/E QLRP䬦 EV;JcE6;cv4T$rQS8,PTS:$% t]

j׮?>t ާdČH|ׯ|VN ftߧY.Bm,M` +RWBJs3[^ Pp)uJ(,Z\պ@9h_&Y(3=tU)B oڰRU v8)#5Xɉ W$B +bFG}4Ît$2㴘ףV\!0lL2SsSh z+ @w!rIUf3 ~AFSl`0 ho:j&퀸BQV+p@h|aR܀xR$1S#j*rr bX_yg&>IAR ;q!#[/Pr@M7JkrRpeJU*ʆA0+ϵ&ζO 4_B,*K ^,#dy kCǃVK1YijËh@R W$7PWJNC#ڼWx?{lrl{jݎxq|襋W(ġ/NG;[W~Z8]-zX(\}w.4plX=hg78äƬ@ŲB]P:&x Ei&GuRg9uzaユwp|!?f*?#4ѝ>.z Ysz (npzc"AL1Jz> IAJ_xXzZř(/ʝ\}']j$g8\C`6q;#e:>Λޅѳo֏Nm'G0:S\aa3'p{L葁`&r@,i%܎$Օ`.=u-nL,@$%<#'#X98 4;Nt (."EJF,kI->O^*@Cw)6 jlHQ$t9=jx'@צ*xx 7\?v}tHԏYWy_R3F $),>Ba(ZiZlDF*FYִV1F-cĭT +$"nk3oAm3a. Ғ&i.QJ>UI<31@ X*p\̺\|)T=^XNsxΝuxJ |~cC(4zE^̣f.1JwOݼDy9CCC0Sb 6YLWY ( ^MFRܡ +#VJz30*pJztRft3~Cz"ʡY=0&)^ixldu pUVnQCaX̌&b2CDs ؝4B' Y^>T-݁tKy-0^JV,f\&JX(̨fg#n|frv0`8NGV#́2TZ•̲L*4ryxX`_7~ylh*LBifi#9~kߗg}wj(d2Vgd0L Cw;l mb^G +IdBp<-`gNϭ#7}~@hi >X +b)MGOeNÝ3go`fK +/a9i^ʔVti dnJ `C+S_$D3pt D\jg'HO{my!z${ #y#6*,Z B9l43mYq?(hTe=z##T{VAh/Eht8EK/T6R\z~LCVw_<͏v;iV23 x:p✔iO9~w=]8'i.rs gKno#8u<*T9'RH to02Qcc8(Qj +B|y!-M/,o[?zecɻf8Vf.b҇RT6mR>_5P$| + 2fEqU AH&C0AF\>u>9X8 +j<1 v6b8mV N3p +~Đ:/yHp /(Rgx?{rs&onwum?hFz_˵YQAAIFܚ;{O"9X_=~? +5Sk>uˡC#t(W,f t6 U"*'xwxCpGT.&vn=1s9~dΨ+_]'b{'.(Nwwc瞠rf p<%drhy^Q T`%k[K ;|c)^\N#ڹիحhx5x`3V׃%-XSԚwHt(#',c(wX͊9lP?rfAՠ Ie+joTj>3_ P+00\"1cnn7qpa>ҲZg/Ve0tBm<CADmD)x0i?7#'4 +be/xrdr !_OA[zo} -J ͯߔBefy͏h.w$`p&':'B.Y\^;QXMɶRXN:rOy={',/d@f(ΐNDei&6sr8G NhiWOwt +XXjz=JZS(.M1 3\InVkw80 ^4[? Ъ xkiJkiiɻ +'$#q=^8\n8h/d>KD,AAħX-g==ڬ NܺWSRe=^X>[k,L$RSĔ$.bA89 51ydi`?AKNH U$|PB+Ւ68yD n M.;n 'd!%QYJq\*u#| AD +-.%1c· LCNb<¹Ç4j~ ;(Oޱ +8_cL$+ +U(X8,sB6jҭ9船d0]ے7PwLm1Ry}J h?<\-F3r/d@8]7Fͯt3c9d*rIBhv"|4L_8vwoLB<^<{a \ 6 sڸOW֥C<:@ ]Eh L I=TOtDsnr+gV~QbsPҊōS˧z{ k&vfs9jaSV Hud~: nrBUGbzm. IjJ·B-#J{=j$[PHVzνӋ'fN"Twe9b`-(v}HC!0,XrވOY;Ħx蟘Y7S5;+'o;Gۚ`,bPŀ!iv 0@03y6o 2Q4eg"AXE[ar~8ujZ(pcN.i<ި,{#"a +z#\e +`bgjz_DY5Y)lB H'aNaǡH {eLt܏#0g7WF~kLZקhrPN q2#di: γ9L7cuJ?ݼ)%(+p+Ts饹'p ZgfX $+oyy٨806:b0ӧoUT\|$IɍrgD%kM#:0CN*C IF#J'MYoz|:FNΗaSiK:4cQ-c(6.ZLU3[w8wxnrvs/|1:(j49ЍIYW}0ThoKJ|J +E8b5_gScjS2-Ə!pbTYblo91+KBT!|a7w1RVpY%͝+4h%bH lF t:",?F.#76_E0C̭k\GSٵ k6wpR`KC 4vo6d\A#FXZknU2`x ɀs3v+htDŽHB.}*Ix:*,D~jr;oN_r'ψzNasf@ Q,SI"{la!WZ0azF Mx1 k~Dz^'pl(;|z6 ##%CsB nKz!23s{+7x<x}O`HcFdY([btLukȱKNhjgx +@vI*&P;),T);k-c+xż PeWqY,dE놣CbZh.Jo{vrgZ<7]lT0B<;/k.FGlN3iGF}P LGQ]>A WxRkXm`JPtҒv/qkrdT$b[} sq8A@1Ee "\nmOpP[Yغw#wO-ex=|'>d~\ 5kգPdC4K%[9:4b<%B*3uՇ$V[Fg=Z$T]2XqT + ÓJiwq?~KP Y)*+Nx)X+57:w/.ͩ*kw/9"ǕEqVG~zq;snnkrsZW'PP)jSp[W/tب=7d (`J#-)OB8j6pf~ε=-6H%gO?w+8Rllf+rhV&Nr_Xel~5*/]I&cW_=}KJMNT  Z#3<+DQTcHZPd!]5Yû 'p3S.៺`hL.dyK1"HOꋉD0۫Bkr],! ͠S<<ڶTy?sGotӘ?y(;foTgñv{kus 7SťZ(Xn{yjzSRz4?xOPӫV뽸RlA{acNV V+mQ)g4'ruNs'_|1ϖ$W2Hu}O㋫X}^eV:f[X#:qmQn WQ4 +ց :Y:ЉOO,]Qkol]xəcw\lnl63|SM\pKgda'˭|eENcd_[EH"Ja%/EM%ýw]DqPl-tgwFpBu%BKZ AO)Pb^P;$8IR|bTތenPOV['n/6X,+N4h07qǙ;9@$ Blq.heF,ɧ2V.Nb-Ѝ^38 1a P+O{6ɕ]ׂ`Ć)޼{o{*+{B[ l6f6=%'"G+#4zMM{mNB*Tf=笽Z7J8k_yӎS"I=y?_n\hxڝaa U r{e{O?z^ HXU6n_}s P"p_PT#54:a)7'(t@P*nr}_u!)U'1]mq'sXJYYiFͣcO=5`T!1!)vr|.x -#KgZJk;E UU+'g@8pvpջs卧_zK[w4]-8#|ҁZ8? a7"5!fj9W߬O,l^^`x grlcJϋF֭&-O#`tV?UEjr0: /@rY^pz*T"m4&У`L+{kXz?>$Kǟɵޤbրc]85a3Uݞ东a6ĎDv-Cb#gs2/MjCr0^<cj;|+WYìB(dfi&QKd?׃ &$eB4ie ;x8r>_$" [<'CQe|ށrjmQ7*O}"|(E!m;̳oȞ + CǟBQ?0<;{鍎b8|e"qa(k~cQ w<>xڜݒ,Y4W>IȕJkDwDsr;1Z{mbwf;S\3I:v?8V>DZi` |sP ( m~./~zucg˝Tq]=v77{;_y_Qv z7_zmvf?_>GRiŞJfW;O?}fgtuqjWyly޼^'.xYN*qBER;p#F?JRͰZ,ZJ(CQT̶$WqI +3 54͹\ipgFJ]$q 'HDV$X ӴO3>&dMD ``eE˺~?{jqnIڎc3OvpcͲ" 6BA1*ōKݙ}75G0Pוvp0{`d U9=r8~QĆO(;T(b= R")DJ27*+L+^k}Y- +Éf%.k;E\MUJ[bx0& `c00$i#iE?7Wkm-ؿq٥S={kU+Sqfp}+[ N9=ϼϪV?]9~c_*VW槶?+v[tWNz}O?߽t幏W??\vO=fŊ$d@E!- ׼,uS\ͶR&hO-`{ ^N-pRk('f@nEPX>Sp -65VoOjnG&Q+"Hq6JpR\ՂfUy)q8~\[OTH\tIa5  hAi'$rYKZjz5(IVˀ߀8ysPبf0@]=i?&(;cLe,%-YjJlWSnmySշLv>E[Q.Pc+9XX69dr*bC4и ||s|SUAIA:/$'f5umΕ檭5E/2b#q5#|qKE o +fu&~yO}3->x…k-|[Ooޝ_L+ 6/3T䫯gYU `qqnn|xwD)}3%،dIBəΝGf0, [KPl:nԧ˛:S-Ѩ%nTۜR<+$)K60 2ʥo|?ZU˖7at#]2[[t*3)9ßX`V%Y4QT;@T FB8vxhlmlp#G( O`1ݮ5}n+F+ %EN(BKdv![JJ:nNEV;Z䓢{ J.3:^&ANst$YW36@r{CV0VHVދFXɯgJۺ0E4ib~,@qe T_VD| @0TA82IB.:Yϴ%)ajfcvrf99-tbZl8_\U0^diCe f^޵Rc gs;hM$ĉ|I.V[{'{sKO+=sKv{vf;>w^8w>OG!;͙֎wg.x7[\Ly_ԭ E`ObqC^yKrK}Zd(.z9u `f0VoZ,/v&*ŵ+uSQB[彃.L} +[z_{xa !$_Δ6eK~<~P>r +A'w"1c @ %گ;B{+K'aXˀA`6DdNC0( oF1&1މbT40De!0P#0=v2i"UȶkjS€CXT(Ȏb`N8.r7%%7ˍDfѰ'۽}?9zZ.Ģ$qXu?qQ upIb* ˨oI|xF(Eg,MrQ`1T)H$qCOP "(\ M !&f8b$/p2 Z煤*g#' ^,LIɴ8+UoU H'I[pBO GxqtXap@qi3 LÖZ$&1DG!uJ@!P{Z(3) qxƥpP(=.BQ$'1kDžǁ=r8<1 q^{IMQ=s qb'0 +Ƈ*` tmqHG cD(HH%&K E˪ZͶ~jPEA>9<G0 $Y-Oe2( +`E`J6٩ON&Ƣ(%FjX J":zS-$x" ,L8pLPyQ +8I8J#8-8Aczy\3biFoʊdžC9 +E8r|Yږ3*/5`F|dҢ F  P(X$BRPGU0$ +& jD(0I]B8<,:u"P($˜b4LpT6R4LqFy)\Bh$"`"Q3>Pkt Gib +lpU 2A8*pTG3ck5=gT䈨01D00ExMhGBt$mb&`Y$b°[%LE/WM.1A2GD?5~#r9M#O꾙My]ͅ885bˡá( q)4'Yupċ#AEH@ːԈ(E18ȓT 0Hf\l^8'qR;9}OeDK.\$ p\ͧ쭥wXdl4đ䑦肈AqGs%sQHH OϜ^IĆ S+D6]l(K yR,f˵椦%r&˚8EѣC{Yİ\ hY뒂ƈPQ)GV{kZJGc -P.z2(TYΙH IKw7 ћ?Gܝ|eiE<%{flδzWkK CHV9W7_zzX$ 9U6MgaQ4cY|vx !("qrrpf׵-{ss!Ma(A$y^"`W*D(0AIj9~qQv<xp{~owREC̒ +GJ*hgOu 3ә-};O>x߹Ͽyߺ~?}Z!q+y[nզvjڜϡe&W;Fv+?o_} >&@ +H\94L<χ9iat<>ݝ/{?x5Jlaqo](ᑐ I)s3SK+??K}v/?//[vBÚ4"Qq\DI.'$S?o}wx/?/}p|T|6jʤedK񞇬[[7_~/{??os?x緳@@6T,%Aʇ:;6儞+Sc3/>z<[?/G/~/qJy~fm[/OџW~}o۟WoŷュWk[3`Oa`&s]ƪ|?֝<>Ï?‰?gn/) 2%roz/5e{?yp>\O۟>ŷ ;g|K3FJGb85.9gMў,;Υ}~{;>&38%$9%Yj0%t6S?ܹ~><Õ 8I-%ʾdzY /LwG~ŵ/<}|~przʗLSbM8RY%b#OOfkKs=w>;<͌`I c$65KVJ,Nj_e/>oxW_SŒ"XRm3D$;Z|ɍܜ_=ȾuKwo_oOqkodV pj)jN[7.wm~po^7~r\br**i@ɌXOE&beɝL]]ɿpwnοusl8$D_"ԥ!zdl)%[3S[xm᯾q~/xgʮpY{,K6e"-K.$Lp̣o]-S/ ϟ,+"|kp|MJr`B4CTV2EWf+%󆬲h7h3z?eWm ďFg'#G#oRt.^B3,( 9Itu;/nέiEHDIsQFP+uW5N +cL/_pA^22 LF2C"KX^Q:ΩUP̗]iL +GQĦTp2vcobˎ&h`BDOTgqEcø8'\ʴ&;N"E;QϗSE\%o;#@N?lp\6kC8A: Gp$ȑ' +#"$a#uj; ]+&01|Іa6/%hiv]R@D,nM1̍F% V՜$THL^ԋ &dShGCQ:vj3=29wT @˒3D^^2T {R+A{A,ruNDcv,~r:0NG`z]I.F3zæ(T,E +mj %9JNz>YZ);<6.Ӕ 'RKYkGFɣx,f'>1>6j;YΔ6 {{0EP@x(FPi͜S5BV0 Kq <2K61zi3u d\"QG +yMXbrkBgzcT jٝ~cq3fxRһ7 :Xp3;> <Q'lA*!iI4YZ|$Aq+Y4W잗:N&W(RAkPNvVT{ 9 MNlS0֘9Pj#DJy6S:CmKC'{d8.0ڿG9-wpAH,"te{aLbdiwx'BDBS2TFPDCjfP1*Ƥ^IRٕ`H>+z92C&)6?oOxT̞hY4l͙BAVBlL,j[sgXC<٘3ˁ0 +ER%QQ∫Y O0Z3[eưf *98t(tx"IY΀ X@.NrP0.&8d%(rQZLdfkc +Êh4p:)Gt!d?GfekLV?.\)ur~e !؉>NUk&S4OVsX-7*l +jMPIW,-fDGkN+[70 jn3&bc9h^.ueg +njfaVKًuTY1dVY~>(D#=Y/fcd e]1oK^f=SZGI]6~~J~OL-_ϔ7 w--eɜ nӛ[@3H cؓ&Z8jʛ?q<=̙ߑLgfNVc" .Pheg+Xt/~ѫ_y9w").Q0xt +4Q*F&@T晧cc(IKFb& o>Y :cC}ĩĈ4WdXZVɻluܪuwRnɔZVm6WىRl}0C>)ai, f);3ͩp@wcL9Ŭ/.9uذ|(ԙ]37rc#Fn+k&N!$E(s1VJ甠AlL:dek;dVdMόN 2do=LU5;'CՅqZl\ +UcXq~ƃ?|G+Tohǖ79XFs3{3 Ϝȗ'L N,n=ߛ85A+[E-OBX;9x@*;dZ"lׯWvKn +#5('g73rgRh٩ G( ]2= NWFTwKY8'.^j Gԫ7pSQ؈u/@8 0'ޘvuvrjn5LlMNUWEXT'&k\$VABc@ j+W=U^^ᵪvIf L&S^ܸyҋo_%&ݩ=jgJkʱrƍ ϧ˃No{~M3b8JVbWQ/Kf=ӛIAߞs`g΍zO .غ*":UZj/[N6F16AtZ1ZQͶ`e7.İUu^θAcl)۹Jw @Hkǭ ɵvg@f,FզR2=P͉.]{OoܨZ^R'O޺ldKtf/g/4g6fHvųl>}vv`Vcro.'w`rRsNfLF ty+]∟̭0|ut FhMyFлtHW^C)vN<>@H$i(.'mX^<׋rwnoO٩&a (GuZ&+V/TVtmLm7YV)FJ[4F{\y}j7VNO r1W\<{W_ع[O9,BUU.@K4_fg=)%;Q:OSf֯pz+2j|6y mY]*d䫔Xzkwk`f%4x90!m2^0onJ+Ξ_EFerdq\^*B\{VuZwTtVb T;'U۟ +3 +/&{bui7_Ќ``naU&ssie\+6647N Ax@*ٽ.:{Au"Ԏ`<;5}J80V IyINð;2C!J @J#cl$jbW/ FDP(as1Tgѡ (f%g@0zcA +yř$lRy.P*ǧlrZDnw IC^F+_ȕVLR6z:,̙dg, '㔥='idN" ^9ɭi(sk_j_Hv C(Er:;u^|dlc.N[wG.%ha%W^do O}\_U$tcpy`[84d :+Hv>q=?c}^cGߔ liV[TM]Ȯ̰qRHM`4Ю]!&Kyb$@=,LiHPFosqhTG b*-Tr=DjV`bx*F8!N~NRhDR<(IjKaxF6ۢ^qB@srC2'Q:aNZªU?$ V"3H\'ipsmݜ/2NwP6sd~9[eˋNj*Y.&8cuZgD(nzOКX\P<1zp% Ip+~;s: jXSr|e7@;@c42,NH)6Q7LS(4KǯfrS.@[2~٥Xl1ݝ2Y_ݸV- >LΞ6Aꜯ՗~ iylD~9&#S_~] V)?YlK;c;7N<" R-prpK0O'}!d>N1+VyPή^HrRsř[ VS 6(9>b9y>[\:}HAX mhf%[Y^<_:H D*E5OC0 .T]Zy(; =oMMP@xp$Λ%5qL NQ0p^mJcqF^v'w 1ذ +`]ljۍ}7'@+=KqԔ\8t-Uڎ^0(9v3u]jO3BK5~j쥅ӽ:Cgxř8`+Hp\ eV b hReb \1y:y#@ dغXD^Y>!9My[D!A(z/>t(SK~X( 8Z4b3"9zcEi&б(M1 ϫ+Y`f qe@ (K[~j%YR^(! DqS;fFn4)\4|Fs5{&2 o™))MLYF3iăV)G4V{6eO{mIܰԾ$A ."KB)Rݺ{߼{39O#" $P5ja*Z"ddFFb_߾o~7;, ms{%i(ޛ_9L$RS( 6yaSq_9QxesyWsYQXXxY?Ult]6V:0P\ (URB~z|,!禦me_<Ÿ MiF5%a-_X'0AgdeP\/-ct Mp2=8VkB!xhD“OAߺ keҍtr:,oߎB$8M%PJoDMA{v?\.W*77Uy龐.X5\Z}ylLͨ<䌤o赧b4VٌN ¤ +J F\}(c3<=WڑL2?Ǔe~WP$r/%,7i9^Sx±J$VJZ5RhĀ}xG@"w9E&&2$bx}}_g-EL/oyC1Qe}2,#N$CnMןr&gfsZfy(Z7E 9Q,].-\{|Z2%sxOijL3fØN `\N&|RkWyA&73K qq/X6)J Mk2S\L&xlgn尬MLg X ˥nIY '*%t\㙬L%RlqҝxVS˫/5 +/4v_Llo AsŠ^}bL=CU9xKWg=ȗI#6qNJw +\$>%&ϵG|vmX<EKpAIq2Y#J/՛tj,K3iUUyi28t.ǯlLNoGFވy.r8< D9/B-Dcٝ;d_σ !/Xscm`g_2щ/Pt.clOdzu$v~[z**ms`GRx~ԜȍeJ<ݐӍherTK XX)0S%fDp?e-^pSSOgvA\TJ\Z"!Z ^HddL:dR&XHg$ySo⊅let, :sŭ_m=MWV7^ㅉ.gFe'O܎X![&p1Vq"efr5QYQe@Kt 0M$kܔ9H&yi5.M|TVǀ69?*Mc'AN֟<(F^Y\z~@/s? H瓹ى(PA25 f@)mX@~.S".ݒr&[A)[E/jSf&B Tv:[Z eYw 5$X5^\VKKӳr34vY pD(K}YG\)iO&R(f + 3&.Y(X^-Xb +,0&3srn ?`:ƫxL + q-Ilj>%g? #FQqX"̨:% *C,x|/oS YϖB۱ _I5ٖ>C 0[!@7+۲n(fln/͛90iӠ:V9!qEշ+SAڔ4K*~<>6a)[U#zv$_ԇ9AL(7%bȝo6@%@,8?=u(+)dO&TvaѩL?Mg&Nߧrd=_*mZ^V\$([;w҅<"`!LQOi*of2qԗ{ht|4 R%5@KzNruu)K0F +IOnŢQXqNz.(MLLdM*UA%'7;Xel+EC3-8DvF#X.ꃒ@KuP^Ӎtn!Kef|X&V)0a4b + '3T۹\q.`$EO$W4>D@²blUq<FVIJ)0|G& +@`(ln6i\# s{SIRLS)_JdU>Ş."UF&RDSdr @LX>at, ɻ\h–lxxOј Kԓut嬫K# +b,5]oJ&S1O'v LFGL1NF`aμظ*H+#w"4X0쀽\E?18:FLF"213ʣ\gb'qfU[~l:Q?XAr0-R..DvQAѹ9ET.,)` ς}H`+c4>LB(W p8)Ԥ9cpSj7sqwndEkH|njpiS?g^3I@GJ|-9 IJ1ؔ87ͮ*|q.z4Q-Ԡ@?%.\a Whz4&ZoO[ҹ: LXA  xz$Bry0} 2 vV6W7F82z0Tֶ0׀Ü' F̴ɮշ7tWKs`Trƃ fE, +PL`4> w ,beQk~=]߽u+ d|5vce~qrz$" |n:Ώe=-qCdZ׍r1_ +sR:_js48ۢ `\h'`*`àhr|iu2SOfkyau, p; b#&RIxoXk5ǬM>,YKYԀ +k`9'u0C…\(P\3əD(֭hDq_4\>Q cY"1 p] 1\/ܹs' +X o"33}ו5lI?jIœݛ{ &h8{xj>EYoo_?"23΁]/.Er2 N xx$ð`R 99QNO3uFaN+TO4N +li(lˡg(|󗙕taKN#*%3D;bvMc '&D`C4>+CRiex*2- b7FYZjOtGٸϋ `UbeA0\DUI{KMz>1^Kt +Vb.TF'3o$n߉M&Ub"9I)$b($XTQ.o+%i=5$-qF8jWaBKT@|yPj=? cYu铆ߗq\*=7,T?ėk/#Fn)jA+g ++0!{ j@ߥX㗋)0pXzXq0-Z;W9;V/t 33 f3%P|$>g$ +X:Sw+SBy3pM}Pt|j h +0:(oO[+/99 +e0KWA7ut]^ud4g}5{|aL"QQv*}+"Z0gu.&2hLHF"5PщL,5lP\K̙ݵR]X`vSi :1+mtJ@ 2:V`u/wfz"; B[eOhL,b@Dzl0lO?t0xjwOȋ5U I+B ׋Z,UzZyNGR"3pL+ୢU@#|i*`KkZ19z2ÀRʤ3S'_X(m5.frXJ$ZMWRf[|&ۘFTLn y0R W'<( wF\| +j*= E^^!3j4R@f&h EaLBJ+՟c>@`R<ҵ0N9!8cd4Sc =KwFShhKb?/(+FrDm|tFO`H#IAyo+)?kN?ӫϋ 01) fz^A? r f8VL,1LM)4QEZ 넯lP|$߯_jg%G% ?RHGGRQ(T_olGF2\/8_OaLB}f+-޺rrn4_Znߎy0% +(w-#`yau̗Sû*? `$sKnJ l=ކQ]\+OF'|_u>#m}JεNZhReuZZoO:M;^du`[eyWS]^1w[ ڪڲ!b+?kvO_qpWor\)Ve9x1qjۭumVz)J ^S2Mo헻*uه*w'r*%YRDÐuS-Ъʂ*H2w@WJI6$M2E04UtlT4 CW4Mto3MQ7]rr=w&q?ô8ǧo_oN`ϙagpƐJ7,o;Q`_n?X\'6*S~\Y/9U¯sCPGί[FP!b'tm4.vXG>zs勞b{'.Go:ǭU_ms"cwxv# +dvg^{(> 3OIp }Kv.ꭴogJ\+m!+5;o:9P;;)C {5o7XEp"i A&.1LA0,U;L}>"'V%U[* V r[{\_spt"<*"Zzq_}KCv}v.})՟W4О;GFuܹ8o׵jcWעư"W2M㽓X: Ql W`~AArk$W/dgP%}(p srogq1+8Fap@!⪀K^4ߋ;hWGr"^4 %:,*"^͘"!E/OvX +n +d Ϡ JϠtAoIGbxV嵴*˯U[qsXLة{uT}w9wvGǭËX9D/:]7ښ0n**{.k C΍Ic)pOC2#qtH m=ubu,vUjz ̸ϥfq Oq!}M vRsCx.5ϥ?<=h޹/OyJdyI}xxM*bC!ۥWT;cmC뙻{y~7VWTɅqotUD׌ywEtNZ~1_|laRG<:8gqiʾ&G +=.@bdFxWEu+/tq5R!\ٮorMw2ߢ/;=î,oMʗ/\f?v;Q9:ޞOC2lиѫ +K}Oݬ 0a3">}A_ʩzzl[C c?ɶ!:6Y)vZ-VzSvj3W{'/qv}}^mM μzi9@qaDžs:Tsk,m#=6 @&_+jm1ׅnƁ͞'HfZ{':hnedw>(iiW?U{EX6@__9HrAs|'.ϗq lj_g=N#N=%x<貰w9oUDS%]6 C4tJn,"4Ԣn*!S2%U;MM E"Kׄ-fhi=jAD ]בN^J4I5I,I DS4Y9^-).Yt~PJ`"%U l 0T+rT*%YPtld$UA6eUe>Je앨:rR%$ꚮd +%EI˲!s^UU7U{XW| A/9ED]$j +(i*  d$1a7ѿNu r +-HJI $h*LFr (󬚒 ( j-p *3QDxC5 IV*C8x0zIPD`Sġ6U;~@7eSQA%a +<7`GT&u]7U%4%KyA \/ E>FdPZdwh]v~A% #m0V |g7[B(@h <$U2ebj;(jVToF lK%CU-`|EMv C +2u`!;h`i;0Ad+\&DQq፲K @4i)0H0H8$2a"M. 1} <_OPϮcg~H0z8Ȱb@@b :` ˂ƴ2xDk 7aoAf-1M?0d( 5WD sJ݃Qa*I` Zb= NSHubas(||EK MQPTQ%`A҂i-bIohT4T&`l1MAY އVg B N6,@j^(n^hU1-ҤUQHEԦ +ACهlBQD`Iq,X(tBJx`:gI.The`k,؂ΦW2pcۦIqNsl7P"D1 %$}ZB%$GנT#êѺia6 _ZZ8@m%˄ɠQH@ 7B-$ +$ 0p + +rS[xʀOaWgSH@:&i6Qp)!bx@`E;! +:<4D=HȫZq@3FBР +r7I>ę0.5L7 ā OMŒz u9AF0QwX{nUY?ᨄS b)EIn@`+ D'Ƴbqe͎A ز" RQjoLatq…`s[Hw&4pk$4"QA tKxxں(a /‹oqH +Z5$[G# *B &h12L$ae6T}]d>ƈXRd\#b.P(Qs"ruG9L% :J_Aj$!*4 DtQ;`k\6!C 0EP}9 +2 ;U:SMA} h bLrDfY2ӊ0$w]&t^u#@ sI\ez=."|!ZfdkFerJRdW`H(Z K䛠UaiIJ3Ѐ?@cd6[cB'j2huB?+wbIrLR`b]%w@"Vd JhoZ 4h1}ו-(U>2TkEB\mtu,TdbHAQ2SN%((Pv eM3cA5v  ]"A wAfxPGɃMS'DVLg%!NgЁoƠg.h_H,FBa{Q$ 3 l|͢DKu(5.:e&ejn(V!* +8Iҡ胕$ p'Yn:X2D +aCh2%wR6RHk8H`4ȭ*2ׂ9A밒qttr*lH8PD$^MT+8Q >KX !,[A +M4z~o4=7N:ɯ](TPD'o)rPAJ&_ |BAJjCe 2?؂]IDKw 2G<<ܶŀFMYk0HH!Q@@ 1@nf-nfz=0 k}kh)HׄKm$-UM+ JҹxjZ1h`61dKUd$O=IH4pRQ셹5Lo$t ia$t +Ң-f_3-@"4NCB0F䀵) +EF E+(P|. t@̡Lg< ,LL&>bAF!0W r4cyaiQm78a- o9MCuYBm;VB?$d%o:V 5;hOmؾ0;@#5 f =t# + 8Pk$S(1jP&N*OXңH#<ܤEm ۠$jP()),f! SK0K9Xx|GB=rx e +w:z/2Cy"P"x="[2a*e`3iu)sBAAH#"6폭#d͆L~R̹5Rg8reӭ 5:w$H &AlT,6%^"*a`#/bL%b9U4M/9 3Wt#@")n <" ȨF]8~e +F3Mqq AD15P:I&SgAC }4qBfcYP2kAXLAd+ƅ0ʢgI +X:C%AzI@-Э `%_U()in+,ǐnYeAJfUZiKz zql$Zq"Hn'8 &y5* Fqd{n3[9z7 cS\ZpAl  /]bh-09/ ,YĞP2 -c`#dHhc# k EeFGp>DgrKјܶeVIr&`84lmkY5I{/W D~IJ'2Ńp<(X%~ذPHn+ȼ`  g-۠񁔄ąw5{D + [jtHl̳hBdLNEtY? GhJ!Ueъ,頜e9nTZH|Zӊ y|љ`1%Kzo@La1dM +:ej&/!1vucvCFWDsw::O1OHzrTT- 2K@#BHP>tdmЀbU++Ś"d^r&IL9ǵM؇9El3S2`%ƭ\rj*D *Z,OiDX-șa>stream +%wn=1WEH9 \ $ TXJNRMl, p0tn?7-ǘ2aR3 +(Bhk:*@t6&.Gޗ=9͢ VU!1L'ؿ B.>{Uʂ˵rc zI?׌?z-gٲ% H&5ssޱ0#ǑcǖL3eXH%SEBM-:3&:Ky5YbU1RZtv:{) jlݥʦI.yoIPAf|2Y-8a +͚"Ԃf(X6']xPaf([8L&i[ĞgsdlYϖL%Y" @ tv JW 1)3t+S[0*9~d = P̈6s#&:(,r XlJEhg+̰$nLJB1b0\DIU&w u+`2mbC/hYEzr er%~6l Um5rzD,G=Zb71ґ7iKD-Б#hK$lDBJ |D k0@0<fGa.(MeV@-ڽ k7'[5*iAб7gv.*q`V#ϖ.aތ:GƝ=͌o)wB, 40f59 QXmH:)Jy1>4Qjլ PXaLG-0<^$QrXWd6a`9H%b SK~Z^z3, }#$+8t.#=(eՑH|gǶ{FLBe"8) -$24&.0ҠtA5L6dr" L6T{dՇq381dJdAmw·>hKh{ vxa1V ~bq6*%Fq^\䶬wx=m/_ H6-h A1.'EY2lP +;aE +NjbODOrնk{z=HЩL Gr9ӚiϽ g}H]Ĭ${m?8OQQ<8KO(ec䆡mW(F@QtpiҼYimJM4hERʙeVt1 +=aK⧔CđVͲ3ٶm*dD{EF9ּ"B@RObbH4SxE[If-%R@H+nRby穼,.v)gxlCg6UDN3Ӓ@ @EqtR(уY[~;b n[x9VWe"RXzYI, Aqeٳin\6 +S$kS\$eggi4E6TwAL>rH]$C&1I6 21Eq"pYژjO% @>7UšPn*`y 0'H + %RIDmd0Fup&÷Mm)myt-ّȡnS-s˖[``ekrM.GB#eՖ٦DDPGɉA RlA7i䛣fD@,[ÑH78:r fJJt&]Rd3Ys:SHF 0R{:3ʞcYKT+ N6-EUCW0CܞLqdYY(&K+\6v3Ùb[9@%8ѮG!&Et1G8"Dgq@Pt7Xh%ELݤű{H đ"n{t͛-1 fw1Z Q- mw̲{l[w:dos/p@{j3M[|Au9$\}sSSc8|>$4%&R ՙ#@~maI;66[]1lRk6[f)όRR+VlC?~pˀD6I6ʁ;-15s Ad8*mKq6Aҳ"W^U$Ssp9f`a 8VEV0԰BrܔQ^D  -3DKN%R)% =`Rx6U0Ylkhr`hg=K Ln2_+pUZgTdE1s2 nK̽O]]t6OR7F1EIB%*֞f-mjU\:ѽق22X*8[!>)iMb{Ikl1>l6χUPTe*ь3i9ˮP%37hvYtffXƚ@* Λ&$u7Jۙɴ.\esܣgaќ3K PpRQIa4QiD`@P]j^7ܦ2DaY[daԖ8 +mbi0*mMLѳ&T2?YT5AM4сa N A]"dEW= ۫$!ȩa;#`/@.zUX2 5`3T6zG'?tl~ Aг[AJ+~@ͥPDMς^m`8^L0g>y{m˚zUt)ȊenL à r%9ν,D{T/C $n t81K88v.9Cã Ly+õˢ:9^wOvS_S;3k{ɽ +l;or[IENRN:iX8VꟊeVGȸs +7B9.bǀ02J1_J! M}jt?KtT. І5>kEMv>L_:ၗqрtU~|CtX;U)TLUJ1abR7afXvl ι QEܰe*⠭}NJp& Æ[M04̅l9{dEm&Hj^hb:|`k*2 H'<[Ü ~?d|i1.%,'=qšyh)//zzϓbRߚ}gz<` DV70, E2b"捛 +tUwmeSP+~m=6|T x~ +e94`;ѥߧ[Dh1XcQ]^i0'"p@Q5L>t_h~}m<@CIWpˆf*cT+j +gV!gՖ=6 Ta-3;⊓h7L4VbCc(cK:ʑԯ{h Y@*LwWWUR[è.M!RmW?Ev>9<+.w9=j1Q5wbˈ`;o ,)p?"v'#h#\I/_-II*lny. +KL0ࢗ1B~!LӁcitB8цFDg\yv[ʛpnաT&fXHpVNyso %Lc)@ of +k ;å|gDN +V/J~҆ E#Rј'Z|XY5 +%7^4pMrO<) 8Mâ@V 0! +$aW4UG-l3kV +n~W&6D nq'sd7L FU'0^5>'Bv%-Xܬnk ie a4oIK>p=ruXl1VgVт%`1pmFyit1&J#.]gd#gB$ Ys-]14|%JK*2NZX~(mnYLgL6Z: ^4Q"+uچw-(n*íhrg^J/$sRSϕ +,7E6Q?1W2PcrAԑ!u5ZnAMrYu+e@ҭu,z Vl9'*+=hgT6ݗF`Ǖ! +Ő:šR&%49IV^rN.KIߔA:8XlCp(x!w4f*Om ]{AwDd/[+bF(5-1G%U!1[5ͩ +HFloYtKt4(5J%_Ɠ˽ܲ D,X-+U@jf0=VXo失\%Z&b )nT,tF\Q[8YQ n +IPuk SEy#Ui2gD(RۻS]G*ArhHeXD_q `0E9Bo;GYdo>ʤIWiiNTglȌ ¸lApwX)^H,VHj% ABQrs;Kţ4Wբ +Uh;>eKۿ֨PGLKFcAЏ\QP]R؏%2#cE*_p!v0}*$tt +1z,M:55`CkdI[*xR+OhAMs[Y0,WI ݷZe('rZWv]P0Qf{(n2K"mjmΥ@/'^ۧA.ItB 'U7vT[w\6R)u"Nz^$ia+vp $_'ƙ>lR90yiaP-LȽH0`oW+o 52\+?qvFVAin%lX vӊI'}p?)s\KOz JiT&@p%lw3ivN➯Ѣ|;N*P@* E# +`1@%71뵃3XRT[ +LEN_*JXW4nSI'gV*YJM4mϭV2|"ХoXLjMz3w,5;KW6̾/֣uM/7QFӇHlB~Bx+1JVxLެ986MK^r-B)! \3_b-źHl;قNr@+q@ͭl9N-|8q@H0(ϤZb8hd?C];4isQ'=5-VxDQ%ԎP6(Q!|]gv33!/a{bb'Gx8f1^b/V҄r*D Rl ӳq%4G4?KZ:-40oPdv\Aӓr֤[̳/O˃W\<[\LW._if=7ew=yx0kIPY2߾hVtb9:ɀ$H}kw=QZP٤_#BɚWIX[Ϯ +,~\xШ)$ؠH'4=24綦qU}lϜIF24b0P#N "ɴw8ChCy'E)8+rzgӦye6gxnLs9O.ODZ‘I9 D::cX?s.͒exfLs1KT["1)-C XCJz0-pUޜ3O04ܜ\Γ&H;PxOs"ɢ&MܢX/y4OS"Wrn\̓,Mqʙ`dEy[d 8T8ccӹTsZTq^2L#T?!VH1U@=1d$f,E,&+ݐ/ ϞO11L´ń?!vĿN +?i#!-=Y :!;Ж0TÔ%@c6t6 - "H*#Gu:dj5v!$Ly?=Si2˷1 ?q]Չfӈw 6%,Rݙm71@cz*[^ JonQ?D!XT[xiUU*O>u=   .-ѷ8s Pd P ̽*v- Fylw(XӃ ;*(oIhAn#HnH[K`aﶜtgK 6EM@ >ŀcԧ]az,ߧw(eHB<;?ye9Q[qo,mj@]AP/p71APA6CRRNʫ6ZC$ SL;һ\t|5߭ Vl*D[⣑I?g&P[2&Li22EDY` 7>|{.pi}C iLeC%$ۧQn +dY\/J'Sb+ +~N]4Pb9 *-OcRqe4LTA7[p sOz)H_VvC%]לpG))taPEH2ww8AWϡٙacf~ ǠsQdԦ9^%dwh["t2e{G"lWPhc8ksn UAn}BmA!):ֽ&mMukS^).183RB0$@%4l_p_έK ҙ!#,~xVKMtlУC#Gymm?~h~ jY/C_^ mz ʒ!̐B,2h8lqSTf-fX&AZ;PN\  gh#0@m4d7 :C?Ȑe72,S.;3s.S1]ֵ!Z*Hb%B!i5'ȠVw%]mr9:2wi@ԟI~$: ˠ 4JD Irb +@@rUpz~M1c&2Qj.A]nX?hcVahvX5D]ܭb1Ux5)@Ag^[Sj-!ӃHm?B#B+-UMT5U k̘SxIz//Q 烓 m%Ϻ׫4ƹd$H w^S0+NEy*WmJ|mi4<YYۙ*EnD@9}8d6]5òO-:px2~[Xjk+@4WF=akzE^#޺TI VjQDIo@%6փJ/m,x,ՀI| Cze*UI& 4!WFdJO"0# ҬhE3o2(I܀)bG%q|+YqHD8rovNjwf r&n c4yz%Mvڅ?L˓gL LJ$_Pς4Ґ=.(i]M^P|BAX}SzW#UZS(KqyXW *13@3 +C >5C(6#)%̀)ķ3(rV?ؤ%+Mi"٢&m!h ¢ԇKkJ Tc܌\&</4@56AZYj #b!hu&Dh؞=)4Փu Qtжi)4 +P/KQ(:"4VIdQ-XtKϱQ4QħgW&nAA$pЊwE!G׍|.EG3+4EGs 8Fe|vepTf<8d2(;&9.8 + -UO'sIQx".- Ѥ.F4bB}dC@ z<5\;h8=(?>g@T QˡQ^2F h +zIgPHG]ɤz}I#n2 ,wШ׋mzϗw=A6ɜ(3mx( N`m܂& t[ŠF^t P"6}>Fj|a,PS! y +rwAϭ9:Ջj +/G,X 9ZѬ*hnКh2f}Z"T@77"ְ'!kHE97g5]z= ϤZcX^3K&#- &5*Tس,dY0EqXTkzv`A(khEAER2(%y+Ƞ!Hq1*B!Xf*HM16 +7v[7 !†PBӓbb"a+A%}e@b+rQR5@:ɼWs>e^.Wx~!GkK!BlBI+xcWi\أL}!7׵*\+HRѲ"\i|QZ2GV|[ {Wip@_dWU+.w.rᮣW}Ϋ~BpL5}~S +.S ~ϑ2oٻv~ݎTIRN:kKi8/fch\D GXsXOʠymF ɐJ0%hRrjLR,6IY)2ֲYRtHgUHRϦМ#xm)' M1׎t@rUHEеc/^Ez}"=, T N$֙TR: T*f:kЪK jMaL(@]>zS>'~xTNP\mRZov&rL n7<TlN [@ >p=VuD!JpcRK- h1 b1Ƥ W\iCuRpɚA(/a!p~ =A/fW/,2f-UXQ/ۂuL ^8]_R]u 1jvʎBئtT%lK'Adҩ b QHET4I^C)8٠ie4W |*aMi +T0/] +u ,Q^Pk?[qrMS*2aPVTGNR:24E5Q0U 3pbB[2M!(c-̗ƍ^xǫ4X\34 9I~Ur/أt=;>`djJL +Zc(;dA(X" |JVzVP(hũQbg#KE[:ްfj*38⛸꺊+85WpR~ +Nu^qʮ@jJh&/[`:.ĩӷػ*v z36&dȑP;/{2+|ITPدF]#,ƪmiG@%h>ʪvaK9d+첨69b <"/ԔdQM\&bY%V*b3IK TrU̔Q(6qIu@AEO`_O`2lGj 9[ZS!8qc.z4 r )}DnC/E`zusv~.dIڰ!wɆI %[rHK6sl.ٰ)w~Iӫslؔd$wɆI rl.0]u@d)%ɆI rl.0]bcK6Lrl.ٰ)wz0*ǹK5ƹK6Lrl.ٰ)wɆI %6.0]adæܥA]adæ%&K6Lrߔdd8wMKOr.%PTpW"vG@ELWG<ʼnWR{%xŵWFM y% +L'D%+Q]J; Tz%jP+1~Tt ÄWbJTgC4J0koIHM함69bx%jJJ&ڪeȌ.)SId*  -_T4kbT*3''k=RR$3ʒH_Zq$FC15J5T$+jg ⻀ +/ +KWٳjp>@tYJVecZ{W¹dksFqS9iV>]*&۳  kΐۼh@}UO{zhY =;ltc䁢 L^EǎH&A=ߤ@[uk{r*/Fkў嚥ETpfV%xGlQyvy%H,wWC՝D`1-LJIHD:I&?  .ݜ[r)8=4G!ZYU'(AFxm9l3F)+,B] 7"̍(D"'G-#ŦQю|Mbmx8&|>X/qhb{JOګԬ˙'AS$#E?| 8P/*P:MbLy RdrLW^*'4O9lF嬩3 dE!iF$)iW̕?W=x/~r髮_0HM6/6o|7yuۚN8':HYET^u:ps`&6[VͿ SSW_HyկY1fu?Jz8O&4Ayi')2aV@[6R DQR>JO'J΄ϗ4m 3 f%DbWveV>2 Մ/I`4~IBf'*| 6SoJ>VS3Ә)EU ig䲒FEVdl d &aI먍u7N:'JozldJ +]>:I"ゾ:yDQ(+R;&.cf$w'0tn5zXhl Φ9q xzmj훣;JE~st,s~A j܉ŰiTN>O4{OxTIg?]Mf#s37A9gƃ2&4p֙p7*#au:7k&Fw˸zs~uow{zNM_9~ϯ]_Zb;ٵ=,և;N{㫳cwOꧾ:ZODf $w.-`|hKAjl q[o5{Um;/UD\e&rVhG7Dm#:Z~˛Lk̥qe><BVD+0!Nh#Jku3Kpۋ1IoY7}88¬muM%+:/\x/czݞ0;O8BClQ:nr0q9Dz#U97C>cNEu:Fe D TNr0z!?RV Q*y@)ep!wE  A_A@ +mNsEhJ=!mIW86ypoznU[IB:zZHGSp)a xsh}qR,s>ukͫ39ȯ ǀ#qKt:`-G3S _+C{wvd4eNxH]uw,{ ҏ,9pz/CD -w! A+/5cTX)j[:O*$1gcսiӂ QtO`aWZ - ՖG ԓo Fr%\w%}Os7RG*Qx+="1u|!xdho^Ry۞;ͣjsr3 ԦQ`뗷"AiXQ 9*K*YR2-K⍼K B +rZ LA<$hcDi,ZdW.L Y ˠGA1=ƹ_HKH/]J[Oc D[^QʾS"{ùq|Ά`^/#J)@:,V~ ղ&9(>UOV99TllE>-m?b;Dm+_BM:ap+O\Yj9d=P'c(%Y#7| r$1tu]5b;>];G4eֻmS>\J'j6ՃwK%JܽN3GrY=¿2#0c mE6C_1zU+7JӨ^@` +A iT-q"<,Nx %.FF-찢^2o~;B<.E}| +*ZhEZTnPgCs<ԛ%%.jʂؔ*NԎ֊eΆ\qABQKԏQA  ZbZED-V9wqtbX;l^HV,4\ -.64AeV;ztZT>jyvć;p gaFNa؎bG K#,(]D)_4x.qь .zh;Pdp1]4Rψ" +~7BEM#:4`+*ҩdI 3ڊցz1e`zU) GiBl_ +h(0#=q{B 2B.k2wP@ Y P)'ƃM74q0߱gY'}6 nh9}}Un(T˂+PVD0vu}|n[FCA50-*|@_׻fb&3RP~Am])mh.uCb[4rmzg#hh6b >̡6tk@3c;#rvQޫqb |-" +#PL18/ZRR>ʲ* pܥrivj:\iI5X+rhǂ?NQð(zC=Ap_"CUOzX)U,MJa{FD2V}8h5^wR8PIϨc<\daN+iM(tqDA +Bpr9&G9({:e)p0D@QZ=1h阢D}OB?L 4tʅ"hTr²|D(.D׈/6ADDQ2Jj:ÔbAR)X:YQ.0ΌѬDmK`} J 4/el[Ta vk-nra.8w(4p4׬ d37,+=\}FLtAO[x%jıलX`g[x%i^6 %&/1r`MLHdm%- +%1gŅcx.iw#j+KVhۅtkk 5l;'M^;=\ˋ@PiC,ѦnK+"aKSg»8\ؔu$TzTNisǑU/8{W=Z쬄;usdN1)gqxVTq5{ KHp|\0Fgn/+pRC:!9~Ѕz1AXqJ;qHp+F½7]#SQ2F[C#VkOE#Ϗ +Vqߟ-Po~\'+f{K_;d3 'tn@՗9 2HJUv4/KR`u^9bBB1%ζ^,gTh)g#"g7#s + 4,mrfaIt8m/jG2f r@sn; ߏ?*ƪYU $Q,K<5r(e޴U  +72o;9X98U,]rU/h +$@B)lP`%`EO +;:@akO쥀.H/yá[{\v̳Vm"e\&;)N$gw8{XDDMfmdg^zZ;\I0&E1SZN>م +~;:{ rP'YɔqQ"YQkF;8{0q-ODD h\L!DV<ء ީcE.ҷ6zah""OZw/oM)j`r!x:1T]l^G T.o9"J!X5>eYl.F؇<*t +lo<{qRa"a!QEˀ> +INZ$sX<`LN*cZNW wNUG1/8M4[Le4:d4u,M`Q N#eTp>m$h)@\K,Hx$VXr8䏑Q~G]6Z*;yx Xӗ5N&XeKDP%=%*q*o$DF`p&g7,, DVHfr{yR=)e:>~Tq w'|[q~>}:QC"07׻+|5GߺNG~ho_g6}lq<=^]m+մ=ݞ̢@%53zs)>8~k: ~r7ӓsb;Wh((#?r|ON$<d=&P^o~#ȆG݊x';.},~gt.y0Aa%Cή>9<,f,f}ڌ7̆ c&Sofxy8~g>:\}yȿArpEBǴp׮"MU, +Qp&a\ty$E?#O/Gn̏4V{˓˽MdW/d6`⫥u@]ڟ_*pe3wt7d*<[YDg\F +-:W@ 5܀$ k? _IBtdԶA;7nTsag'Nj_,PH̯}%$#}\M+}ehzL޹b?'6+3ӆ:etrzDYbOzo6R@tNɓ.-ތlV ѽT!`NO.Tš{.OCɈ zf@MD)|JOC[RF:ܺo/q(ߋPy>opf5}2f}?B(鵯u /D'?ɴ;50*#R9tNTAlpqc)H:GVCx_Ϗ_|'R8GTٕGj JԷLp"h3J]-Vuxr( M zz|ӴԂWj z}k:=~>[}FzDk ɰ(;ɹ$w쟮넝R !˽380Uiچpك{x]紲B1m12{{}hm)LCgXbm5Ӕ8bo%>ݗڴ/|:az +Mp}GNjD6g:xZ/f.KL,.*N@?Ad]al +"J @_d=?<&tpmߺʲh:,>x^O?xa>ޝwSixO8` A/=\wio\!aNs*%WKxc+7WG1iYK o tAΠWOz#m7K[sXҿqa+P卼}G| a[}4eAδ}A/s "yQv FZ+n߽8Fdf3;Pd:GνCo'zs!_CC=͟-WI׫'FKpq-% \|g?[|7AdUDQWo{m-k}wkhwBܤv +r}ѓ!C-X|H_'# D 3}LYol6v6?A No*Qz^ܨN\6?\>yk5!"Ɩqq.G謦Kqb@OTm/4̐ܤF_/`j}XYݫ&$H$Id%{.4|j?V#;2N?KNxyp?p37vԔr?n.ZLG25n}Z YSn2zikƣo ]n>M0.+/h*_c?_/Oϯb%. <!Xns BƖ#=a:GYG_,կ~[U1 .ln٣0!4DzZ;rtt(~\K~dg՗<͸뜣G{4FVn@%t{jBeR6Lb(6z8,v5 o z7@Wm7veY^h1nCD-}~#jmgZxiЯ`y7}!|z޺r\){dG5mohh[/tUwi{%bݓ5 m{&wg#qH`oL%F;n4ld.W̐jB ŰvD QYinz'{4ADY +]ѪjR̤c,T3tm׵Dg]m˶ %Vv`J5',0lKF BMkw"v$,٢!z01 Cg$@[TblxCXAd2 Zz:u#*`;Bd8lbV8 +Zwu3Jݮq$6:ևq{%AG2,ju[aXUY3a;-76c嬹&҃}BJM6x):[Τ g̤ĤI(t^D }i󘍑"[`zH&:v'\*>p)BtZ4Hgl;m*RMJ$3 WlJ z +t= 3ܡhQz!m']vŏҐIӢ:c4Z'5iB0ɹY7R*xlp1cGJH>"Q4SR-χr(^=012&Exb,|HsrPHoF5&Զ7^☞P+wLոmcY0)\陝fJ,>3.ТIX nCF'v@86V)bgIkHq:Kg W05UNMDMC (0==)8*m7;&Cv| }G D:ʭvܳn*v]2-Q @LAKVNtO/YD7€"He޳i0?ҜtjX!mp A[4БbK]tI T\ ZgH'FJ~y-Ǧf?wIE>D2!uȉlwN +O\҃goEqDZHv1p|AQ$hD=qLV-iHL66N'e D̹ۉЈnŴ>#%<E' ͖j-o$vf$IGNrbI(gFS=mGȝTo:GR& +b5邑ls"`AC`=2"yv#âZ/hV6hModV\Q$iwI&i؊w2`=?|FRşP}|-xyI_h2٧gpV_g+Ý<Ε,ӢxX_rHW[t ҁ=19p;h:O:VTj=4<#B_t0x-8qgbZ_̌l:դ@ JD ټO6Fv!$7XWfC81\ɣ5Qm)6CXeu\Z6RRb1lFabm118{EBV;쑍{hPӉ\i_CԐB@ǻHҒHju"0]݉f$BҡgKhpps 5$MI&TڟF2 @ڣ1 + O*1!qiOqL17N!"S e[?H5o)Ucya9-pz譪[Z9a&l.ٸ2^-+Nj_[.sӯ>~F瓗G׮B8dGx b^w%dW1wwv/֋ԘNG'47O92AwEs1=&ywqzEھ!RV ȀBf\$9 )C\d[G֣5[\6/ޚ3ۼy-.^bi1r vA/^e2wV'v[<=y^=C\qyx#/$Smҧ"`hq?[E>9\3RROfwQp=\/P\Mt]qnzTW7׫\.nRx^)]myn]7$>Y{|rVVUr%G'GrHWlgq\LeY5mqźb GS#G5= +ea?J)TFfҼ % hÖ!lMmiwbtĆ$e6[nOsG5Ы*L|fnv:4u~z뷞>}9\o }1D(Hhll0/Y6sٓW'{˓ryrMbputz4 ӿX`B:G{X-^}NkM(`38:)#k?|:_fB>Cpg +ڣLrDߪU#"'eb}qog={oEWOO<+Co܂G0"Me~ͻwpk'?l~P bLJp~L|Q,x羷½S9/wWs:OCկ'o3<]㘍ባ9玗|A,qMr{rbv)?wX'gSh9~wvd5{4?&%=u݋9yfi"o;un&݇5 R@Oa*yvme:%UNHVbƷwlil +BGð|ZY+87 +fAcӵ_'p׏i |)FٌQD/H<$1E^1~n +ƸsVݕS`lDNO IdDoew#w3vee&Lex£_֋g +Q'\f&$(B7G!ug {xpocp{>@!=>rrgO샇?Ƿ:Lkv2G'&>x,g 'A*Ց.c89\jăr|:1CKz~\|I*}RlmIA3|X296Zs(љԵ,v?\.#9sj|yiT\V,Ǘ!&&~7:GXHDeF‡+RV 0"Od7<8ڗ>I<09ؑ곸<|9Zf;%; }$*2L0q>wyFq/gݎ5緁 Yr^v_Ș=[)ݙJv,9gYqv/z- +NOhI`™s\h^Y,HVxƎ,id 0ZH#,;!s.z9k+WGY,yO|au4:RIn:3G U*]'{&?8:v]I3T<{Eyd7xzT'oŊ &~swbOi byy^9~7q=n Ҙ?ųyIظUݣ1NVZ<%norvkM`}>ahx]7Sȅ$&pÄͣwr'_rn{>-֋KSA:mo7~q|7Mo&.;Z.{4.EeE4gν|L*>uG/M'$q~չ,~x #t<͟{˶ g΀~/$I{|>M~ED>gNwL0]II*=h9S1Y̏&%fqrlgk \_$}q +@[?? ̷Ќ.cOV?{E/S`V9/I޴$M d} + iA6F8:ڃTۿϏ/H#>K\~s$XM(tyj.J/FxpDI/"B%vPXKlSM sIJ<[ws]O7 ybJS{b圲/ωﯾ L~N:$D\ˣEVLb[/#l"qL;4)r)7GQƍ6|',Z}y(& +8Hpx2Qni +(2.J;>`q"E("-s8i07hA!f9̆F _Z/ۗUpo_Q4!#iOXl ]:cGY +oqQP.bw׫ɽr,>G@V"|7֣Ba._އ~F7,7Apc/qΉǟ7t3V^2Ъq}|q%d)* l)+}ޚ\*tYH ?9^rd//KCbw'ƷcB)#x|_MzYs6a~ăr\+̓sV2rS(YgY*->|yD12=_;Hj+<%o$E/>mVt~t/W<':?<_Ԝ }}=Ŗ6fz: <@KscO?>5u? +L׆ȇۢ$&H/Kcܡxb҃#A))9"Y/I?pEN#3?ptAO{~vHDL'MHmb#)A"Y^/`V.XyqntifΪՓ*"?dgg@H'5g}NgDf9TuVH1N"?;S|[_-L.xP՗.'QG8#_0_/ᕱ&<_οPa 7Wsc۷Oֵ۟ޙjލO{^yG~y?|vί?w5ns\[o.ܻ?a_~ƯO|O?wx@x*o ׽G@~w.z;=_0f⩟?W/>v?o.\ï +~VNϝbhӛ>|w3n߻qtlo^\|{wh>߽{;O/~w7?ݽikO]?qP~?Vw7nۧ\7߽7;׻zwoL_?{ٜ< ?U|#2@1d2666&C>b?H$0{ozt _ Kw|R|=Wh,P aMXchڑo,&q,T02wq,oBmkJS+OMcmX+`,T, AFlu`v}vF3Z[< +vئa;:+LOz6Yћ޺x*FDOTa=MVV*UUe{;}jh곣G_A}VLo%qXdž? cBgٲԯߖN);!g™:hdЩ8y~'\x_q̳?W|`\j_iwn}~q;;iS] i{8rrwьZ/2,w%Ǻh;k4e$67idaJTO32!z2~TtJQ]9 +~jW6Xh[}ۄNy'-OaS#=SzOnN a5x_ߟ2 l/I"Q-R.>"㶱tԑ+lI ٚcNgjVXm[ǦYG:Nqw-'%޴jM`2AO?g;|%~-EM_OdiK쓣dΐ?p&T*GS㱘icתtrE"T9ILk%2?U/ka"Ηv<䰐-:\V`rCG%m<,~.2]p[h?R`n_j1:7bX\ђ?"v19}S8riIˋvb#v%LUZ?T7ƪ{QM2jkVW/tUɆkA,-uj15 >>n~>[oXcUm̹f۾axCkֲ dj7㯭[x"dV_oǖlzNyW4凿n w>1{ak;6z-ʱ7Gh}`Qs4ll2mt ]fffk<ܼG0a_5vZqJ>y +IjM.'cj,XݙPٮY#P=lJA?Wm)y=/:uW)]k[Я^3^[ϺZ鯯QmYv:_~ӿkw"+}w]_ՈkвXMD6)f1l)f֛vcEfDNackl, ؿil&Y +9???0Z4}7.%߻Ġ4aL87b=%e&O&e)?k\;?c#RO7eEB_p (k>o,S܍eCpc)\0&@ +VAJU`fX_afVB?Q7 +QyYa 'kXwC/*qgw~ACQď37+N<8yy їÕ0{;&_2ohD/%̺yL6W_x}oP8Q)Lqo}JNO10>x[.$獸+{:Ȁ+i[)`3 >,H~Y+MpLg{ox:? ; | 1Ҽ:'!WAüә7^)&F_1>ZR,N ~u _I-yrd'&]KżAbMNxg7)Wʝt5&wJ Vq7KU_hݨi/GPˁyʇ:1W0Ul/U;4c2٪ fs<~͞Ed ( .K`(`2wDсߑ\U2ZFg4.\n1Lsœ`: ܒ"ҒhM`&`x^W @F>7HtWF$#eҟ@{61r/{6θ"~g@]~.4g3Ɯ'i s&{Ydh07jfR ̻uE.iQpGpjc=3)fζ`aW1gr`:2#W1ϓĜfLi';X 9/mHPI9$'7* "h?=p3Nx4{3 So2c viZ2?=z*d\CdxP-_Z^!~;dfIIB=:Tl'hJ,߿q?M\FHA_2V WNdZ߀qM" Ld>2H̔Ir4zؽlnֲ +qPhk}۽`,#~n!T*mg9ZNi|QJ rP? 90vSE +MfcԚ|AeH_*TfwS)D6@>2zzC";7$ת¦ݔs"g̿5i/du#jk1aV OX]9e,ljr?㕄w +kWGj|9N%dmD34?HC-9Ls8J.9eVbRjh[+T}$Fj+A-Anor1[{ԙ$$vb3,8q\BJxa& Z_PG׫,TfU]u" CJjB{#XJYS1'<<@¶i5P#{TF7e.] +'y(KԚBuEee60j7v Pc֌Cd,YXc("A*i"ΞP?155J/ T:*k5Y<Cib4J}bn&Ei2`ʃYOS/Q򟟦(9= RO>d)iLç,nkY# _!}~->Zz ^cHXɼJ1\* %bXqI Kq5=Ydy򷝒OwfeF没_[~&*Nt2OqdJ!wS?$m~Zm,~ .zzEZnJ柯vr~zӡ\}fO]*wOjeE ߂^:m+VI=#WhZSGd\, -S֖0Y/?牵W5O:vO ? (u 8< {=eԝgys0{u_h c2R.J{W`wOw9*`!R7|DWd߰ ePj--\"gxoBf3 fB #u/Ńi6P*iT2?) Bg.YDR3yWûԳnTHPR[j& +-_p\>O[H2)B=脼BC !aY <쿸=3ʈ\7EYbD{գ0z9&Ɲ*W-]2Y V|5ó|!37y{~?l25EL2j|Ǿ"̌Y8.ʠodIKOFxlY({b33gIf&)+W2_I@3 mEr 4d"=e:dnwQN>/=S -|Mt~=}poΌ:I& !c݇mLc-smH%Gc}3m +%Kjg +*n3d.#߬bkM^J_`Sõ|Y,Cx`Nsܜt[\iz`NJlAuD("ʁ6K;}]p4# "4H48I͑6wL3kT) |WliHc C6|dw^(?ǘQniWAG;r( ȬA"鸥̡V3V9(O + )EuJ̄uLFȊGS 8u0L!2q<OƬ=8@r߂P';(NVj $V_ VFjDٌ< _7']IzKtAticp{28f* +(ĚBVajsʽ3* +{űF!}Xt`#\@ ')^ҕC+/)em'GiEf{7WKn;W)vŒ ,iflKB5[Y͖87nx}ے5&a&CAezlaP*pۙHu-d% (H$`WL(hY=M 7>=RsapOAHj.4D 1.6 +Vy OI@8Z(A"c8 +,s\Gb!wY,h4Сo"M7'ՁG#dphD fW5) F&_1n0 N$vX:UDir7t=,i pyGcrinzQ w{z-.3 n^/4x7)97.-LlW~UnRwUMJq\% Oz4{WM7 KTgy!6#dbxL?ۊFv t25)fi`w+oP8r!GO0 +St%O)1rH8ԌwHDnY_XH +Gkp ڿ(,=(y.nWJ8X&8+8qY~, +й>6'S +/ϔuMT'7j!p҂圃іnvU%+]yVHW"S:҇칕Tíq2]w_ 'DxΙ" FvF4Y*?Ù -XMl Y*"Y(rg'ix\kV0oQ9oY#06-eً^=t9߰ј)ResCL [qF +D"qoi FWp5*f4A,onĺٓ|>q)"ުZ$&`YG֙ޖE )$ºYh$ԫU5g'"DB>#:P%ҦQ% ̬sXnR</BV)v!JI2Nx?s#d;[3ʨ2D{ss9Xzn326=k-A2 T4/ HjW.#r|!&b8"De`{ PZ"-+ pש{&TIs < N4>ڞB7->|8L6/]/CkH?(d2.!ʽu BZLtEhٮڗӐiw M4.SϜQxMiΫ3?뱗˗Z <0R9_@M Lyu^"n{;$7Iij=\ndvK+Uy& at +%&n +I;F(\@#Fg#Xj'^`)h;%𤚷&0H ht'M פ +HIٿI'_0$S8OTOB>FwNEj̜to&{0'^VߙEFƌzo\ޛUQRױF1;6\f$/BCcXe7:q"Z}_I|{3="ܺp#qȇOc`.ߎP.)ׄ<#Or ' +R铥R~9} }*9}Zұc^BAkDA Pv7 +oraMDm̟$?1 εJD &̄G:dIq Ddi>R"@dRc PKa +B2";7ȑA +!TI{nZ.Ls!(Y@-v!yX7hB0II]aR6 +Į#\DNBRp nc.̟ ;TIq Ү+wN*i{&4YNfGCվADşM V^NP>G=·MP"Oww(OPUȊЖ'\>m|ʣ,d=''JyB:r)t>e7Lh/\=bv +Bx{fRIKݧ&-u YIK!)IK7գKZɁ'-]5ƔHOҘrDwuR ѳR)` ٰX)B3T&I),=M==mBكb JHH. Ɋl^?sy~=,;6aU>3.PwbqLGtC[ЋvD_u 0y[#q" ?G-@`G\>ވʷ9+vD@QCi2q~KEa"\w[oyx≠oB*"\Un LTǪa\Cih_ul.'39%)zUaE0W3p76BWZSQ]Nͫۺ`-OFZ OrNRQu^GMn.&^Y%]~PYWӺ}W!=OXC"> == G@O Y-T}k(<: +sUnᴐC`T DNH^9ܫ[)[=uqyFx23)z2Ϭ?:&O@J@eJf4܍4mo&Lo(І;2A:*#c搓C.Ewu 8LoPi Sn =H96D)ixN! +=Sf#Q0KR)&$UV:ۈ; +廃FKd*>)7ңٞ*rO̍"KfZn1DZrOɍ2:D \pHP|rnT,T?;}Z&E>'ė:=)P,N>Wx5L{8# +nd(DYD,0јHfhiA~c|o!%ʸ,@ OnMkP/=VO& x(}ŔkPSvE`hHCn|M{aH/Z)_@# ^ڢuykr|l"5#26k4xce]ģhY/Lp|zek4͌D3R'Ffzs z<fiʛwumocoz&ov;F FHi"@LfJ)W0B8E=(è,TRɓ7jI +p4*{%9\T 'lvs Cl FCJ*?:L/RozsA&QNL)=?Y.v: +AT:䦨łZ몧nvg$LȎN\6uS>7ǠOӞIcPw[>7{#fk;}Z{ "۞ >cP~PVǠ? nB S{CdV! %::!Q*dèMʅҔe#} dJ@ B&c!"Y]zZ 3_z9MZ:*k,Z2dgv2$#LJėu2aS}4GK*[='b*Hܞ-CӟT){kBY л+d(|ZE'ۧл^\`Wc[USHdߒ} +MTDj7~I =E9,<*)ܟ&K*^)"/k$ndŧB¹B6f+5Sd1 O}Z(8'Cxia!=2{:d(UD'q'vK+˓jfuޕ" +_y=6T!|;c + [x**~Vh݂Owgű~9pLU"3 CaT%k jJHF|^#4@=7Q%NG1ܢ ޙj"RbLᚾ~k0KlxޖC)JvPUzZomILQY\s[z m`rN1{Bt0HMyϭLJb2> @,IU9"FO eDRd 旻#@嚎3(-0Gc~ u*2s=ˬ;w|QdF\z!6o\W~Df6=Q'PF{VZ"Pf|zRmvK6E[gT:T(oOd=Q>=^g\p6<-3L/E[1=A +"8Bm]AZ!#J8mԒ xhَnCgcTw&V%O"O=A&\MUِLmQ\T[} &.3J&01qteK*J +MP:RpM*Rf˘:q]f2* rAV( Z6dEܦ֥8нL`zBR0ؾ'H-DtP)5;_E@^9!j >r][kHJ ni"ĉp'rS(} * f%Xh>e erGE#щİ,ãK 517LedN?a3OlLϨςUZIN-5򌫖I3п?[n}%%Ԓ2N ށNl3tìD.-oaOPAM fDb$leΰ}bt liBx awM@8ovfYy|~`;- }f01GmyoHO3JOz&ٷ7a% 3@͹x=o#;R?OVDrpWT/NZzPo~O}d1VٯjO-`Nz3|Ĝ : +|bJ7Zs`lbTۼ50ސgy4[,Q}!G}Fc< Bt*=NFLCw w"]X?2ܓqk8TAal0i锵 ]dZ@F{>^P'2o.]`tOdx7}/;v K9_ƙВ&>M4`fG-LFa&LIYf: ZӅhK,݅niC6=]?2Tq!!&L-qvC 1@:YLJٴ;:%[q2H+τbv5&Wd=s(]{,KW{mM+'Z6mO:>6J.-A~ Ђ-|N-~p^>y,z{jS>$J]R؍>E`Xf]xd JR6u|ˤ2)'9+l +ViJÌ\2 }JU҄%|[p~?"#Z dENM.jݒ(C^;bY["FgͼێtrȊw+,]_ ̱vB=ke25FDG$12(6ĦB%u&$kHQ0c63L=d=3jO!1}+keIYߡrl'Z_v w+1u9fu6e&U0H\S#oA Koշ&Bx)d7,3`nq m&,jMV.c(5([8HzN;YTn,Ŋ.0#9'b/_ Akʊv8_gA1vT;FQG1S$q?Bf+L%]${U([",j6ýńc߳a"T_opf?ռ1}kqhLNT34x٠ ;H<6esֱ(aFT iH3PVR avWn[]DEB0E.DMjb4FՀ }LǪeӨ4= lΓ;h؜8#/œ5l$g$_J^̆IbYv%7,?_tl𽕼-EG$ypl҆S&ghd0pd(^^Gs ]0\>~'( +ز%T U櫏9N lBW Z[ٳ/U1XiRsJtTt(/WJbM`}*f ~rřnIZsIA&cep.>ͻ=3!HU!(]|+|}xk=);P5&H .ev&9j'FNfZ>` t]4 Aʌt08 B6qE2lc hm5s1A)a:| ZdNsNfwQ+ėjr'P[b'jY!rd7-ab˚gP#m`irkc|uRɛ|rEKINDrdqb"$xSۈ;_L[EBU(rLd6DZTt Ak!XC·󛝎J*\_ðNQuޛ;)R@>F/?D()- Kc ]=Ὦr%RU}N]weQDqo-0,\KT`x?o\.K])mW`f1)嫦 fb'ھ ++cWUi6wM/<7r毺V A+`4ZO}sn.eA}Oͥ-9}sѥIcc=bos Z|dZ6iBAkqDht:y-Ģ߯bb"M2k؂.iƆO?f=5w)W{12QǺTM;%s$~Nj3Erhu\X3h1UAyAk M]o B>2-k_iP[G6OJ@!*vK,fubw +$Y}Y BL⚋M&E`ݮ|Ls=c|9*FHgirRvXۆ žF{t I$)B`k + +{~~:6JU: 㫞!s5[-'MטL}S&*&VuF7hN=D_UfB Šhq5kLfw"94Q1w *:Љ@liܓ5A:0*63]cӞ}.5@`^NtCM:6 yi嶲I +r[Ψ@~B,'rP +O?ʦ>9ݹO_}^h4Ġ#M3  0Q{u B*uΧQ2)3B\UΔ&>6Ɔѱ𜗒)~ ˉO Vzdq&X!e.d_:2r:]p>.YgMFR + VU7H2tW#tisS1h|V2y#Q 'хYQt1s%L.~:tG/9ׯ#竐xit: ȩq5T/QH(,wBlwp_\TordeUv`Alྦ\]3nqww::&Kk6CUK6T㔥 ?(N<` „18W0Gs7Ҟ"˹`jLE +..083x tu1SRuW̓ A)ٵ=xu~bƵiw?áH00 ǾWv^N`CL/ʾd<++ | |(,)!#?@p؊` [ogKK卺>e2]2\;)s r69!Lr3.]B(و دٔ>004!L^.]inr=a=ĭfu+ekɿ!kª-Kak_ ^#J/S铺 +F빙mѰW)ȰN<>{~ }|. P\S:nrQ6FysWsD3V?TԘf% s5Y&9_rhZR/ UuJ &QH3y6?%ԹМr ;ߩrcbqwZmCޕEUS+n ]l0ՠurR׿޺ZgIOv TO挴:lz}օ @̀,yx0`3<+t<;8$ A<|.x +ƒ tj0H0 oCƴf@V !?t[Wb` 1@h_[rxN$>j9b@^m;{U vTd(Mb>sc5 >E< NMG'j@pX;r%mi +mx`/W/$ZcE^1!zUW]ȧ=4f˾%_yH Et}NJ3) HIHPڃgĽG-#@@i/K1 [6E ;"V9 Ca6ٿU)!sQ:;riDX +p5cv0[zFڝ cbI0$ 3Y҃Wn0`TFH߃ 6&pyH&M杬ӎBBt:< cN "ic(U}WNB1δ +~],QkU07+;1}=Y'q"0JU5UotyvINp披ZەscYY_h(?B`ݷ=:Z`|^d%gy)lpC .o[+n]Q2!ߛ?h*!N-6̦9z)Nw>C?[ |+,'{{0w}v}f!ԝuVxϲx}] Y]sb]2u+sr{8_w@&18㿡݉fPx/N6`n74"ыIUCM'5 xM::m~ݍmkQ<\9][!F>6MAAߒ7^ܻE +V;bl > ^`W@;fvd$Z_- Irf֫"? +X}V brWQ +\kg-7Yo>L3QSR<_?8W`Lz18)' +t5HK$cV=M0x z߰l7=WZ8V_1>ZR`N)4_["O/^I~bAM_M^ >yra̅< G)&~l9EN钉XڶS]1+erX;y3^E9m^5JFwiުrkѯD8˜O_|e&?۬Zl9kx:z!ǹKB/1̺I=&-:1P@>|JCBj3DHuRHY{NG?Pw)lfj#jfFs0Y,k_ܫR-g +)tQ@Q̥"Ɵ"mr5x3Z([q@|{:鞘O k2 T?=3)* IYOO'aܻKJψ6Ekn+@@G?Fy_3 ~C+6{ΦJ7{NG?>;;1\@ZZhE:Z5wߘ~D_Xx6}OUBJSl~ +C~BS %~:& zG):~֓Йr_u M~ hFi2Onnb +=Jō[*W֯]h8bJ^^ jvfƣtouD4v9~ :bS KlbS?~tXz>$YY([`#gն r/_Z<ԎA tw{G?9) 0ʨO*OO}L._,:?ObECB)sԺ(gFI7{Q]U@*H}oG.;)8jGjpFW7Wz뻙D- sluvwIk>rL%bu5P)|Nl.vZ8b]Uap] .k; :e*{-hTyrWYQX +Ms8Ӻ踾pm.DX{Z-nh4q$hMt_W -EA] %%~bWYV Dv<5Oᩗ][B6X_Rջ츀߯]ڌ.۹.tM_LWs ǬpK?d V$JIj/mouG̍S{PF_k7yV6fr-f :`Yiio}֠E| R`>q;2`C.[.X/;`:8 +W|9ɛ1iٷ\!˫keg6@҅ܣMw>J_DyHs ;)3('̏4`xF4*2tLbޡ[?&3W[xo^^[>?fK&/ā0ݍ} )[;C:poӉD>",ǐC۪V~ +!_c[M%y]|56"g20Ήs=kEK }W˲crdž``Zk?ݣ ic8S9A]-ZD---*hphQ@4Ŝ.˒T}Š3>EZ˵m]{ Ҫ.\1~. 3]zy ܲ*ʥ-5Ăfz{EܿW۞}&O5z6,m߿X7[0~6Գ:xD?"R* p 7(n<,l4VG]I`K>2IACyK^=A/ES>$AS^s$E>7x]{t]:~" >`>S#AIuW.|?A^]/"`$}%Kixe`Q.Ay/E)P@U:!]>0N W(MB$AP`) ~kG^?@ ,O>!~+2#H=0G+8,Ku[.xK.&qRSK~اMxJ?iS耵ITkg,Mס5${JQt]ۧ, jb +*~*9ttvOӵs[s }b kfcE2Qe']$9A[bLL..+EO.qf a{l;NemdHhkuF=z"1t톾# mv h!^GUBW< !1yvmCr:O]Y}JCT'ኄJ͏U^X7-u\7h1uI`.I6 (N:$uMKImĞm<.4C'$F*%o ג}RIfo>d6$y+Qv8D2W +kR +Z+vQɗL+E`{.d_)15J9&sD0o_%q&,7Wsl{P5qݪ\!kDR2o볂TvZK k$+JB +q. ڼ$ Z;H =iIf4*Is]m8xsHOIn6Rrʹ ΊZ65hJ 1%i tL &{ij>YRDIzD̑'#cttHtϤ0;] @¢[C$Dz|~zcg}xv&11$ !^smHĤu$m%exFNҭ -k$RG҅N\NHZ߻ I <1Hץ) j '1x Ĕ6LdbZl;;Nfi"Y[K.HcbblA]@I2$Ț>|#V Y&DZj'2J3k<1CUJGvsX?iTާE!"n#@O/OlcF764-iq]ӢnɺbA)cn0Jb+]&RY7d'ѢH SʜZ-M ff䐘 id(R +h3i:U^VywIV>.I׿I10Lo%|q;ONKR\T,3 .9HtHP4y1\A4BOPT)[sbg֪.ӹ&|dp7%↛f2bOKZ Hԅ8=6&ӣnYΝ+-ZkZjT1iyǞ=ff^9(Zg>t d~wd3Noɶ]3AL^g-gm"j۞]m Lvɻ.a=)跥ąDqd}F2ndY\ +=RM.r}zE z> +.A|#>DL[CVciz '3{3?Wb"WRϺDNOiJ,#;`!W_*[t)G+iaq?+pj@~$#OYLU"];(t 2i/GO;);a7nT6=b9ڑ5O9^I\>$Y!BUa.˻CbrW;q=QiOpJ.ʬF}!.ex\JQYG1'z'.4^";Ć(*!z[ + PQz/c8K{t"YM. +?g518ғL)L[#q`]{}Dbېֽ%b#ƈx> ~dj wD׺-N\WOM_(=kê8/ze8 n6Vĥ֧Jw$uoQ\=6Lb.h*Z.IZgw&Խg*vUdEǝ8+!zw-5e=ͣbQ$ur DKI8|4ږ‰4mB/Z.aM캃NNs wUbCץ| }㝋(];&ifq RWI@%nP6._Vv F['#NKG.hٺmmϝGD$v|E$XNd!*X#;2H˔krS93$ksrtbDD>q8IM}] w=4\ +!z2 pgͽ=4=BNգщ,%S`RL.z|VrmlX.KizpG=ʊIȒhVQlST($ވb+Ż<|ݻ8uPM9>a1;eLrdbv*m%4PFqLRrq$tO͕Y'OuId#-K;TNhd +*q,Ks } _h̾az(R͖5(Gg f]c dϋS%&$%ɯǙ5zA,(m31o0D^gK;$v0t8UA\*j+uuMץٷd]E7G" ySS+B{p )+ItHKDn&m4e>Zd{ŶdݐZS +zmtUk + zS+$^ML]cK!v%d3iZ! /ȼ9k v*I7Gzk&;J+N qxdܐ&M+#]"eM(>b@4#ȴ;+OdDkI~c}S;QkJ]T +R6EIEre c_l& Y-xџv.W͚2ib#Nr|@N.6DEUm{AhgU9h+n_b'$MHGNQj,[qK8c9V$@j㲚&e߄wTĤO娰D!vw s=t3.n}H:Y O)vIZ1-n_D Hw3{[8*Q+|/MZp^fL{mvҊuL9Ãr Ya,=7?nfRӘ4:{dIPMl>Xn] ɬ%֧NuG[R-k8eV`1#?xTtK;;^f-ԸIe>2w"2"Xq''S6X3F*9^&k`Ɛ,{I ӴNs17j J +H8~\2PNG\&ʱrwt>1=&+^g\$c>Lxk؏y>nDWZ)ρQ"}홏IRC"r^ LHdInK|aJ6EZm>y8j.F&|^<Sr8;&"f&o0 #oumK͒0#u⹘;cDsN^ʛIUUv9ygNCuv2E>S9B)ѩ|dR'KjS9]'S,KOs2[U!^TuM )9Uf|cg?Rd{N#=[?``R̊-ld_獚ΒhUҾ]HȘ'6^3%D!ȳV,y$3g$%*tLGLYz9m3T˗z쾟YKDQe֜L(6D}$ḙ.\M.8T'7^ْVqv3#K1څ˴-i?;y\EiRL% +s|HJŖ<'U+/h+95@АM>Vq2+M^LLXZ̊3&! + w9aI'd!?!y؏+zmIRs˞=h0J1EBN7O:o>q17c0P!57(h~aJ蒑/QttH}lTcL|KHɂK:[ +V=}\q ۑiZcP!wPXБCMm$s6p<*$!Bū8`0,)1uEЗ#bf-*$XS&.zxuH 4qVfi̛ENMr6 z k:`3iKX[Ÿ7ژ.F98f +25QeR%m'!g&RHw(t$ t%1>] %"Xԩ#[*5|/S9mW\ YbD=EU*oAee%!ο@þ5*tWFuYKB}B;#ἐYNa##YQ$F6AP8$/1Hܦ8Fȟ!ek(:vZHͲ*$Rr_8nQoZՠR Eo&Lqqru-GE: +qD.H='mh(="f}C),(LojSUρ;(ژ*Bp֯a_M*%{vҚ.(B"nLۤN{)~ǴGwLC%.LIZ$$NL.fiLn4DbA&ݷcZ4iD2ˎ^Ǵ0iyp[nnô<0_0Fi!)aduÓiwK g$7 mP@g7|'SrHX d?yT:;=حe E"݊9ҭS0TH({ҭc%s +u~/̃ >e'ءr=S#/$0J"<ѫ +}ЪX/WNBĚtƏ =]o{3Zg6}U8\_Kst]u1^Gם¯.Fz|xo7h@6;${C圽n( ? +atʑWO*5Eo_}sI$]-:MOX&f6D+q&&cEÑ:=z%UgvΉ#Sn:}V2@e:Mc1nM'B `v߹Kp'OώsI{lEs#kNwn\^JuwՏ>78T1ߕ5M] rxs^Iݭ^GJ5U*wE AwPy;xqqͥzW"t*hXVHF$E+Y5 č,@&{GUrFǣ]N^r}8ݙHq.HT)䶕#Y8nA%-MK6dgVQ\WPK !yB\Qވ$P5WZ&$7< ><;jDZT"cZRqƻSjר0=d_!ȏ Ǵඑˎf4)OfAN,SꁱCidxT3 9Tjs)Lփ*p:ZeZa,&%;4OT'p[]4j3=KiڰP n^GhENDBXC156~aw; +KwY!Dj)VLǺs=KnPġ+{}ʿ9݃ ;YSnH.'Aik ,o,9ywS-%Zrj1:~ץHϒ:w)<.j(Ζ$ ɩߒ!GfB4ǒVh^>φNq;gpPJjT=Bg" 5hbO;}tR5*gQ9FCu6ↄ5Fԯy= mD a:ĩ#] ]#n# 7F{*(̾QF4azq!ϨMGٱ.HGφk va67jS]$oɍ5]o]x #qsv<׋n6cgoծ+WiSW[{ MB0|/,> 'Ouz{І;Fc"z*,${2#vj}u'Z-A +䵖lm~s\fw3R:@״xHX!}ޡw:\;ZYbؠ7Dq W;Z)^XN#/VbV  Pvz_$F^ݴFéסGɅTkB=~\k/]{/[,G[ ^ ENoXm0!>Vk}a +hOm.%@;£f6$[xR SVaL_M#DQN0,$cq#'>: 3)s +endstream endobj 23 0 obj <>stream +NE7j}M@:Z_$\ ${S다LHH>Ź?վtKX0LT pG߶r_O}=,~_=-j"2$iv"Er )Xpǣ[S݃ЭTau8 NX4 XGpbDkڭi"_ +rj52XI% =E_>Jʙ{ 6}e[ God@g+"܏Bi<Tk+S$U)0eJ~<NNxzqz"Wh.ј ˗Cҁ8 viYrta'VtԾg' A q] +Պ5\F] کtA0l_~_?< (aMa8SI$C3M,ѢЙ 4 +@HgrIbbtbr"Ғ$|%Q,̆-cSC+h 6a, ..Գt9 fQ r6EKOiNe/a~mT@'vNgyg`,/1oЧp6TEer Rg; +t|F񆁾RA;1 TyTz9PB t,yJN/ò-r;X-#0sh\Ӏ`o my,p8LL/=7`7 a82ί-#S+3FذP Y%$%oQ.wf|yfRA N!asy H&".ܰg~t&pc"jdE7*`'3Uq;otqGe=4_N!<՛YM6s"&Rln6Y`k8sָ8ҪJI69DDLn#NwsjWKV +R5$: E + e2eVFr>:0e,U*[<̗Ylxu}^M2=m߸*`AyshF}[o]*=d٨hi_Cڜj.#f^}_%}aƞ!;6>1&odJ죴 5;} +I̖PBT 9(e],rZd_'L&!ijvИA!$\ *ݘh'B\03)Uj)ٱ@_{[cet6-|DV2HU0$3ow7;I0G5(XL)HSH-U)WؿjcGd3Hydkw29 ԨikOKם>ݏ=[l7m<6'rBQc΅L#|.5gvf#%헂;$YtHP\96Tl44;dwlL*iAMT¯Y SUVC6-jJ!p 6t`=#2]tFξ2B M__bb4esǧtDZ P5‘sUSFY80^IN> y z,Xћ"lF -L` gⲐs qU"\ajJ%e-Ű:ztwQ&H 1#=>(G(іMFOLaA&E!XSqEJ._n!ie,T&SkP M+#C8Ri jM864i p2J Oht@!^JilI/L8S1QdZ~!)H$*$غM=mke혆i3D^,O$Dײ + a#Uh a\=1aIeRh 8̄LpS8d+i;KlXZu󾅦1DV Xoh}vF j&A[1< FB(KXHXfhܦDְX}ރ hG?h~b; HK<y.;dTu$<Eθd]7z5*1, TZL8 +*6 +Wv{<3J˞%gQg"VK T#;Q7Q\,TWw# GcFN)X70P(N5u $?!!G%4S--mI9@`T]u@]ibbZNrB$"[d$ Ӊ\e2a#K{]_(٘wbu mwǙ- I}/m[cIz>YE'f͇UVT[Rڃ,RH$ ^8/Q p2Xk 13γ=JiFx aL9,`\ |lLzS4;GLF(:](LYk=BDJ" 0 +]ɤ$q I(2wmmJe >6y'TD2oGJuFuAWj:Q~oPұVJ0H441Z@d#ڤ| D?Nʛ['P׃iL"V{r8m,p_4l \|X1DmĦQQ=㣍f.k%*v +{"U0sav!!H[l3Č~#Z3-6!?2RW}F̋<*0ۤkL6+9˴N 6,^ȱl|c3ɧ`f2k}59g#u#gF90%u'%WVd(&1[_vgOz$KXDEz5E +;eǃ޾:wQ. :WуB7UL.Y(>=l$>Nd_WV'["@ Ny_`5 [lc`oM2= O$meŨ$<OnTRXbQɧ7T2/E7J%:ތDZf^?pyٰk^ 2tm末md=`)GXѦcJdzְХ¤h\ yH]ZЎ12b&7W[ QGnC`rU8>"C%h5.P;C"hуh>Ya8z3ɧs(9( LeW~My9/IRMb!l#5fC$Ҟ$Фm D c{*p'fb}u7z!pN#g5= .<:^|Y։*RNx~ VHy= L2`+Ùƻj#1n-E7}p<;wQbhyU9Nx,M0&MqZ &(;$c3[||gv Mj:m)XN>M@fY3>X6*LHHM2'2L^k7<ˮ"Axj"6f СH&}#`>5- 8ۚbμ:9C#;smH^g#x7h$4i9o)W +;=A)e#]t' +|Y"6';4ށH0#u ٙٚ-^(J@BHE#$&:#C0)zppOE=Ͷ)RS܌wkԟ$: Lrҹ!bh'CpF׋O>Jm v-#=i`?8xs=H}5*g"m K(.Ř2kn e=HoJs_hw6f;Cmr#_h"*ԇat$ :T1>$&O`_do 0ƲzApl*bAUޛzY-Fҕ{fd&Ɛi)EjLccsk(,i/r2IQĠ-4xN rY8vQ ޜɸύUզѷsR cyHڤ*צv{!qnCula,OwgP~PO|;l{g@O으)>l*iX!|c +oԞ1 l oJ,uM>-LgU(3*zۭS*;ff7Vmg +,‰AO֑EIGE{bX痆um>OWlz[\$OJTgfc>wgc}wf?+~~>75@7avx0UjK ^# <'2OfI7/ecZ5$7&2 +4nSAc 3b4{?[ޤ.W_R5z7q2%Wsxyjԣl։8W)tj]DDI>;pȆc6:ëE\C i`c-+̜H}%;Su;嵤qʻ{)[U +k!+8T0;2KNE$?-vgcwL? Iҏz6C= +Q%`G9.P03KBdq+7#!I*ܓe 1k%˜KpS$n Ik1nluINPd ڜ28 =:>֚XNvc4!27C!EH9Cr|<pb>j^T +|#0 *|rtZVVu(HcZ="p#괱S"C*.`i}Fb*detD(0[8*CֲԬMZS#T  :%ц]S-hW`Ŝi)uq bWĘDט1"`j*^2C, +U7 fAB/¸ C8k)`,|+žygJad 6=[_NORZ[L3΍\ HXHK/Z3:fniEiL&arbfr,aSC׮$ɞ$ }SI +lO'lB&TDޒ1rzςg"wQ]-hx׬N`cVt.>ݶwSyy:UX4{7bz `r ij)Cz̫{kXC %&]|̮p(SvPIj`0}jb_ѧy0Y.D&1aƷv~]EͬBgbKu)2J|bVY 5Eo*"x:c ٬fu/Bp =Nn |tl&xVCI3/gq`Llzr3t7_u +ϕΊר|-ꋼ|Ql[յ`*,aT=>aw+C&q :0,e@w+}dˇN~ҳN8Q;10'+8Pdbp?rpbeD\r(*,;0;S8;^e3Or}k6?c3m6Gc?y4۰9 Vף6gH"U*tRj޳@ýa\YwZ'8*&L,H2 Hؔݣ`օ.d O0mGj[דmz\AZa"scN $j_f]Ĺ~ﯳɂ<&M>ɷ\1.oό ]qF+byUߏk0wjS!S^p2@]y$H`: +Yݛ+˻͗wH ʀ["8(}hwmjPDsy՛;EsctO#\+hS6Hg4-kP@ˉIp(Ou$t9(s#U{7z'q<ӸFk8ø䶋 10-<6Ҙك_4nVns$.3TK_9uilo#xR6lpnBK,I[;T.T6J1Y9H7 +'04!q?~#3ng4wuUdLް1x^/@{7n!K6c7i+5mZ?X tWx$ЏA@?RH?_c7eYU֫PšD9ͧB^GjWe:Tz[.=tW]'|:tzZA7|F%bGkPg]y 'Xot¬gס{ raًYu{0]gU8ːmK_eo }% aj/Bgj/C^moG2t{[eA0t xF"{zkPm_{j2!{t^רyz/7vx +2|V{-",|Ɨj7"vwQypMW]@?^ok +X5kur+סj˷+|[ej/Aͷ^o*|[Eu=^jCgab/Cѷ^oIXeX/h+bu~u_o2e˰mha߮0^og[|qpYuڋmJ}}ma _]7!j/gR/?V{"L~[eƌ/忤%>X_o"Ub/A=|N+}XګmZ/Brg՗ҹ+(>WJ$[eXvߥPePYUːnU:?O]B<_ +V{޿2V{?ltߥ{" {tO/o ߶el0~ +CV$?(.0M^5^4zl[t \:߮}[USXʜ{٤V{ݬcw@we^K^735Sl ^69zyO=]" Ks\:ׅ2K'YeM 0SmKse_6[V{t//`]0]t\GҼο鯛9`lꀭveKj+El ޟBpwu/L$C0sEΕW6y360]*?W^W + <2v]Zru l. 0{ WM1`1^6V0.Wd64H\r=2]*?=0WM>`>^45^1ve3lMA^5ŮLBulWMCb/`kl"k"j.-^{eBhF MI^6'e\ 3{մ[e^21z̄+Z +](jb/`l±ڻl/Spf*b/)7p +f+j+@weK^6c{ٔ[es_6iፊv|W׿ǿװl_*~OG?34f5(*8AYDs15t1Fek}W $Uڋ(h oce +oYVt +aq-d-'恟S-~w Pl~RSiZE*: T/Q$ +ygCv`*Bȧ,Eטb?iX.8IqJGbE̤%Ij9.ҧR>g *'R-(ĝ֙@e_S@^$N#{ȼ^1`>^$:]ZH1. =E<]͏6ަ5w[ +YR:f{ni%_yu" +ɠ!)>|@Ʌ&k>HmX'X5z BӇf>hQՇR-kx Uψ(h{x3 &SM{B(ڥxXPܑ*4[U'uI +~4hB{"Z,h b1qfo&<Iq]y-<Xaf^M@\G>:NNAV#%6]{dSBF}u#/`eOm3,`(9Fw3}&2$Hl7d VAOCҾh/b+ȔK[K?*+NG*}/btHїsIhW?=?p.1&?EO_WO !.ƌBñLR"M%2 +c1+CHs"H:):. blMbHOWaxo .4X TTR& +"%aND j _]An2( ̲*=&Ų Cy.#-(d;? 0O:Q"AeyP0.%"4>5_-|@ -RmV̆ļOKI:HҢE`>u(oLVm +jQ(1NZcZn@ډ.JrWTP\5{?H#c#rPz"^R/ +1 WZ-I-tgܗ_K4`$%1Z?!64HqiNj,zw9>9EG.]'l.Gq/ʠ肟b0(#D + =jIrϓ'J hoDu3~bCﯵJ`*W6!W;9X/uEh!;#)]t텞,FMJN cGTq H/-eҚgsئ5Ņ8& \\lhR`Pmnz>.*߳p%@ u&=!$JGzPtOXI0{>1le*pdJu:"pI[NM41i#1*!iXk61LkͱeEĢ&}l!|EbrY$ghiwE}-#vy8whic"T 3o @~ FnI3=J$ pXF4ZG˩2AGHHZmt/"ѤG8 TuTA'<aEcmϒB[7<6=so pIP~k>\}ĤOQ,?@?![PeeۭͷmklR{NE{7ҡ !a ,tL2 YQ3#ؔwN&iٖ(F@s1-F\#1ൾ}>(HTP%EObk̄Z{!qdk A ٥V U,8٬gԚ;C$ 1+Z*(%VX/hbQ 5'U+Qй2L&V:m}e"['S3k[C\ +3l,h=憾+W򈺂HE(J vH=*L(4Sӑ14 \(:V'"Ik[%t-3UAZ`;V.{dA(ZcFlFR,*Ja }!"Yմ9 +Ѯ8N8ziiPqV;tpfNP4x5aD23T7bDE6b Lc#Zb2UI#L4U"O W| 6oDK< +S#|˼3e ju m|Z(NQ+fAdjǛI5V dD +[[&.[<";f%mVg@H{+ (kgD?Jy,x/Ip{ZGeFtG%0q~ nGbk1;S?a,7lQup;xȄ೽3MB`<ؑd pvO7[x1ȫ{IWР8eW9',VX; tu_J!XT#fۯn?}3B?M=l9kl +V_G>|z?w!xk5:|E(0~z6(mj 0,w9z%L{!{!j~A= &RXdm'8ÝGfWtM҂྆H">1 іQP"բ`6j/ʹC\&f>ɻٱ]luײ~/$!/f3/Eϭ^J^H^H_<¾Q?RJ V@Z2'cyL_@ UdI2 iCcw(V%&t72Շ̖Ē)9B?iʾߥJ`&۬w#[GJcF>"֢9C#1U*)c3*YGWzTpSѥ֕ 2aEpΦWQ(ט _fF$Ajd-1;.J8 D.Ƌ&$!搧4*1|MX .AyC4M'FĊ!w4c- +:evS/m+JW.F^U)mL>XF3 Cf"@Py;mabsP("RWzqS.,`ޗnV͊crPd eDfIGrfl7c%irGr.%SƓS,CNv)K׃&#uZdPL'lxV_֢n|]f~Uەddfs.CVv'ʤGuM?! bEδ䉈 eƝrgSV99[)Qzt 2:;}'EtT+\A^*;kk\@@ζ*uﴷģcR+ms&3/VSb1(,paym20>X,b@^/GRz6RT򀻳ݎkU_"Abrafto#+Kj\:LltRI|_I .'/// ~ӟʈq_ݗO>_}g?@7s?e-d d4VV lP\#IHыhHؠr8#j Ix⠇<(-^k%1 LgTyTiF|]GQzixb3ьY!}=_q_Nx)P"<>(4BE,AG[eH(Q e]"QN/?_a__bDWxPh+}L:KjWFE>'uCʪ>+㟑 +']"GUz|Fʂڈ:U]yFtj1xO$yʨ"F==!u- =}iǯzFǯ|8|>?~T4g_~ٗůϾW_~7_|~?J*ooCӸwۯ~7_|?_~~g|G.K3^ڥGR#_6.[_}r}iʓ_O_|{p. D{#/K-$IbvRxBKa+_glϾ~U[o~Ͼ~& -ܘڡ{4%ג\"$FmT_D=*{ᱚ$rz] ++Ե1rާD66gW'l2DL9~&3)xZ6Fţc30PvH~zgD]ʧ:ۑA*uj@3ϮN-&gSJ>uZҿ]Sd߈.IZM1IԯU_~  2E"N d _ګئpM qַpr2 +!RpҤ@ +N]6[ȣ"˯aQIDF!bKClt! 5Rn*PX'0 PKYA jBTY ^&a77TeBk;/6X+S(Vgki.bCejr=zN)#Ebu+LBEUi瓽xDNC`Ϣ&J "A HHFXHZ&prAYipM4.N=$FbtxcT!pc-jb |C2(g3HM0KKY:AҕZP`vd..\B' ';gattHPT} E}>FRP ZgP"@o,19<È +*/RLJvH1i+=7p1NL3Xs&Yk{;՚`{ i çe_Y$jf59=HN*v%v |4+iqv]/S\>SlF›XfzMRɓ.IӺt. $fkFӠH;ݞe䚚UwM6`dӰ21n6{O߷>8M/XQw&FfOѝBUGe3%9/%O(^&.t!qSVaeX'UˡZ`1aКG\ ŲLu,m1)qX[t5ڤwY.)j:=T}a"TVmf59"u^ O(Ҵm$ӽ`Ӎ +D,X;@T5= 0RHȊσ 1]̴&ҭ2r#Yk5>^ *G>;PHKŚdr7LK4lV@?6H6oH'HI6$jc;Zƺ WF8EU#e2@Kf-QOkzIVcىdHu4@\qzxFMDґA.Gm{-D&Iek9+j T+͗T%PA~V_x|LvP')Wyh"N +@D(hBq`}^ׁ.R +Ȥ )*6 1[MV"#hi$Czv*Цih3ڨ0?쫬ez&l8{L,)XS094u+ЅzPxmI 0&l[ٹeu͇/m |%jv* ?怖֙cS>LN@aܭsX'P-ǡ'B{DtAQLg)mxdà<^>iuSZ{Auֆ>T>FF) @P i1KX&¸6 S,0si.[RqQSFJ*Q?Y]502V[ ԫ~ц3;0;H.Va +,;v6/%En̛LY~%mm(۩GJi4TiqްlyW!$G$-BQYqdNJ\`zd_ )Lg8n8R=T#F_\f`l2*ƖGr9$&Si.86q0PrW2Ӻg.q.%@aSXPDC{>H%h#N[u^,T.%2]Ƃ>5l0łKuy k'yfz:P636Ӳ)#W-]\I&I!H.eN Γdpi,湠i L؁,0ZEP`DniDN|jl`[MJKKWSj%ȍDdȀyj^i8տbL&8Za1Bz6s[$9@o$le9`h ֝hFDk$w|+2jv_XBV_Uq\K"3 obvlTZm:}i:(YuyV{;ǸQ0v 5Hdxz@ 9;BtC7=`Xp;L"Ԇ0gW%h.̫\7s!,m6f A8VS^HL1M`f̵gDr!AB1o;ӤcH-SR{^dfpGo'!\+jy:HP[t H2$)."Y3n&㴞vP$4筊ւ ~W=Fߌ2YMn)( +ޗ51];E:gte +C#*CaYg4Lٍ +^L4p`&/P%mOR ̿\z*;c c*!x^mT> N +zӅ+ +&3 1Ky nHK[ +<IUf ۼ+@h۵<({Y4Am!q;A$Lm{zfxC+; G)Kb o-R?EMAۙa\wKN.))٤Ȯ%rCk| +5Y[CZdFW_ϟC:L-ga_ +Ziut@pĎd{9%i1Ptyrƽȯg3+m~eŅfLNG* ]箆XR;i3LH+- #ph*F,'Qrj uOvj,ܕuУwwhLڳwy _EyF7_%yH]jb8H"C2*w*E8\o|8VNdܕ_ +YtjF[R|1tΙlSkOb`mM+Fo=)% =0H$XPp\PEDX]4p_3~S(O"M =;M y;X~F+K#Y?#2TI^~NJr`kR `Wk7v߰ yL%A?ۀ:"Uʜ'T,oRQ| 4wׯ̝@Uh`O'-ӡd纆$KԵe Ӿ{B~MdE7hӀffsEULnծg]tΔqF:P05O1?s^*W:E׺J9V9@Z)ku%gCkuSg*~w&e!LWCB!kevRxVBȖs/?Huwjc+ Os`s๣C'Rr}kBIgu]Eٺ#]7wУ9UU}_󻯵OkyN}A rb69j։CrY'f̸wKg-d洦jQ.7=44HG;oߜ.Q]lfJxB!R~ <Ҵ: T)Bf&}Nb"–i]pBji],fM :t& Xp21M@˳Xuv \)syw8y\]iVX /_\phC52DBiB%,>92Ʒܔlx|NNmhB #Ƽ:Uu`ΊVLt-^X"`Ъ[h 2y,"n]D+qY{,m-i>ܖAsnWUx:pUc}du@6m`e[82*0@snV`;ءI `%iRqZџY&Uu4j1Oa"V]<) M9SĔ) iö#f΄$XʬJ6I"#5jU1ea_m$UV~%9zMDOI8]oN&iW9Hi"d$H;$EYqݓ Oh7`&JQ*w%zM/_u!&j)DLt`_ut]nLYri 9nMۭFZm_Zd6 x1viaAv=A%J:S\Qr. ,W)L:1k1@7)}ZlPe&F"@R8uPMLqD_w" $ )H<l/Q]ZbHz5܊&Z 8IQB9 SQL7< +᪳Af +[)뚞f*pP\2-Z=,,B;wLl ,GD!,_KJs]tTb t47~V k"%zu3:ak^a|Ҳ%w7y@~NH _̗I!T/(G!8LqVVZK3V?ؖCڎR톪u9`p忡L&3TRJceі]Y$1)}#̵2zJfkwK Џ;!"cQ즃!86P!A.zg:3لX1+ɀ)j;s=b&ꛎF$FS$)xX6y"Y @q_(Uơ|1!#ܚDs9r/PUUn4a EZ7Efi'Ϻ{ȗ~=@08!2=4*d)EޭTmr!xiOFq:G4S5w%6ejxv~H ͘g{Iqu+fpY%xRcM]pQ_=1^s|/dp90x̕a6+o*#$JR :ht"=|79/ +{_fMu9:x0F" QUXD~L"!8E v<F4|\Rs>w!Usr[[JL¬_`)I5vDMyrM*(Y|YOr(Fv}0vWOe.M +D+n*BN f s" ͠@$LGqD*[!B+}(ҿs2A1ϊ{oMY7414W)3QB +W̭ Ra(G +g q`6)eO_RJv`XE"hpHog`l0*m'QpyFd$eRyx=C .MTv$!J귮׹tK +f@2y 7(K9mDrl2Ky`0D"=<4v(JzWI1>8H1q}Q@""~AmpK^XL)k5Q =5Lj,k_PSOY `xtK v/el 1&<8}mmA|W8: ;G8_L] .f݋n- h*`"d~3\ JAMC +TXbh*l\ }q_fqTCcX@:t]2*udfT.e0ɬ 3]^JTp:/v]f,(XpsM@2v!1ezyEq݊^Yd4Ȍ"lkFIDkK}إ|3J'iʘ[ª3$Mf#fM~HRxz&! æOϵHU՝(zk @oiE +s|{VLթ4?|vRmzi nv r<@33ԩY%ѫUM ŸAkBb]XJ +MBtg@TBTk`?KY5ʏdF_bGN<,:/ݛoge6ƶb^D&Dٌa> ֭qN H`2k=:“XziDOϱL7G^>C|>ݪ`~QkZ,n)i@,-u!@JLûH`u$Y@\b 3 {}d!h xţ0%!ĀRGQ $CʼEy.'+=IZ2eĒ8ESX [Ͳմc,1N p:x%#2fyR]G +&hF}/SN "BG9QzE2NSSD@MD`D}FkΓ)%Äs+.IfיHLyHb¼ &%gxqU3Cns` E1Kܬ]obA`>96 +hhKH$G}PfjPXx?Z\t?Pz'*r;"{?jw٬V4$ ^.yi)=ߞ\ +GB8O)p̌E]FV`ZKBr*7 g}Η04FL+ͤ趣g~/nU⎦-< +V:nR`8%, -6N QN=)MAԞ4n1wPU|tS37UL@L>gdgx az*6fO!3ܨ87Y-5>X51biE%zvrLG#M/cm Nsᒟ*ڢqߏx()D UޥeAgmxZ:8?!%dKRňԫ5U8bW1U,{Ȩ*7AĕT2Pxd?U|"nX" +R+6W6=X}3\#$98@f?WMo.D}R#S qZBJn- 蒻\1RfMߙoss&4 +̓_8\2"-W+>`u5Xsśqp7MoxY,:oE/Bc'cݬvhMs=|F组{B$3T?K8:8ŋ$n+p p{0m(/;DNW` MA:np~0ѣv YQ2F Q`K9kʖpj|z]6Vv0IVK @'^pndGHCp@l( ~N`,OI[v \r0Fs~ %9dD6/ ϑ"H^x. 4&Ddռ|/<} w] |Skx-ϖ3gIwD.쿳ٯ-<Z9{ś(x9lI*u7:Gvɑ/!:`c7.: dkp蜣oݍ߶ >_3i\9Ry,{1'fzqb(}= +NSn#`)Q[hvG+Ɍ@dRq9Du6Ov_FL1qtwUz53#}*Xq_Mv]jH @UIT:/7BI3DV+V:0jĂܑ`۫63od"'c[&ȉ{1rP&AjsLg:^?T!]TS&!L^,~Ӊ m.;:YȎ)}]fɰ]Ի 0 +o ã:)v="tjc[l++5pEJ]9HWԆtE9$.4.HW6ax+ҕNqsV<W+z4 :u* k>+ҸI'n Dgt{ڡL/nu%) MW+] M +wC]āv+G +uuuuņPoukC۰vevb]9uN-9nV?}IlL_ޚCNz_!;Q" w7iQО){Q">[ \;y.Bݟ.ׇDaP{(0^d"a8_CH D.cA)~w - 7? ,S6PӚ M  \z-]Bf8DT GBքaI<n`d_j{+asb|wrH´<4ٻf2&e +K +JGQ&z2_F@潜OB`ZPx0) .$:)YCĶȨŹŴʹEUhavaU1qH,F:vTD^&5ڳy:"KLRv@Y> BEZܲ9"u.p 4iR;(T_U^psh:Hm!NJr9CD#gVN_7N[7{ڪ@Sj&{KpEu[rXoͷXR2W +Yt~JuP11[+/`IxLg}&13*J*RUܟYXܷ~g5G("Hl.]5SLmcP60v뱤r^] >=}~9KXpߢ ˀP*\&i5όâl,4U0j@AFbmhpZ-܈b "N6UID3? bƂ)N\H#u/ek~v3h{yX&;hyzשk -W=<> U}Y4ZW]!1E<(0i8|[Gd?~"`9L>)\V94jj_U*06i9pԒ( >CoO>QNt/t#RKһ+ݠ"%4z>$mHDŽI՞5̛xi"4+(mVPK{=}QT] $t?t! Afʗīr^_dEhqH4bF]Jaµat֜ר&uTaN %u#>3].CGhylzJlcIeR۠6C%evoaLl' : 2R*82 [: Yf׆Ej])W bП֡$Hmi= + +l_ΰ碑_g82TH%iB`S8ĉm&~xZPM!Z$Z#)N! ^նVƧ٦% Ie>50Jd >C;"k ܭEbb*,{V_W+(n*%Lښ:[EEe+Qym([\Gwʮ;]c z`=:eʣ=b +_ʳ )2;о]a>9W#|* ;rQȝ4nrGw#-X24X%_;]x N~W_|_ߞ?W~_>?~w_=׿/{8j[ů]g`D.B+'ğD`OD/:xk_~߽ۇnٿ~|7>g__?<;O=}ß㇧?˟^g_??{ +endstream endobj 32 0 obj <> endobj 46 0 obj [/View/Design] endobj 47 0 obj <>>> endobj 38 0 obj <> endobj 37 0 obj [/ICCBased 48 0 R] endobj 48 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 45 0 obj [/ICCBased 48 0 R] endobj 41 0 obj <>stream +HWI%IܿS~Vxx[ +Bj񺥦/afE~=Gs/z|t_/t6#~o~tHO8U\S̖Ӌ#NrsV0ޛ|v﷘HYxQ2R66(VZ|3V$.1 m/0ڴ 9v G_1 zKC%ptv"#koO|LJ6O" ӇFX;+aHEF,y[gY=3m8oB #)_@p>;Lvv=o(~#*TZ8uQ@o KB +/Kċ9Z=ko +B3g |bͻ09|Y$Tmi@ Viݟ ;Zۜhi='_*-rLr2d2 ou^$(J?g "fbK;9,dp_qQv+?]2otltQ%Mu!YvoW/ PÕ2t#0SrbA*k`g,|֒%19xy}(am!'2y[KȣհTr'br3pK#Yb+p/N6Ԃ8O</(.j R{ILtN(\7QM%^x9*h6uEj,HB<:EEdB%ߪ^ !*8眈E,հ e8 -@aÚD8 qlC:"-B PD1j:B`R44)34д$Ncĸ52뗮d4%!qF_wʂЉP9 +ь$]pM/muW~ + :$V 9}( LBmddjbeV%L-WkbW ä MdM^$_T!04؆pE|1H+b-K'T΀r;rrC'I5Pa~CAYH"F[p/4Yyζp:65"u"*D +pNH->" WOh;JrNo>z4D"pr|*uQzeWRZQ}ɞ2fS7}jAZP> i0Htb>ɍ ++S']<cF4-%)&"PU-b֔c ,H +G=_ ú&gW58y<kA IxfYKj9fN т;LPo"_椸-EL|iY&Hu7Ȭ}?VC@\Hޗ L׭+BX=Q̐&\m> x &ZxH:|e7aBj2Z7'-ILλfhEڪv%Ǜ[!̲hKYböc,i;Zl-A+{V[uۈ€nہF-;~,q0ˠTA C(K-J[$րyvHb)io()A0Zto".JMB %nSkWRi\p=MnuFXb w@lF1ےwDK`7fed׽R1lLq[&YY3Oׄa`ØDV9P{A[~N?]uYC~h'+Y3›2}bZH#S* | AA3{8I[ު~\^Q20ډ Xt]H\ēMaX 0\r4pw3pQ5:-ܕ٘d,)BKWWfP^'ףJGKS%zj>-#aZ) +ܪAT ghi=`T & ЦIPSffYyͭLd,yC 6. 3v"Nv8=${A ܌FQSA@w2<n7:q^Вfy܊v]&/Mf#*G˔'cl;%ޅ re{s UQEб_e Uw%É"&W"6smd\ Ȧ\-}$l'K?xa(O*Yr1WɌ&u~ΩxY]2?hy{ɣ%0WJ>;Pq N?~Xw"B<Cj&(3m>^d:Q *A=Ņql}$ؗmZU qsZa JhN)wmhBD]ynqRDy9EJEv;,`^o[:욷5&cgQt]o@O⪣Y=AZx_!Rtwh|4doGAӸSO^W#H>W5DPF (">#+Yꪞe&c9LV"=ջ:b\{>ǵyzs LOB@?oY~p{S)MEeJNQ~.mn΋u16*v>>}y1w 6%AVaNbz q\HZ(~\G;ytбcJ^F4[\l0{H8*U`rs-u/ Y⚽8]wZ1l~qc݋R|L$nbsr.X4DX); M*" sۈI}N\:Ջ>vԙn-A‰h"2k( v)I{w$8~RWVl}fɕzZE`}'F2@tBɚV5&#c8 V1, ~pޜba " +h|vTm)c-܆b-_ԧq]ZG Qi\4v.m +{fW]yd, L3wDx41(E,p0 gE +zc9,Yel[ܺp[ xMg'w8C:I$ +|dec#lt븈@k\cW祢q;* +p{W.7s*.Q˱,YfM֋T%>reC̞rv=Ώ^wWVvgJ ]~5WD47TW7ISW3`,[i%CLA7m.hk]TCU o"Y l)T uݧ$-8\?zT6 6pR*6=k)2Cfic[dP +HXc[4hT1?Zqe +ĝ;,~eRY5#QG&.2I̅v^y\k[A[I墯J˻td+B A?:\M'hHǚmZ(gpVfBz~Of9)+`~gQ,Dqb.Ns+?0wȑ$ߗK<=Q +%O9?y=~ 3p|*mOeÑ(t~ +$8i);.~_[yJHd9{o->z6wRB?jU'>+ |4aS_K׹ +0p/} c'4Ѫ =cI=RB4a8 +eڡ +|𨊙&!y5f <²/Y"oPr%KmӔ}ZpO;}\o[ lB&E`&?<19$"5 y3Ϸr;D .Җq<'Ymk!o|_G3)a:I/VJb)$B =bnb珚]-A?(;=Vh,- +ĦFFy4X1IbU秥F1Ӏv? ·PD cjwi}7u@Xθ56 X<<5QCt)4 \)*l#U_L+(b٬qs穘q^b8b\1%uuuKr@]R(`Z};!zSOŏj-2JBS-41s{4VyyR5\Ű;PߝoO?`) +endstream endobj 42 0 obj <> endobj 49 0 obj [/ICCBased 48 0 R] endobj 35 0 obj <>stream +HWˎ$Wt-3zddfH#"ɰo>ag;IL~_/?|=n#ہu%c}_{ חpt :3Y} +{׺ ,#gAYި-+uMfѱH)us(B,Y*U\wdJ~AL.Hٚ(Su ,Ik|QO'EFb6)oy@6+QBϽ,!n|.p=C + +*Eg$ ҆8 銨ܝY5>& 0K<˔kx># Sa2y\\Ωet_҈ ˡNL듏rE-&uϸ:J7NrmȲČ45 -1ń/w^n@ڤ M>R3urCX w?"wF d|6|Z"wMVt]?lvf4bpsxCI+H=U}~R6`'en! +it85 m` gCDp\֖p IEدH <-?з9dqD!*Ed2uQ(IVq'>Gd-G|eہ5•U1P'tBau +AA] BX%-$:,45N l[=NjP~&X,լͤђ>,<.@WO!]P>;3!!)P)) \ +J3C陇hXMHd݂uP,PAR=3o|͗56Dm"]nQ26Z: +?Yʛ+`WUQn6_/{-wVCT6|WaN)<(IIGT.&a@IBQ@ jflؠpOz f&AKMvOy!J~Oaw^k]FE(iC/P0]7)oQ ¬vu,-:, ȇxTL$:ص^-QX$?-'F]`zTܜVaD}*$hz00C37;}EF j;0 w!nB|d5DU@ALj[üxFp^,XZ*TJ\rsl|T5KĀqSU@]e^A`i qS?Sg-ӋP 4K˩7IZ61s%ٿfRחz#ԂEM||6yڱ.eګ hlk9|Gyg>mx,+  +/$- 21C+11 ;VySƽC_TFƜZƐ3}+>pO, [zg]I^? X$=bYþqJme#d#^9&X7qsP)U_GSDe5*QaDl+JS>"QmrFdVM5D]3κzyjh1%S1fg/X COWĽ!u'(؀sCFØph }Aj$f:ZmCe Lǎ5qVR5g`1/)*O|i Vm3_Ь#v:D?QPz3)AEYD?- zasdW%+ߏp᰷F'!ihh2s.SsMB^DTH%t>Ր +]2 ' :2  ^pqEp3]Gb/Ij*Yl՜G#[J?(+ʜI&*#+@YFHȚҴ 1rKI`¥jzraѱAqYx8e8u-{@]!oO +Ew2W09 E͇&_Pt/PrX5&O:Ǭ_CCGIg9;6(j?%5m,"ՊXvPکv +_nob=JIXIl5UD l"Yn(W#z/nߌ7D%g Y24Dhrzt7֐31@(ԑ6fka@b +70LG>3}T̡ҦWD6_4Qf 9{xepT:uM_ +@VGcxZK+_qscywprwȄ;tߪ쾵"KPϻ{Hj"(2 )4j݃= IB Zzö[¬6[4g}W=@xz! ިv'FkP)D_R~ݚl0L}zqi3.'H!茚1RA\ogDKDf RNMx| +=U',sgpJYzR;JWɀ_*aX\{0w1cXNlRAchǣ5뫇:0Du5Bl?=3w&Poe{ 44t P*a6 Sm9y|(pǭ6U9{nԊvWy%ϛnjZq;6cQ黪Te }K~ =F`&Dore1u 7Jc@}"n~قA;<ir}!wdb+^..hV|}73]f^}O%8zH;EY8ݳfkLW g*nԄ6NGי?F'+aDZ yb"C;?)Sh9)1'lJ!Yƪf|3Xemۙ'D> endobj 40 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 39 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +0 58.713501 58.713501 -0 608.1935425 413.8282471 cm +BX /Sh0 sh EX Q + +endstream endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 50 0 obj [/ICCBased 48 0 R] endobj 33 0 obj [32 0 R] endobj 63 0 obj <> endobj xref +0 64 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000042749 00000 n +0000000000 00000 f +0000042814 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000049809 00000 n +0000000000 00000 f +0000049882 00000 n +0000050257 00000 n +0000051464 00000 n +0000054940 00000 n +0000120529 00000 n +0000186118 00000 n +0000251707 00000 n +0000317296 00000 n +0000382885 00000 n +0000448474 00000 n +0000514063 00000 n +0000579652 00000 n +0000645241 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000043243 00000 n +0000676202 00000 n +0000690708 00000 n +0000043639 00000 n +0000684450 00000 n +0000689004 00000 n +0000676502 00000 n +0000676389 00000 n +0000689623 00000 n +0000689066 00000 n +0000679221 00000 n +0000684353 00000 n +0000044035 00000 n +0000049747 00000 n +0000679186 00000 n +0000676273 00000 n +0000676304 00000 n +0000676537 00000 n +0000684415 00000 n +0000690673 00000 n +0000689209 00000 n +0000689353 00000 n +0000689443 00000 n +0000689533 00000 n +0000689738 00000 n +0000689791 00000 n +0000690083 00000 n +0000690160 00000 n +0000690307 00000 n +0000690451 00000 n +0000690525 00000 n +0000690599 00000 n +0000690733 00000 n +trailer +<<7CE45763567ED445B960396E31023145>]>> +startxref +690927 +%%EOF diff --git a/packages/website/frontend/static/nutridex/nutridex.png b/packages/website/frontend/static/nutridex/nutridex.png new file mode 100755 index 0000000..d44a66d Binary files /dev/null and b/packages/website/frontend/static/nutridex/nutridex.png differ diff --git a/packages/website/frontend/static/platforms/discord.png b/packages/website/frontend/static/platforms/discord.png new file mode 100755 index 0000000..2019fb5 Binary files /dev/null and b/packages/website/frontend/static/platforms/discord.png differ diff --git a/packages/website/frontend/static/platforms/mastodon.png b/packages/website/frontend/static/platforms/mastodon.png new file mode 100755 index 0000000..9b78af5 Binary files /dev/null and b/packages/website/frontend/static/platforms/mastodon.png differ diff --git a/packages/website/frontend/static/platforms/peertube.png b/packages/website/frontend/static/platforms/peertube.png new file mode 100755 index 0000000..6778d24 Binary files /dev/null and b/packages/website/frontend/static/platforms/peertube.png differ diff --git a/packages/website/frontend/static/services/customelmsites.png b/packages/website/frontend/static/services/customelmsites.png new file mode 100755 index 0000000..192ee82 Binary files /dev/null and b/packages/website/frontend/static/services/customelmsites.png differ diff --git a/packages/website/frontend/static/services/customnixconfigs.png b/packages/website/frontend/static/services/customnixconfigs.png new file mode 100755 index 0000000..bebdd6f Binary files /dev/null and b/packages/website/frontend/static/services/customnixconfigs.png differ diff --git a/packages/website/frontend/static/services/debateanalysis.png b/packages/website/frontend/static/services/debateanalysis.png new file mode 100755 index 0000000..7cef2d6 Binary files /dev/null and b/packages/website/frontend/static/services/debateanalysis.png differ diff --git a/packages/website/frontend/static/services/debatecoaching.png b/packages/website/frontend/static/services/debatecoaching.png new file mode 100755 index 0000000..13300ba Binary files /dev/null and b/packages/website/frontend/static/services/debatecoaching.png differ diff --git a/packages/website/frontend/static/services/nutritionscience.png b/packages/website/frontend/static/services/nutritionscience.png new file mode 100755 index 0000000..5f774d9 Binary files /dev/null and b/packages/website/frontend/static/services/nutritionscience.png differ diff --git a/packages/website/frontend/static/styles.css b/packages/website/frontend/static/styles.css new file mode 100755 index 0000000..974d4a1 --- /dev/null +++ b/packages/website/frontend/static/styles.css @@ -0,0 +1,32 @@ +* { + scrollbar-width: thin; + scrollbar-color: rgb(120, 60, 0) rgb(20, 20, 20); +} + +*::-webkit-scrollbar { + width: 10px; + height: 10px; + display: block; +} + +*::-webkit-scrollbar-track { + background: rgb(30, 30, 30); + border-radius: 4px; +} + +*::-webkit-scrollbar-thumb { + background: rgb(120, 60, 0); + border-radius: 4px; +} + +*::-webkit-scrollbar-thumb:hover { + background: rgb(120, 60, 0); +} + +*::-webkit-scrollbar-corner { + background: rgb(30, 30, 30); +} + +*::-webkit-scrollbar { + display: none; +} \ No newline at end of file diff --git a/packages/zookeeper/.envrc b/packages/zookeeper/.envrc new file mode 100755 index 0000000..8392d15 --- /dev/null +++ b/packages/zookeeper/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/packages/zookeeper/.gitignore b/packages/zookeeper/.gitignore new file mode 100644 index 0000000..a8c57c8 --- /dev/null +++ b/packages/zookeeper/.gitignore @@ -0,0 +1,4 @@ +.direnv +.pre-commit-config.yaml +.vscode +dist-newstyle diff --git a/packages/zookeeper/assets/avatar.png b/packages/zookeeper/assets/avatar.png new file mode 100755 index 0000000..ae6c075 Binary files /dev/null and b/packages/zookeeper/assets/avatar.png differ diff --git a/packages/zookeeper/default.nix b/packages/zookeeper/default.nix new file mode 100755 index 0000000..15ade2a --- /dev/null +++ b/packages/zookeeper/default.nix @@ -0,0 +1,25 @@ +{ + perSystem = + { pkgs, ... }: + let + hp = pkgs.haskellPackages; + zookeeper = hp.callCabal2nix "zookeeper" ./. { }; + in + { + devShells.zookeeper = hp.shellFor { + nativeBuildInputs = builtins.attrValues { + inherit (pkgs) + nil + stylish-haskell + ; + inherit (hp) + cabal-install + cabal-gild + haskell-language-server + ; + }; + packages = _: [ zookeeper ]; + }; + packages = { inherit zookeeper; }; + }; +} diff --git a/packages/zookeeper/fourmolu.yaml b/packages/zookeeper/fourmolu.yaml new file mode 100755 index 0000000..9c0e890 --- /dev/null +++ b/packages/zookeeper/fourmolu.yaml @@ -0,0 +1,12 @@ +indentation: 2 +comma-style: trailing +import-export-style: diff-friendly +respectful: false +column-limit: 80 +function-arrows: trailing +haddock-style: single-line +let-style: inline +in-style: right-align +unicode: never +pragma-style: leading +newlines-between-decls: 1 diff --git a/packages/zookeeper/src/Main.hs b/packages/zookeeper/src/Main.hs new file mode 100755 index 0000000..607b6d2 --- /dev/null +++ b/packages/zookeeper/src/Main.hs @@ -0,0 +1,326 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Main where + +import Control.Monad (void, when) +import Data.Text (Text, isPrefixOf, pack, strip, toLower, unpack) +import Data.Text.IO as TIO +import Data.Word +import Discord +import Discord.Internal.Types.ApplicationCommands +import Discord.Internal.Types.Interactions +import Discord.Requests as R +import Discord.Types +import UnliftIO.Concurrent + +main :: IO () +main = do + tokenRaw <- TIO.readFile "/run/secrets/env" + let token = strip tokenRaw + userFacingError <- + runDiscord $ + def + { discordToken = token, + discordOnStart = do + let appId = botId + let guildId = serverId + void $ restCall (CreateGuildApplicationCommand appId guildId baboonCommand) + void $ restCall (CreateGuildApplicationCommand appId guildId unbaboonCommand), + discordOnEvent = eventHandler, + discordOnLog = \s -> TIO.putStrLn s >> TIO.putStrLn "" + } + TIO.putStrLn userFacingError + +baboonCommand :: CreateApplicationCommand +baboonCommand = + CreateApplicationCommandChatInput + { createName = "baboon", + createLocalizedName = Nothing, + createDescription = "Make someone a baboon", + createLocalizedDescription = Nothing, + createOptions = + Just $ + OptionsValues + [ OptionValueUser + "target" + Nothing + "Send a baboon to the safari" + Nothing + True + ], + createDefaultMemberPermissions = Nothing, + createDMPermission = Nothing + } + +unbaboonCommand :: CreateApplicationCommand +unbaboonCommand = + CreateApplicationCommandChatInput + { createName = "unbaboon", + createLocalizedName = Nothing, + createDescription = "Return a baboon to the wild", + createLocalizedDescription = Nothing, + createOptions = + Just $ + OptionsValues + [ OptionValueUser + "target" + Nothing + "The baboon to rewild" + Nothing + True + ], + createDefaultMemberPermissions = Nothing, + createDMPermission = Nothing + } + +eventHandler :: Event -> DiscordHandler () +eventHandler event = case event of + InteractionCreate interaction -> do + case interaction of + InteractionApplicationCommand + { interactionId = iId, + interactionApplicationId = _appId, + applicationCommandData = cmd, + interactionGuildId = guildId, + interactionChannelId = _chanId, + interactionUser = user, + interactionToken = iToken + } -> do + let invokerUid = case user of + MemberOrUser (Left guildMember) -> + maybe (error "No user") userId (memberUser guildMember) + MemberOrUser (Right plainUser) -> userId plainUser + + let invokerRoles = case user of + MemberOrUser (Left guildMember) -> memberRoles guildMember + MemberOrUser (Right _) -> [] + + let hasPermission = any (\r -> unSnowflake (unId r) == ownerRoleId || unSnowflake (unId r) == moderatorRoleId) invokerRoles + + when (applicationCommandDataName cmd == "baboon") $ do + if not hasPermission + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "You don't have permission to baboonify!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + let options = optionsData cmd + let targetUid = case options of + Just (OptionsDataValues opts) -> extractUserOption opts "target" + _ -> error "No target specified" + + if invokerUid == targetUid + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "You can't baboonify yourself!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + case guildId of + Just gid -> do + targetMemberRes <- restCall (GetGuildMember gid targetUid) + case targetMemberRes of + Right targetMember -> do + let targetRoles = memberRoles targetMember + let isImmune = any (\r -> unSnowflake (unId r) `elem` immuneRoles) targetRoles + + if isImmune + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "That user is immune to baboonification!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + let targetRoles = memberRoles targetMember + mapM_ (\roleId -> restCall (RemoveGuildMemberRole gid targetUid roleId)) targetRoles + void $ restCall (AddGuildMemberRole gid targetUid (DiscordId (Snowflake baboonRoleId))) + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just $ "<@" <> pack (show (unId targetUid)) <> "> has become a baboon!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Nothing, + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + Left _ -> do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "Failed to get target member info!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + Nothing -> return () + + when (applicationCommandDataName cmd == "unbaboon") $ do + if not hasPermission + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "You don't have permission to use this command!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + let options = optionsData cmd + let targetUid = case options of + Just (OptionsDataValues opts) -> extractUserOption opts "target" + _ -> error "No target specified" + + if invokerUid == targetUid + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "You can't unbaboonify yourself!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + case guildId of + Just gid -> do + targetMemberRes <- restCall (GetGuildMember gid targetUid) + case targetMemberRes of + Right targetMember -> do + let targetRoles = memberRoles targetMember + let hasBaboonRole = any (\r -> unSnowflake (unId r) == baboonRoleId) targetRoles + + if not hasBaboonRole + then do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "That user is not a baboon!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + else do + void $ restCall (AddGuildMemberRole gid targetUid (DiscordId (Snowflake defaultRoleId))) + void $ restCall (RemoveGuildMemberRole gid targetUid (DiscordId (Snowflake baboonRoleId))) + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just $ "<@" <> pack (show (unId targetUid)) <> "> is no longer a baboon!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Nothing, + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + Left _ -> do + let response = + InteractionResponseChannelMessage $ + InteractionResponseMessage + { interactionResponseMessageTTS = Nothing, + interactionResponseMessageContent = Just "Failed to get target member info!", + interactionResponseMessageEmbeds = Nothing, + interactionResponseMessageAllowedMentions = Nothing, + interactionResponseMessageFlags = Just $ InteractionResponseMessageFlags [InteractionResponseMessageFlagEphermeral], + interactionResponseMessageComponents = Nothing, + interactionResponseMessageAttachments = Nothing + } + void $ restCall (CreateInteractionResponse iId iToken response) + Nothing -> return () + _ -> return () + MessageCreate m -> do + when (isPing m && not (fromBot m)) $ do + void $ restCall (R.CreateReaction (messageChannelId m, messageId m) "eyes") + threadDelay standardPause + void $ restCall (R.CreateMessage (messageChannelId m) "Pong!") + _ -> return () + +extractUserOption :: [OptionDataValue] -> Text -> UserId +extractUserOption opts name = + case [v | OptionDataValueUser n v <- opts, n == name] of + (uid : _) -> uid + [] -> error $ "Option not found: " <> unpack name + +-- Role IDs + +botId :: ApplicationId +botId = DiscordId (Snowflake 1428951383494623262) + +serverId :: GuildId +serverId = DiscordId (Snowflake 692563032546476062) + +baboonRoleId :: Word64 +baboonRoleId = 1160622954082738347 + +ownerRoleId :: Word64 +ownerRoleId = 827332588803850270 + +moderatorRoleId :: Word64 +moderatorRoleId = 827303828884946944 + +patronRoleId :: Word64 +patronRoleId = 827404707843538975 + +youTubeRoleId :: Word64 +youTubeRoleId = 993361806141706310 + +defaultRoleId :: Word64 +defaultRoleId = 964354344948494416 + +immuneRoles :: [Word64] +immuneRoles = [ownerRoleId, moderatorRoleId, patronRoleId, youTubeRoleId] + +fromBot :: Message -> Bool +fromBot = userIsBot . messageAuthor + +isPing :: Message -> Bool +isPing = ("ping" `isPrefixOf`) . toLower . messageContent + +standardPause :: Int +standardPause = (2 * 5 ^ 3) diff --git a/packages/zookeeper/zookeeper.cabal b/packages/zookeeper/zookeeper.cabal new file mode 100755 index 0000000..09621bf --- /dev/null +++ b/packages/zookeeper/zookeeper.cabal @@ -0,0 +1,14 @@ +cabal-version: 3.0 +name: zookeeper +version: 0.1.0.0 + +executable main + main-is: Main.hs + build-depends: + , base + , discord-haskell + , text + , unliftio + + default-language: Haskell2010 + hs-source-dirs: src diff --git a/parts/default.nix b/parts/default.nix index ba2c0f9..a90d9a1 100755 --- a/parts/default.nix +++ b/parts/default.nix @@ -41,10 +41,26 @@ commitizen.enable = true; }; - treefmt.programs.nixfmt = { - enable = true; - width = 200; + treefmt = { + programs = { + nixfmt-rfc-style.enable = true; + cabal-fmt.enable = true; + commitizen.enable = true; + deadnix.enable = true; + elm-format.enable = true; + hlint.enable = true; + mdformat.enable = true; + nixfmt = { + enable = true; + width = 200; + }; + ormolu.enable = true; + rustfmt.enable = true; + statix.enable = true; + taplo.enable = true; + typstyle.enable = true; + yamlfmt.enable = true; + }; }; - }; }