)]}'
{
  "log": [
    {
      "commit": "c423a5799e1f8c9ef982529147509a4e726f309e",
      "tree": "7e0e539525c39c9e0a53fe68293b55cd0a4e3fb8",
      "parents": [
        "165a2091de99677d0dd5306ae07d2deb60a26ae1"
      ],
      "author": {
        "name": "Hughes Hilton",
        "email": "hugheshilton@google.com",
        "time": "Thu Dec 04 10:33:49 2025 -0800"
      },
      "committer": {
        "name": "Hughes Hilton",
        "email": "hugheshilton@google.com",
        "time": "Thu Dec 04 10:33:49 2025 -0800"
      },
      "message": "Fix vulnerability for insecure EPPlus test packages\n\nFixes: b/230278644\n\nI also upgraded this to compile with .NET 10 and replaced FluentAssertions with AwesomeAssertions. I updated the versions of the packages because of the .NET update, but since this required no production code changes so I\u0027m not planning on putting this library into production in AppSheet at this time.\n\nChange-Id: I68675376307e754e1568068fc6e70697c8e928d6\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/288344\nAutosubmit: Hughes Hilton \u003chugheshilton@google.com\u003e\nReviewed-by: Trevor Ryland \u003ctryland@google.com\u003e\n"
    },
    {
      "commit": "165a2091de99677d0dd5306ae07d2deb60a26ae1",
      "tree": "15710d93224e447d8ab7ea97327350466807359c",
      "parents": [
        "ea4a69b16c0474e1487c414b16243a91eb1fe4fe"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Fri Nov 01 20:15:26 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Fri Nov 01 20:15:26 2024 +0000"
      },
      "message": "[NWD] Move EPPlus classes to a new namespace.\n\nAlso rename the assembly.\n\nThis will allow us to have both the legacy and new EPPlus version\nreferenced in AppSheet for a slow rollout.\n\nChange-Id: Idf4c4d2423041d626d6e4185d7de53b7b786164f\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/229480\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "ea4a69b16c0474e1487c414b16243a91eb1fe4fe",
      "tree": "ae59b5651a7a60431f234112590c282299ec6bb3",
      "parents": [
        "d557d9c3898933652612b61a2ab6c290a5a8a39f"
      ],
      "author": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Oct 28 21:48:10 2024 +0000"
      },
      "committer": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Oct 28 21:48:10 2024 +0000"
      },
      "message": "[NWD] Upgrade System.Text.RegularExpressions\n\nPart of: b/228778323\n\nChange-Id: Ibea496481fc1c4bf9bc7edbf19008085679c0f1a\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/228820\nReviewed-by: Trevor Ryland \u003ctryland@google.com\u003e\n"
    },
    {
      "commit": "d557d9c3898933652612b61a2ab6c290a5a8a39f",
      "tree": "a1bbfb011684d77e0baac5e659b1c5d87804e464",
      "parents": [
        "6e7b3a4f16c92d4e763293e132b75dceb705ad64"
      ],
      "author": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Oct 28 21:48:10 2024 +0000"
      },
      "committer": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Oct 28 21:48:10 2024 +0000"
      },
      "message": "[NWD] Upgrade System.Net.Http\n\nPart of: b/228778281\nPart of: b/228778704\nPart of: b/228778767\nPart of: b/228778805\nPart of: b/228778322\n\nChange-Id: Ia72fb4c1ffa9701f4a95fe23633f7be3ede63f7b\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/228800\nReviewed-by: Trevor Ryland \u003ctryland@google.com\u003e\n"
    },
    {
      "commit": "6e7b3a4f16c92d4e763293e132b75dceb705ad64",
      "tree": "a428186159556df0e006b6258059420ccd26b83a",
      "parents": [
        "7374de3285b323845eb01d6b0f1aeb2b137d4023"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Jun 12 16:01:57 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Jun 12 16:01:57 2024 +0000"
      },
      "message": "Add a standalone formula parser.\n\nThis is a fork of the EPPlus formula parser with all of the code that\nevaluates formulas removed. AppSheet doesn\u0027t use this code as part of\nits expression system, and removing it allows some significant\ncomplexity and size reductions:\n\n- Most of the dependencies on EPPlus Excel-specific code are\n  unnecessary and have been removed\n- Parsing can be a static method; there\u0027s no need for interfaces for\n  everything\n- There\u0027s no need for an IDisposable parser\n- Many framework/NuGet dependencies are not necessary and have been\n  removed\n\nIn addition, a significant amount of cleanup work has been done:\n- Nullable reference types have been enabled\n- Code has been generally simplified where possible\n- Unnecessary interfaces have been removed\n\nNote that this does *not* change the fundamental design or\nfunctionality of the formula parser. Notably:\n- Parsing behavior should be completely unchanged, down to whatever\n  bugs the old system had\n- NullReferenceException is still thrown for (some) malformed formulas\n- The output is still a weird linked-list / tree hybrid\n- Many functions that AppSheet doesn\u0027t support are still happily parsed\n\nThe idea is for this to be fully compatible with the existing\nexpression system, but faster and with fewer dependencies.\n\nChange-Id: Ic687924a60b2673c24b39295ed684ed33d5cf9e4\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/208509\nReviewed-by: Mike Smith \u003cmikeas@google.com\u003e\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "7374de3285b323845eb01d6b0f1aeb2b137d4023",
      "tree": "d9e1f22ece262507c8adc449861453949e9b39f1",
      "parents": [
        "665748ff748936bdad62fb635850da0b2247787a"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Jun 05 22:12:34 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Jun 05 22:12:34 2024 +0000"
      },
      "message": "[NWD] More EPPlus improvements.\n\n- Revamp save code to avoid memory copies\n- Remove more unnecessary code for mutating sheets\n- General cleanup\n\nChange-Id: I9faf6c7cc94a50600076bd42ac456ba6f96cd407\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/208000\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "665748ff748936bdad62fb635850da0b2247787a",
      "tree": "18215cb2841fc930a6decadbf76031840bea0ab6",
      "parents": [
        "051e46efeed2baec36331b466a19a474eecdb9d5"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 23:10:49 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 23:10:49 2024 +0000"
      },
      "message": "[NWD] Further EPPlus fixes \u0026 improvements (take 2)\n\n- Fix conditional formatting and add a test spreadsheet\n- Remove System.Drawing dependency. With this change, the EPPlus\n  library has no dependencies outside the base .NET Core library.\n- Remove ability to modify most styles\n\nChange-Id: Ida4fc1d946c8b99f7a35cab6ee1eeb503a2d8219\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207701\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "051e46efeed2baec36331b466a19a474eecdb9d5",
      "tree": "63d41232f76775180c865ac35d1a9e554b777ae8",
      "parents": [
        "d0678ed0e8a7acc31363e9d08dc7d3899a8f2177"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 22:28:20 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 22:28:20 2024 +0000"
      },
      "message": "Revert \"[NWD] Further EPPlus fixes \u0026 improvements.\"\n\nThis reverts commit d0678ed0e8a7acc31363e9d08dc7d3899a8f2177.\n\nReason for revert: Workflow templates for xlsx files modify styling options in some cases.\n\nChange-Id: Ief762b59af79be9071ff89753550b37c0da6bcbd\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207762\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "d0678ed0e8a7acc31363e9d08dc7d3899a8f2177",
      "tree": "ee0c44782405f1c3a17891f01ef4f1fb5fd04005",
      "parents": [
        "b0a4d196616894cfb3eb0eee0f6b12175d92b560"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 22:03:34 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 22:03:34 2024 +0000"
      },
      "message": "[NWD] Further EPPlus fixes \u0026 improvements.\n\n- Fix conditional formatting and add a test spreadsheet\n- Remove System.Drawing dependency. With this change, the EPPlus\n  library has no dependencies outside the base .NET Core library.\n- Remove ability to modify most styles\n\nChange-Id: I54fb15b85454fb6e4339d4d65979416b52feee68\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207761\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "b0a4d196616894cfb3eb0eee0f6b12175d92b560",
      "tree": "63d41232f76775180c865ac35d1a9e554b777ae8",
      "parents": [
        "035ebf8a40571b5e29e29595b3b70875eaf35587"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 19:34:23 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 19:34:23 2024 +0000"
      },
      "message": "[NWD] Remove more dead code in EPPlus.\n\nChange-Id: If3334f3fa0a5ae56e6c328cb4d34c4ecf1c5315d\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207760\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "035ebf8a40571b5e29e29595b3b70875eaf35587",
      "tree": "9b9e456c702336115fc6212808977a3fc9fee4c5",
      "parents": [
        "21af9e19c1d54d671cbb66dd1ba2b4a15de4b68a"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 18:51:09 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 18:51:09 2024 +0000"
      },
      "message": "[NWD] Fix EPPlus loading issue with certain spreadsheets.\n\nExcelPackage.Workbook was being accessed before it was initialized; this\nchange just passes the workbook to the constructor of the classes that\nneed it.\n\nChange-Id: I7ebd4dfe02011ab117ecffc35168f0b2066ccfdf\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207700\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "21af9e19c1d54d671cbb66dd1ba2b4a15de4b68a",
      "tree": "fdaef1fd52791744c0ea64aa0c59eb6e78e3b880",
      "parents": [
        "ddaf910970c0d5b902237e4ae75c38ef21e8c421"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 17:24:45 2024 +0000"
      },
      "committer": {
        "name": "AppSheet-Kokoro",
        "email": "appsheet-builder@appsheet-builder.iam.gserviceaccount.com",
        "time": "Tue Jun 04 17:24:45 2024 +0000"
      },
      "message": "[NWD] Format EPPlus with CSharpier.\n\nAlso:\n- Add dotnet-csharpier and .editorconfig files\n- Clean up identifier naming\n- Misc cleanup\n\nChange-Id: I73e05e4ff47dd857323ec5da8aec4b3bf021f496\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207429\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "ddaf910970c0d5b902237e4ae75c38ef21e8c421",
      "tree": "5e04c8e6768d5ac2ef3859e609c9e2fe96a3f039",
      "parents": [
        "059e44769f89d67179a86a9f15987b34f341d9a3"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 15:46:18 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Jun 04 15:46:18 2024 +0000"
      },
      "message": "Delete a bunch of unnecesary EPPlus projects.\n\nChange-Id: I3d7595083497be0af5e97dba1029e8b2b8eb5f22\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207481\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\nAutosubmit: Brian Cairns \u003cbcairns@google.com\u003e\n"
    },
    {
      "commit": "059e44769f89d67179a86a9f15987b34f341d9a3",
      "tree": "7c4e2161a139d5a03c338b544da21fe8099d6fa8",
      "parents": [
        "c4819742966c9afc0bd93919c2c62768eef4951e"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Jun 03 23:39:50 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Jun 03 23:39:50 2024 +0000"
      },
      "message": "More cleanup for EPPlus.\n\n- Remove useless Dispose() methods in most places\n- Remove Save() and associated methdos from ExcelPackage\n- Remove encryption support (this doesn\u0027t work anyway on Linux, and we\n  never bother to supply a password so it is effectively a no-op)\n- Clean up a bunch of compiler warnings\n\nChange-Id: Iad5bc0e198514faeb78166f13525f4b9da7e062c\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207580\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "c4819742966c9afc0bd93919c2c62768eef4951e",
      "tree": "2d40ddcdf374c40b2b2d17aabfe568d9a050e427",
      "parents": [
        "56120111a1011c29e640662176ee459266c67a7a"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Jun 03 19:05:41 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Jun 03 19:05:41 2024 +0000"
      },
      "message": "Use System.IO.Compression instead of custom ZIP library for EPPlus.\n\nChange-Id: I4dc2d0c7889d885efdce1d786551414295b0e9c5\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207480\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "56120111a1011c29e640662176ee459266c67a7a",
      "tree": "4523e392c7ce1e02d903b10dc10c6318b147b843",
      "parents": [
        "9ec1fdbb4b7abeb74f264bced39fd78f53a2ffaa"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Fri May 31 20:21:56 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Fri May 31 20:21:56 2024 +0000"
      },
      "message": "Remove unnecessary code from EPPlus.\n\n- VBA Macros\n- Drawings and embedded images\n- Charts\n- Font sizes\n- Column auto-size\n\nThis eliminates the drawing dependencies and reduces the binary size.\n\nChange-Id: Id7978a4eb8c68b9305495dca98bc041f0c7b3f4d\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207105\nReviewed-by: Hughes Hilton \u003chugheshilton@google.com\u003e\n"
    },
    {
      "commit": "9ec1fdbb4b7abeb74f264bced39fd78f53a2ffaa",
      "tree": "f03a1465e0b20fed953eddc97e22998ae5134653",
      "parents": [
        "bf9a50a03a87273f7fe9453ea36dc1b551a51ca7"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Thu May 30 16:52:34 2024 +0000"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Thu May 30 16:52:34 2024 +0000"
      },
      "message": "[NWD] Expose some EPPlus methods to improve performance.\n\nThese methods allow us to avoid using the .Cells collection in hot\ncodepaths, which is very useful because it can\u0027t be cached\n(ExcelRange is mutable and \"reading\" actually mutates it). In addition,\nthe indexer on ExcelRange generates and parses strings, making it very\ninefficient.\n\nFor the common cases, we can bypass all of this and get values by row\nand column.\n\nAlso, remove obsolete .NET Framework code and target .NET 8.\n\nChange-Id: I9d3938dd17c03bb36dcf836c1d46dbda47d5ddb2\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/206801\nReviewed-by: Greg Denton \u003cgregdenton@google.com\u003e\n"
    },
    {
      "commit": "bf9a50a03a87273f7fe9453ea36dc1b551a51ca7",
      "tree": "81ce7cd47b5afb5b8ed530d3c78448a67a7f55c4",
      "parents": [
        "0ecc470f03b39e1e2562669036b90a00be08eed6"
      ],
      "author": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Wed Apr 17 17:36:42 2024 +0000"
      },
      "committer": {
        "name": "AppSheet-Kokoro",
        "email": "appsheet-builder@appsheet-builder.iam.gserviceaccount.com",
        "time": "Wed Apr 17 17:36:42 2024 +0000"
      },
      "message": "[NWD] Update SixLabors.ImageSharp version\n\nBug: b/335372123\nBug: b/335372162\nChange-Id: Ife8ad72293f6ecd56d24108fbe6dd5e181113454\nReviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/200380\nReviewed-by: Adam Stevens \u003cadamws@google.com\u003e\n"
    },
    {
      "commit": "0ecc470f03b39e1e2562669036b90a00be08eed6",
      "tree": "b91753d0cf0d4d739a512bfbad2ee94fc4bbe23b",
      "parents": [
        "6735c6e18eaa0eedbe5eb258732d68e4903ecc7e"
      ],
      "author": {
        "name": "Josh Aldrich",
        "email": "joshuta@google.com",
        "time": "Fri Mar 08 01:03:32 2024 +0000"
      },
      "committer": {
        "name": "Josh Aldrich",
        "email": "joshuta@google.com",
        "time": "Fri Mar 08 01:07:03 2024 +0000"
      },
      "message": "[nwd] Address drawing package vulnerability\n\nIronsoftware package has a snyk vulnerability.  Updating the version\nwhich addresses the vulnerability by using a newer version of the\nsixlabors package.\n\nb/328545246\n\nChange-Id: I5e10d02d6ce8a4967365852171e587e0f534a496\n"
    },
    {
      "commit": "6735c6e18eaa0eedbe5eb258732d68e4903ecc7e",
      "tree": "f71c5c87482823046fe67dd54667b170ec330e29",
      "parents": [
        "897d446b04d2304bdbd0a9547827283ab66325ec"
      ],
      "author": {
        "name": "Josh Aldrich",
        "email": "joshuta@google.com",
        "time": "Mon Mar 04 19:10:36 2024 +0000"
      },
      "committer": {
        "name": "Joshua Aldrich",
        "email": "joshuta@google.com",
        "time": "Tue Mar 05 17:45:00 2024 +0000"
      },
      "message": "[nwd] Replacing image lib references where necessary\n\nAfter analyzing appsheets usage of epplus it was found that the only\nfunctionality which interacts with System.Drawing.Common are:\n\nExcelWorksheet, uses Color functions\nExcelChartsheet, embeds chart image in worksheet.\nWorksheet using Compatibility for system.drawing.common so switched the\ncore compatibility to use ironsoftware.\nWorksheets using some image apis.\nExcelVmlDrawingPicture, also switched to use IronSoftware.\n\nThese were the only locations that appsheet uses Epplus where\ndrawing functionality was being implemented.\n\nb/323543312\n\nChange-Id: I68c2951c21f25c25164755f5d5b8839afc5e13e3\n"
    },
    {
      "commit": "897d446b04d2304bdbd0a9547827283ab66325ec",
      "tree": "04084744ef256fce86be33d4a3290f5dc653150c",
      "parents": [
        "2743fccc185f39b28b5d21612e5b07077395fabc"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Feb 28 11:45:49 2024 -0800"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Feb 28 11:45:49 2024 -0800"
      },
      "message": "[NWD] Fix EPPlus package name.\n\nChange-Id: Ie8c413a14299c9a8c39568a6cc577a98ab7cea95\n"
    },
    {
      "commit": "2743fccc185f39b28b5d21612e5b07077395fabc",
      "tree": "25ab0e37d343ffe72d273e1f128c602096c034c3",
      "parents": [
        "06b378903d9f843123ceda346db98ee8fdb7fe49"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Feb 28 10:54:48 2024 -0800"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Wed Feb 28 11:14:03 2024 -0800"
      },
      "message": "Eliminate use of IBM437 encoding in EPPlus.\n\nIBM437 is the standard character encoding used by MS-DOS, and is the\nde-facto \"default\" encoding for filenames in ZIP files. It is ASCII\ncompatible for all 7-bit ASCII characters.\n\nUnfortunately, .NET Core does not support IBM437 by default; it\nrequires an additional NuGet package and a static method call to\nregister the obsolete encodings. We do not do this consistently, nor\ndoes EPPlus.\n\nFortunately, we are only parsing OOXML packages (which are specialized\nZIP files), not general-purpose ZIP files. The OOXML standard\n(ECMA-376) part 2 section 7.3.4 states that every non-ASCII character\nin an OOXML part name (ZIP filename) must be percent encoded.\nTherefore, file names in OOXML packages (ZIP files) only contain ASCII\ncharacters and support for IBM437 is not required.\n\nChange-Id: Ic652ded98476aaa662fefb3ec9ed4b73ec195315\n"
    },
    {
      "commit": "06b378903d9f843123ceda346db98ee8fdb7fe49",
      "tree": "86f9ec4476adffecfb261056d91759ac6e635845",
      "parents": [
        "63a202c3039c6cae44a95f77ed8833d93a070e78"
      ],
      "author": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Wed Nov 02 11:28:35 2022 -0600"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Wed Nov 02 11:28:35 2022 -0600"
      },
      "message": "[NWD] Update System.Drawing.Common version\n\nFixes: b/256520551\nRelease Note: No\n\nChange-Id: I330616c0ef64f08a5d870826488f496fbbbe9012\n"
    },
    {
      "commit": "63a202c3039c6cae44a95f77ed8833d93a070e78",
      "tree": "ecdc119d20c1f0451c779c260843c4748dd952a4",
      "parents": [
        "e81b18edd0073e8a85411a910279c543b1bc9cd2"
      ],
      "author": {
        "name": "Andrew Poydence",
        "email": "poy@google.com",
        "time": "Thu Sep 22 18:21:30 2022 -0600"
      },
      "committer": {
        "name": "Andrew Poydence",
        "email": "poy@google.com",
        "time": "Thu Sep 22 18:21:55 2022 -0600"
      },
      "message": "[NWD] Adds CONTRIBUTING.md file\n\nChange-Id: I04fc8f419e6593461152fa0c3258cab12c36aaee\n"
    },
    {
      "commit": "e81b18edd0073e8a85411a910279c543b1bc9cd2",
      "tree": "a0b537021ed341931d0d1ce9a9c0573fb4ced415",
      "parents": [
        "803b7e58744e6d68ed9631a0c4cb088e00697346"
      ],
      "author": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Apr 25 09:53:21 2022 -0700"
      },
      "committer": {
        "name": "Adam Stevens",
        "email": "adamws@google.com",
        "time": "Mon Apr 25 09:53:21 2022 -0700"
      },
      "message": "[NWD][Security] Update Newtonsoft.json dependency in Test package\n\nSnyk: https://security.snyk.io/vuln/SNYK-DOTNET-NEWTONSOFTJSON-2774678\n\nTesting: NetCoreTests passed successfuly\n\nPart of: b/230278644\nRelease Notes: no\nRollout: no\n\nChange-Id: Ic3b083e952e602a3312b13fcaddd65d834ac8fd6\n"
    },
    {
      "commit": "803b7e58744e6d68ed9631a0c4cb088e00697346",
      "tree": "8fa46d916e8db3b30673b7b9d75f865970d172cc",
      "parents": [
        "6734566311926e81038b3e40eb1317f8cf58770e"
      ],
      "author": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Mon Apr 11 08:49:25 2022 -0600"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Mon Apr 11 08:51:52 2022 -0600"
      },
      "message": "[NWD] Update library versions in EPPlus/NetCoreTests\n\nFixes: b/228778281\nFixes: b/228778322\nFixes: b/228778323\nFixes: b/228778704\nFixes: b/228778767\nFixes: b/228778805\nRelease Note: No\n\nChange-Id: I8e3188fbed531dada86447aa9a9d932ae5e79fdd\n"
    },
    {
      "commit": "6734566311926e81038b3e40eb1317f8cf58770e",
      "tree": "4fb87c0943d9e245cc70464bcd85dfc22a64944c",
      "parents": [
        "aa380aea6d0e64de9801d6793339dca128f6a401"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Apr 05 13:32:21 2022 -0600"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Tue Apr 05 13:33:57 2022 -0600"
      },
      "message": "Fix duration handling on .NET Core.\n\nAppSheet\u0027s version of EPPlus added a hack for OLE Automation dates for\nvalues that use specific formatting styles (20, 21, 45, 46, 47) which\nwe consider \"durations\".\n\nSee: https://github.com/closedxml/closedxml/wiki/\n     NumberFormatId-Lookup-Table\n\nFor these \"duration\" date fields, we don\u0027t use the .NET built-in\nDateTime.FromOADate(double) method because we believed it returned the\n\"wrong\" value. Specifically, we treat the double value as an absolute\noffset from 1899-12-30 00:00. For dates after 1899-12-30 00:00, this is\nclose enough (though see notes about rounding), but for dates before\n1899-12-30 00:00 AppSheet\u0027s behavior is wrong. Specifically, on an OLE\nAutomation date, the negative sign *only* affects the integer portion\nof the double, *not* the fractional portion. So, for example, -0.5 and\n0.5 are the same OLE Automation date, and -1.5 means \"0.5 days after 1\nday before 1899-12-30 00:00\", *not* \"1.5 days before 1899-12-30 00:00\".\n\nUnfortunately, this busted behavior is baked into the AppSheet codebase,\nand it\u0027s been this way for a long time. \"Fixing\" this behavior would\nbreak existing apps that use Excel and have dates before 1899-12-30 or\nnegative durations.\n\nThe current implementation has another unfortunate problem - it only has\nmillisecond precision because of the way that TimeSpan.FromDays works.\nIn .NET Framework, this doesn\u0027t seem to matter because DateTime has\nlimited precision anyway, but in .NET Core it results in weird rounding\nissues.\n\nThis change attempts to work around the rounding issues while preserving\nthe existing (broken) AppSheet behavior. It also adds tests for both\n.NET Framework and .NET Core to verify the \"correct\" functionality.\n\nChange-Id: Iefda8bd95583b28aae49e0fb97ab4716b155acf8\n"
    },
    {
      "commit": "aa380aea6d0e64de9801d6793339dca128f6a401",
      "tree": "3b882952e7695cff98f253e7d963e894db0c2229",
      "parents": [
        "5cb21ea53b7a509c2f992092deced94f2be3e94f"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Aug 23 16:22:02 2021 -0600"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Mon Aug 23 16:31:26 2021 -0600"
      },
      "message": "Switch EPPlus to .NET Standard 2.0\n\nThis change required backporting changes from a newer EPPlus version:\n\nhttps://github.com/JanKallman/EPPlus/commit/\n2a0283ce04fcf9e598711c97efeff9318d7a1156\n\nSpecifically, ImageConverter (which is not .NET Standard compatible)\nhas been replaced with an EPPlus-specific ImageCompat utility.\n\nChange-Id: Ia0a5bda9e93d97f1fad417a3a3889b0f8b69ec2b\n"
    },
    {
      "commit": "5cb21ea53b7a509c2f992092deced94f2be3e94f",
      "tree": "78dfdcf394e8e258fe9081594e76a3146abfa9f7",
      "parents": [
        "695d9ae429a26cba5bcefef447429205207d2ba2"
      ],
      "author": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Fri Jul 02 15:43:30 2021 -0600"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Fri Jul 02 15:58:05 2021 -0600"
      },
      "message": "[NWD] b/192690768 Add EPPlusSDK.csproj to the solution file\n\nThis will allow our vulnerability scanner to pick up the dependencies\nit contains (otherwise it\u0027s effectively orphaned and the scanner will\nmiss it).\n\nRelease Note: No\n\nChange-Id: I8d66f38ef442ae2f912bd29db8d7a787e29ed3b7\n"
    },
    {
      "commit": "695d9ae429a26cba5bcefef447429205207d2ba2",
      "tree": "584f311b69ff16befbdce410810923de5e318410",
      "parents": [
        "6033ebb0af340b35ebb5df05767e5debbdf21043"
      ],
      "author": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Thu Feb 18 15:23:51 2021 -0700"
      },
      "committer": {
        "name": "Brian Cairns",
        "email": "bcairns@google.com",
        "time": "Thu Feb 18 16:06:06 2021 -0700"
      },
      "message": "Support .NET 5 for EPPlus SDK and package as a .nupkg.\n\nThis change:\n- Adds an SDK-style project for EPPlus, which is multi-targeted\n- Drops support for the RIPEMD-160 hash, which is not supported in\n  .NET 5. This is only used for (older) encrypted Excel files, which we\n  don\u0027t support anyway.\n- Adds Nuget packaging support for EPPlus\n\nTo generate the .nupkg, run:\ndotnet pack EPPlus/EPPlusSDK.csproj -c Release\n\nChange-Id: I7db0f3be1d7d28a891a61641a214a7d522ccc590\n"
    },
    {
      "commit": "6033ebb0af340b35ebb5df05767e5debbdf21043",
      "tree": "0af7ff91817c4b411a26d68aa8b8681613e69fd0",
      "parents": [
        "b4d85afe590aaf538d55e748b35c8bfe1cb0bb04"
      ],
      "author": {
        "name": "philga",
        "email": "philgarrett@google.com",
        "time": "Wed Feb 17 17:45:32 2021 -0800"
      },
      "committer": {
        "name": "Philip Garrett",
        "email": "philgarrett@google.com",
        "time": "Thu Feb 18 04:36:26 2021 +0000"
      },
      "message": "Update \u0027ReadMe\u0027 with latest git push command syntax\n\nRelease note: No\n\nDeveloper Comment:\n\nUpdate EPPlus \u0027ReadMe\u0027 with latest git push command syntax\n\n\nChange-Id: I95ba944fc44eda9758aa1f698a6b7cf989f6eff0\n"
    },
    {
      "commit": "b4d85afe590aaf538d55e748b35c8bfe1cb0bb04",
      "tree": "eb1b43594d30148dba4bf12aea5900f7dc5108a1",
      "parents": [
        "7ceef9d73d1cbdf25dc9003e4e04db9385bdde1d"
      ],
      "author": {
        "name": "philga",
        "email": "philgarrett@google.com",
        "time": "Wed Feb 17 17:19:16 2021 -0800"
      },
      "committer": {
        "name": "Philip Garrett",
        "email": "philgarrett@google.com",
        "time": "Thu Feb 18 01:48:40 2021 +0000"
      },
      "message": "Eliminate EPPlus \u0027null reference\u0027 exception\n\nRelease note: No\n\nDeveloper Comment:\n\nEliminate EPPlus \u0027null reference\u0027 exception.\n\nChange-Id: I134e32144fd02acee483926b668ded51e4666019\n"
    },
    {
      "commit": "7ceef9d73d1cbdf25dc9003e4e04db9385bdde1d",
      "tree": "1042384b85e4fea7b43e6a0237f82dc683b8241b",
      "parents": [
        "c4055d1121d6880d842baecda1bac620456ebb8d"
      ],
      "author": {
        "name": "philga",
        "email": "philgarrett@google.com",
        "time": "Wed Oct 21 15:12:02 2020 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:44:53 2020 -0600"
      },
      "message": "On \u0027Save\u0027 delete the \u0027Drawings\u0027 object if it is either null or empty\n"
    },
    {
      "commit": "c4055d1121d6880d842baecda1bac620456ebb8d",
      "tree": "a2d83ea53fdc79510f90ef1d653a71cf82d544cf",
      "parents": [
        "d65d2d6ce817d78ac63a324618c2780f89b500c3"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Aug 11 14:24:07 2020 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:44:40 2020 -0600"
      },
      "message": "Add ReadMe_UpdatingEPPlus.txt\n"
    },
    {
      "commit": "d65d2d6ce817d78ac63a324618c2780f89b500c3",
      "tree": "aec503cd0ee6b628ace1790237fe977565cb061c",
      "parents": [
        "077ca681ace97cf1fb9fc6c925763c0e6c979227"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Dec 13 11:00:56 2019 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:44:27 2020 -0600"
      },
      "message": "Add \u0027DisplayCalcChain\u0027 method to debug why the computation of the Calc Chain was taking so long during a \u0027regenerate\u0027.\n"
    },
    {
      "commit": "077ca681ace97cf1fb9fc6c925763c0e6c979227",
      "tree": "3abd916f88ad1bfef188a4497da7a150e4163ca3",
      "parents": [
        "c6cbbb88a950ad7e281b8dadbcfb2672b202732f"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Oct 18 13:26:15 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:44:15 2020 -0600"
      },
      "message": "Fix parser invalid index error that occurred when a field name was the same as an Excel function name. EPPlus treated the field name as a \u0027Function\u0027 even if the name was not followed by a left paranthesis to enclose the function arguments following the \u0027Function\u0027 name. We now treat the field name as a \u0027Name\u0027 rather than as a \u0027Function\u0027 when no left parathensis follows the field name. This is true even if the field name is the same as an Excel function name.\n"
    },
    {
      "commit": "c6cbbb88a950ad7e281b8dadbcfb2672b202732f",
      "tree": "0ea5f4b4f3b7efde29ee4037e221add40d3938eb",
      "parents": [
        "76196e4d03e56abb660a651b73c31eaa8ac99324"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Oct 18 13:16:03 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:44:06 2020 -0600"
      },
      "message": "Revert \"Fix parser invalid index error that occurred when a field name was the same as an Excel function name. EPPlus treated the field name as a \u0027Function\u0027 even if the name was not followed by a left paranthesis to enclose the function arguments following the \u0027Function\u0027 name. We now treat the field name as a \u0027Name\u0027 rather than as a \u0027Function\u0027 when no left parathensis follows the field name. This is true even if the field name is the same as an Excel function name.\"\n\nThis reverts commit 5fa96bc345a855e9f1e89968224ce00100c8ba65.\n"
    },
    {
      "commit": "76196e4d03e56abb660a651b73c31eaa8ac99324",
      "tree": "e536c4f3b9910628e3a69f8e8acee6fb8d509a3d",
      "parents": [
        "00ddba5b0030f8e7a61667ccf673ddd08f20858f"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Thu Oct 17 11:55:29 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:43:57 2020 -0600"
      },
      "message": "Fix parser invalid index error that occurred when a field name was the same as an Excel function name. EPPlus treated the field name as a \u0027Function\u0027 even if the name was not followed by a left paranthesis to enclose the function arguments following the \u0027Function\u0027 name. We now treat the field name as a \u0027Name\u0027 rather than as a \u0027Function\u0027 when no left parathensis follows the field name. This is true even if the field name is the same as an Excel function name.\n"
    },
    {
      "commit": "00ddba5b0030f8e7a61667ccf673ddd08f20858f",
      "tree": "0ea5f4b4f3b7efde29ee4037e221add40d3938eb",
      "parents": [
        "b4333b13d67c74a64739ce6b9b61550a11de052f"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Thu Oct 03 17:24:35 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:43:48 2020 -0600"
      },
      "message": "Update method \u0027RemoveDummyFunction\u0027 to handle an unexpected DummyFunction suffix. Previously we sometimes failed to remove some forms of DummyFunctions.\n"
    },
    {
      "commit": "b4333b13d67c74a64739ce6b9b61550a11de052f",
      "tree": "5f93c714494c6ff4198e9f42664a09eb0181cf43",
      "parents": [
        "e053241d703bba5fabfca4fc74c10b23591ff0ab"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Thu Aug 29 14:50:28 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:43:38 2020 -0600"
      },
      "message": "Remove string concatentations from long worksheet formulas that are exported by Google Sheets.\n"
    },
    {
      "commit": "e053241d703bba5fabfca4fc74c10b23591ff0ab",
      "tree": "c7a77b7ca6d2bd5d1819c61ef82d61187ba2ae27",
      "parents": [
        "e56abab4704c230a307517b2cf9bb9854870b505"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Thu Aug 29 11:45:00 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:43:28 2020 -0600"
      },
      "message": "Revert \"When Google Sheets exports a Google Sheets formula into an Excel file as an A1 format formula, it sometimes splits a column name and includes an embedded \u0027double quote, ampersand, double quote\u0027 in the middle of the column name. The location of the embedded \u0027double quote, ampersand, double quote\u0027 can vary from row to row. As a result when the A1 formula is converted to R1C1 format, the R1C1 formula can differ simply because the column name was split at a slightly different location. This change looks for \u0027double quote, ampersand, double quote\u0027 in the middle of a quote identifier and remove them. This results in matching R1C1 formulas despite the presence of the \u0027double quote, ampersand, double quote\u0027 characters. This fix is somewhat speculative. I am making it after seeing one instance of this problem which was reported by a single customer.\"\n\nThis reverts commit 5a96d83f613e5d7d645fd8452d7387552d26836c.\n"
    },
    {
      "commit": "e56abab4704c230a307517b2cf9bb9854870b505",
      "tree": "a15527a078ff5d12cdab3ca2ea0e26a56be79691",
      "parents": [
        "03d755c27ff0c034c6d40ce5e23964abfa3283ac"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Mon Aug 26 13:43:13 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:43:02 2020 -0600"
      },
      "message": "When Google Sheets exports a Google Sheets formula into an Excel file as an A1 format formula, it sometimes splits a column name and includes an embedded \u0027double quote, ampersand, double quote\u0027 in the middle of the column name. The location of the embedded \u0027double quote, ampersand, double quote\u0027 can vary from row to row. As a result when the A1 formula is converted to R1C1 format, the R1C1 formula can differ simply because the column name was split at a slightly different location. This change looks for \u0027double quote, ampersand, double quote\u0027 in the middle of a quote identifier and remove them. This results in matching R1C1 formulas despite the presence of the \u0027double quote, ampersand, double quote\u0027 characters. This fix is somewhat speculative. I am making it after seeing one instance of this problem which was reported by a single customer.\n"
    },
    {
      "commit": "03d755c27ff0c034c6d40ce5e23964abfa3283ac",
      "tree": "c7a77b7ca6d2bd5d1819c61ef82d61187ba2ae27",
      "parents": [
        "60c08aa6de76b742f1d0770fc8d364826982617a"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Aug 20 12:20:43 2019 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:42:45 2020 -0600"
      },
      "message": "Eliminate null references when Dispose is called.\n"
    },
    {
      "commit": "60c08aa6de76b742f1d0770fc8d364826982617a",
      "tree": "b3b6594dcad26a54bdd28808d16f28f88388d6bc",
      "parents": [
        "5039455f219bef484f1a1e6d0e1eff8f499e75a0"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Jan 15 13:06:51 2019 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:42:30 2020 -0600"
      },
      "message": "Temporarily circumvent duplicate \u0027Define Names\u0027 problem introduced by Google Sheets .xlsx export bug.\n"
    },
    {
      "commit": "5039455f219bef484f1a1e6d0e1eff8f499e75a0",
      "tree": "7eba793d7c67a2dccb7173043c5cc65f79632441",
      "parents": [
        "9c2637229ca24be7551cd8005ac320ed8c8eba20"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Nov 10 17:27:40 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:42:21 2020 -0600"
      },
      "message": "Call method \u0027RemoveDummyFunction\u0027 for string formulas.\n"
    },
    {
      "commit": "9c2637229ca24be7551cd8005ac320ed8c8eba20",
      "tree": "d2fee88f5c9acb3f0ca15f0357a7e0f73bac1c49",
      "parents": [
        "f49dbae79f36b1467b36035b166aabbb14aa2226"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Sun Oct 08 14:38:29 2017 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:42:12 2020 -0600"
      },
      "message": "Prevent invalid index when converting formula from A1 to R1C1 format when we detect what appears to be a range expression but that expression is not well formed. In this case, it was simply text with a colon in it that made it look like a range expression.\n"
    },
    {
      "commit": "f49dbae79f36b1467b36035b166aabbb14aa2226",
      "tree": "852646dfc2f8f18f29a6ae35dab9c04dc68ac1b6",
      "parents": [
        "333b8d14a36f4fdb2a634c70af589462bae0db26"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Wed Jul 26 17:49:50 2017 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:42:02 2020 -0600"
      },
      "message": "Make the ExcelTable \u0027Address\u0027 settable to allow expansion of Excel table on insert at end of the Excel table.\n"
    },
    {
      "commit": "333b8d14a36f4fdb2a634c70af589462bae0db26",
      "tree": "7159bd4f71415338fbbe4408510536c8d47ec92a",
      "parents": [
        "5e74a7a73d812f930b5b910297dd7dd27bf15e2a"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Jul 11 14:00:57 2017 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:41:53 2020 -0600"
      },
      "message": "Correct Praveen\u0027s performance optimization to correctly handle deleted rows at the end of the worksheet. Previously we included the deleted row in the worksheet because we did not take the \u0027RowCount\u0027 into account. When the final worksheet row is deleted, the \u0027RowCount\u0027 is the only thing changed.\n"
    },
    {
      "commit": "5e74a7a73d812f930b5b910297dd7dd27bf15e2a",
      "tree": "3a10bc5b60c20161bb6523128a6b5cb5f4741657",
      "parents": [
        "237102af3b229eb354e5a221cf64b3612f7d8002"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Wed May 24 14:11:22 2017 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:41:44 2020 -0600"
      },
      "message": "Eliminate new line characters in worksheet formulas. They can appear if the user explicitly enters the formula over multiple lines.\n"
    },
    {
      "commit": "237102af3b229eb354e5a221cf64b3612f7d8002",
      "tree": "4c5196fdca8de2826fb4c838fadf9c0e0e15f3ed",
      "parents": [
        "efed97e60d228fe574340d6dcc88a691900fefa3"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Mar 03 18:36:04 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:41:30 2020 -0600"
      },
      "message": "Fix bug 15520. The EPPlus Call to Method \u0027new ExcelPackage(rawStream)\u0027 Returns \u0027STG_E_WRITEFAULT\u0027 When It Attempts to Read a Valid .xlsx File. This change was originally made on 08/22/2016 but it was lost when we added EPPlus to GitHub.\n"
    },
    {
      "commit": "efed97e60d228fe574340d6dcc88a691900fefa3",
      "tree": "1ad91afee10cf0d232fc92288d5627ed081f131c",
      "parents": [
        "19819a46e44916b3667b51ff1da1f184a6b42f5f"
      ],
      "author": {
        "name": "Praveen Seshadri",
        "email": "praveen_seshadri@hotmail.com",
        "time": "Sat Feb 04 23:33:24 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:41:09 2020 -0600"
      },
      "message": "Safety checks for perf fixes\n"
    },
    {
      "commit": "19819a46e44916b3667b51ff1da1f184a6b42f5f",
      "tree": "9a9b9c69a42ea102e234bf6739c9830c75d18bf0",
      "parents": [
        "fe103a398910067fe4a58c54b9a5c74f5e817889"
      ],
      "author": {
        "name": "Praveen Seshadri",
        "email": "praveen_seshadri@hotmail.com",
        "time": "Sat Feb 04 19:53:14 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:40:59 2020 -0600"
      },
      "message": "More fixing EPPLus perf\n"
    },
    {
      "commit": "fe103a398910067fe4a58c54b9a5c74f5e817889",
      "tree": "f0691364179b12860e5901db712ab8eda9b78625",
      "parents": [
        "b5c67fe0dcec104e0ca99404391b762518e8aca0"
      ],
      "author": {
        "name": "Praveen Seshadri",
        "email": "praveen_seshadri@hotmail.com",
        "time": "Sat Feb 04 17:53:56 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:31:26 2020 -0600"
      },
      "message": "Improve performance of reading array values\n"
    },
    {
      "commit": "b5c67fe0dcec104e0ca99404391b762518e8aca0",
      "tree": "8191e355e9f7299847bc6dfe2cd00ead9a2c8bb3",
      "parents": [
        "b723110723583577f6b71d9fa84cf5a12237ec75"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Fri Feb 03 14:09:44 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:31:14 2020 -0600"
      },
      "message": "Prevent null reference exception when expression contains a single quoted worksheet name with an embedded ! character. Previously the single quotes were removed and the code simply split on the ! because it assumed the ! separated the worksheet name from the address. In the case of a worksheet name with an embedded !, the split erroneously occurred on the ! within the worksheet name. We then got a null reference exception because the worksheet name was invalid and could not be found.\n"
    },
    {
      "commit": "b723110723583577f6b71d9fa84cf5a12237ec75",
      "tree": "23ba12c18dd43184e0d49a94bfc81d9c7bfc0bdc",
      "parents": [
        "b2f554d21e0997994fb2d46c07aac8bb548ee22f"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Sun Jan 08 20:57:41 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:31:01 2020 -0600"
      },
      "message": "Make all R1C1 formula methods parallel for V0 and V1.\n"
    },
    {
      "commit": "b2f554d21e0997994fb2d46c07aac8bb548ee22f",
      "tree": "e28fa00822fa4fde334accf84b31d833cc5bc8f0",
      "parents": [
        "ac8b5d367b1f30fc16efa1d0026fcca3869d1404"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Thu Jan 05 21:37:30 2017 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:30:52 2020 -0600"
      },
      "message": "Improve formula conversion.\n"
    },
    {
      "commit": "ac8b5d367b1f30fc16efa1d0026fcca3869d1404",
      "tree": "4f3599fe7a6144239c1e31c29a3aa710fd77716f",
      "parents": [
        "bf835baf74268dc42293f7f4214fdb38d0096a75"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Sun Nov 06 20:05:18 2016 -0800"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:30:41 2020 -0600"
      },
      "message": "When parsing strings while converting formulas, ensure the opening and closing quote charcter match.\n"
    },
    {
      "commit": "bf835baf74268dc42293f7f4214fdb38d0096a75",
      "tree": "c4214722f6d9761643788d1fadd676a6255d8942",
      "parents": [
        "70a101e57a22a7d96a6d9df9a3a59a212c74d866"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Nov 01 13:40:52 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:30:29 2020 -0600"
      },
      "message": "Improve \u0027A1 to R1C1\u0027 and \u0027R1C1 to A1\u0027 formula conversion.\n"
    },
    {
      "commit": "70a101e57a22a7d96a6d9df9a3a59a212c74d866",
      "tree": "8d8b641d37c72ecbfc0f2e4583649b3a8d5fc1c2",
      "parents": [
        "2b0902d04d03d446a538484dcc8ec83484ca33f6"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Mon Oct 03 14:36:33 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:30:17 2020 -0600"
      },
      "message": "Upgrade to .Net Framework version 4.5\n"
    },
    {
      "commit": "2b0902d04d03d446a538484dcc8ec83484ca33f6",
      "tree": "82e155dcfde6de1bb2eafd0c4e7bb7d54af30d98",
      "parents": [
        "f264d78c843b24c14970cd116078dd36b0b74611"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Aug 30 16:29:17 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:29:53 2020 -0600"
      },
      "message": "Duration must also cope with Google Sheets export of cells having a formula. Rather than exporting the native value, they export the formatted value.\n"
    },
    {
      "commit": "f264d78c843b24c14970cd116078dd36b0b74611",
      "tree": "2edf511fb878f4335accb1ee4e76848d0ef2da7c",
      "parents": [
        "a61c334b6f06e3545f905f50634c5dee1ff0085c"
      ],
      "author": {
        "name": "philga",
        "email": "philga@1track.com",
        "time": "Tue Aug 30 13:18:09 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:29:44 2020 -0600"
      },
      "message": "Cope with Google Sheets export of cells having a formula. Rather than exporting the native value, they export the formatted value.\n"
    },
    {
      "commit": "a61c334b6f06e3545f905f50634c5dee1ff0085c",
      "tree": "8578257f6d2519ef4f71fcf394e1b8c42f68e929",
      "parents": [
        "d9f1dda791210c3f530c0ed5f83cfb5b2c06c439"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 13:29:23 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:29:29 2020 -0600"
      },
      "message": "Bugfix 15517\n"
    },
    {
      "commit": "d9f1dda791210c3f530c0ed5f83cfb5b2c06c439",
      "tree": "e96bcb9d409125aabc880d5604008cd045df3dfa",
      "parents": [
        "ef1ff0a941cc6ffec71dccddb428f8459acacbc3"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 15:17:15 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:29:19 2020 -0600"
      },
      "message": "Bugfix ArrayFormula\n"
    },
    {
      "commit": "ef1ff0a941cc6ffec71dccddb428f8459acacbc3",
      "tree": "36e3b039011e35fd5fe1f74b123879b48f4404ae",
      "parents": [
        "465e93f4024181f5cfd9026b13ce953b9698b92b"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 15:18:00 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:29:06 2020 -0600"
      },
      "message": "Bugfix Praveen\n"
    },
    {
      "commit": "465e93f4024181f5cfd9026b13ce953b9698b92b",
      "tree": "31a3af7ba9b8667c51d386cd53a096088abfc35b",
      "parents": [
        "b9adabfe5784d655ffe9b4ea1ef94b04e93d4a88"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 12:31:57 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:28:56 2020 -0600"
      },
      "message": "Bugfix 15339\n"
    },
    {
      "commit": "b9adabfe5784d655ffe9b4ea1ef94b04e93d4a88",
      "tree": "25f5067d71e23e76bf5f5190c44480b5cc068f96",
      "parents": [
        "a3c3ef0ba3ec3702d07e61c6632f47bf2d3da10c"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 13:38:21 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:28:46 2020 -0600"
      },
      "message": "Bugfix G0005\n"
    },
    {
      "commit": "a3c3ef0ba3ec3702d07e61c6632f47bf2d3da10c",
      "tree": "1bce8ecfb3de825868f59f7758d0c19202291f64",
      "parents": [
        "405f705f9bdfa4141d30f8c7dc3df8e39ca24cf8"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 13:36:40 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:28:40 2020 -0600"
      },
      "message": "Bugfix 15290\n"
    },
    {
      "commit": "405f705f9bdfa4141d30f8c7dc3df8e39ca24cf8",
      "tree": "c46b28960b8f45a9a4557a86981b94afb9463b75",
      "parents": [
        "88bd61aea0fe39ca3495ba0469bd703c08338eb7"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 12:40:00 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:28:12 2020 -0600"
      },
      "message": "Bugfix G0004\n"
    },
    {
      "commit": "88bd61aea0fe39ca3495ba0469bd703c08338eb7",
      "tree": "dabe845d8acfedd8daf42cb855c3173bc2fded91",
      "parents": [
        "822b0a22821969d9c3f042c0c2c4623a2c18ec70"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 12:47:52 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:27:39 2020 -0600"
      },
      "message": "Bugfix 15151\n"
    },
    {
      "commit": "822b0a22821969d9c3f042c0c2c4623a2c18ec70",
      "tree": "bb06330453ee5a6a4fa5c0e2b7e1e095c12ba4b6",
      "parents": [
        "96b961a3274cd96ffc062402508e4acce54e6a65"
      ],
      "author": {
        "name": "Tony Fader",
        "email": "afader@gmail.com",
        "time": "Thu Aug 18 12:22:43 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:27:27 2020 -0600"
      },
      "message": "Update .gitignore"
    },
    {
      "commit": "96b961a3274cd96ffc062402508e4acce54e6a65",
      "tree": "a7012613716729ab3c49d0845e5e26d746b1e4b6",
      "parents": [],
      "author": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Wed Aug 17 18:07:40 2016 -0700"
      },
      "committer": {
        "name": "Trevor Ryland",
        "email": "tryland@google.com",
        "time": "Thu Oct 22 17:25:00 2020 -0600"
      },
      "message": "Initial import\n\nSee b/170209503#comment3 for reference.\n\nChange-Id: I48ef5d4317ba01a0c2215737f6b9d9abb5104a38\n"
    }
  ]
}
