Return to site

Solver Table For Mac

broken image


Mac

Truth Table Generator This tool generates truth tables for propositional logic formulas. You can enter logical operators in several different formats. For example, the propositional formula p ∧ q → ¬r could be written as p / q - r, as p and q = not r, or as p && q -!r. The connectives ⊤ and ⊥ can be entered as T and F. I am trying to use solver table on my Mac, I already downloaded it but every time I try to run solver table, I get a message that says Microsoft Visual Basic. I don't know what that means or how to fix it. I keep googling this problem and I can't seem to find a solution to this.

This add-in is a natural extension to the Solver add-in incorporated in Excel. SolverTable performs sensitivity analysis for an Excel optimization model, and, in most cases, its output is more relevant and understandable than the optional sensitivity output provided by Solver itself. SolverTable is very easy to use, as described below. All it requires is an existing optimization model. That is, there must be a spreadsheet model already built, and the corresponding Solver dialog box must already have been filled out. In this help file, we will explain how to use SolverTable and illustrate it with several screen shots.

Sections of this Help file

Installing SolverTable

If you clicked on the Help button of the first SolverTable dialog box, you already installed SolverTable, so you can skip this section. In general, however, to install SolverTable, copy the SolverTable.xla file and corresponding help files (SolverTableHelp.htm and the various SolverTable_x.gif files) to a common directory on your hard drive. Just make sure that all of the SolverTable files are in the same directory and there are only alphanumeric characters (no spaces or underscores) in the path to these files. Then, in Excel, load the add-in with the Tools/Add-ins menu item. If this is your first time to load SolverTable, you'll need to click on the Browse button to find the SolverTable.xla file. Otherwise, there should be a SolverTable item in the list of available add-ins. Just check its box, and click on OK. SolverTable is no different from any other Excel add-in; they are all loaded this way. You will know that SolverTable is loaded when you see a SolverTable menu item under Excel's Data menu.

Uninstalling SolverTable

Solver table for mac shortcut
To uninstall the add-in (remove it from memory), use Excel's Tools/Add-ins menu item and uncheck the SolverTable box.

An example file

To illustrate SolverTable, we will use the standard product mix model, a version of which appears in Figure 1. (The conventions we use are that the inputs are in blue borders, the changing cells are in red borders, and the objective cell is in a black border.) We assume the Solver dialog box has already been completed in the obvious way (including checks in the Assume Linear Model and Assume Non-Negative boxes). Actually, this model has already been optimized, but this is not necessary for running SolverTable.

Figure 1

Running SolverTable

The purpose of SolverTable is very much like that of an Excel data table: to vary one or two inputs and keep track of one or more outputs. The main difference is that SolverTable runs Solver for each input value (or combination of input values) and reports the optimal
Solver table for mac download
results in the table. Like data tables, there are essentially two options: one-way tables and two-way tables, depending on whether there are one or two input cells. However, unlike Excel data tables, there can be multiple output cells for one-way and two-way tables. In the latter case, SolverTable creates a separate table for each output cell. Unfortunately (or fortunately, depending on your point of view), a table created by SolverTable retains no links to the original data. If you want to change anything about the table, you'll have to rerun SolverTable.

Creating a one-way table

To illustrate a one-way table, we'll see how the optimal profit and the optimal product mix (changing cells) vary as the number of labor hours available (cell D21) varies from 2000 to 8000 in increments of 1000. Begin by selecting the Data/SolverTable menu item. This brings up the dialog box in Figure 2. Fill it out as shown and click on OK.

Figure 2

The next dialog box, shown in Figure 3, requires you to specify the input cell, the input values (which are assumed to be in regular increments), the output cells, and a location for the table. Note that range names can be used if they exist. The add-in checks your entries in this dialog box for 'obvious' errors. For example, the input cell should not contain a formula or a label, the output range should not contain the input cell, the table location shouldn't write over existing values (unless you say it is OK to do so), and so on. However, we won't guarantee that it checks for everything, so be careful when making these entries. Be especially careful that you choose a location for the table that doesn't write over any information you don't want to lose (even though you'll be warned if you try to do so).

Figure 3

The table itself appears in Figure 4. (We've added the heading in row 1 manually.) The small red triangles are Excel comments that SolverTable automatically adds to a number of cells. For example, the comment in cell I4 reminds what the input cell is (in this case, D21). The comments in column J are the Solver messages you normally see after running Solver. For this example, they all contain the message you hope to see: 'Solver found a solution. All constraints and optimality conditions are satisfied.' However, if there is no feasible solution, say, then the comment will alert you to this. Note that unlike an Excel data table, SolverTable does not put formulas at the top of the table (in row 3 of the figure), because this wouldn't make sense. However, it does put the cell addresses of the output cells. This way, you can remember which outputs are being reported.

Figure 4

Creating a two-way table

To create a two-way table, go through the same steps as above for a one-way table, but check the two-way option in Figure 2. Then the two-way dialog box in Figure 5 appears. Here, we'll assume that both labor hour availability (D21) and hourly wage rate (B4) are being varied, and we want to keep track of the optimal profit and the number of labor hours used (B21). (Any output cells can be selected.)

Figure 5

SolverTable then creates as many tables as there are output cells (in a vertical direction), as shown in Figure 6. Note that each cell in a table corresponds to a Solver run. For example, we see that when there are 4000 labor hours available and the wage rate is $4 per hour, the optimal profit is $25,200 (top table) and all 4000 labor hours are used (bottom table). Again, there are comments in selected cells. For example, the comments in cells I13 and J12 remind you that the input cells are D11 and B4. The comments in the body of each table report the Solver message, exactly as with one-way tables.

Figure 6

As with all Solver models, it is a good idea to take a close look at the answers and see whether they make sense. For example, in Figure 6 we see all zeros in column L. Does this make sense? Yes, it probably does. When the labor rate is $12 per hour and all other monetary inputs stay constant, labor is evidently too expensive for the company to make a profit. So it produces nothing!

Being creative

With some imagination, you can get SolverTable to run some really interesting sensitivity analyses. For example, suppose we want to allow the availabilities of all three resources (labor, metal, and glass) to change by common factor. Then we need to change the model slightly, as indicated in Figure 7. Now the original availabilities have been moved to column F, a change factor has been inserted in column H, and formulas have been entered for availabilities in column D. Specifically, the formula in cell D21 is =$H$21*F21, which is then copied down.

Figure 7

We can now do a one-way sensitivity analysis on this change factor, using the settings in Figure 8. The corresponding table appears in Figure 9.

Figure 8

Figure 9

As another example, suppose you want to keep track of a function of several cells in the model. For example, suppose you want to keep track of the maximum number of frames of any single type produced, that is, the maximum of the changing cell values. You can't select this as an output directly because it doesn't appear anywhere in the model. But the solution is simple: Create a formula for it in some unused cell, and then specify this cell as an output cell.

SolverTable Difficulties

SolverTable relies on Solver. In fact, SolverTable invokes Solver for each input value (or combination of input values). Therefore, all of the problems that people have experienced with Solver are liable to occur with SolverTable. However, we have tried to overcome one of Solver's more annoying features: claiming that a model is not linear when we know
Mac

Truth Table Generator This tool generates truth tables for propositional logic formulas. You can enter logical operators in several different formats. For example, the propositional formula p ∧ q → ¬r could be written as p / q - r, as p and q = not r, or as p && q -!r. The connectives ⊤ and ⊥ can be entered as T and F. I am trying to use solver table on my Mac, I already downloaded it but every time I try to run solver table, I get a message that says Microsoft Visual Basic. I don't know what that means or how to fix it. I keep googling this problem and I can't seem to find a solution to this.

This add-in is a natural extension to the Solver add-in incorporated in Excel. SolverTable performs sensitivity analysis for an Excel optimization model, and, in most cases, its output is more relevant and understandable than the optional sensitivity output provided by Solver itself. SolverTable is very easy to use, as described below. All it requires is an existing optimization model. That is, there must be a spreadsheet model already built, and the corresponding Solver dialog box must already have been filled out. In this help file, we will explain how to use SolverTable and illustrate it with several screen shots.

Sections of this Help file

Installing SolverTable

If you clicked on the Help button of the first SolverTable dialog box, you already installed SolverTable, so you can skip this section. In general, however, to install SolverTable, copy the SolverTable.xla file and corresponding help files (SolverTableHelp.htm and the various SolverTable_x.gif files) to a common directory on your hard drive. Just make sure that all of the SolverTable files are in the same directory and there are only alphanumeric characters (no spaces or underscores) in the path to these files. Then, in Excel, load the add-in with the Tools/Add-ins menu item. If this is your first time to load SolverTable, you'll need to click on the Browse button to find the SolverTable.xla file. Otherwise, there should be a SolverTable item in the list of available add-ins. Just check its box, and click on OK. SolverTable is no different from any other Excel add-in; they are all loaded this way. You will know that SolverTable is loaded when you see a SolverTable menu item under Excel's Data menu.

Uninstalling SolverTable

To uninstall the add-in (remove it from memory), use Excel's Tools/Add-ins menu item and uncheck the SolverTable box.

An example file

To illustrate SolverTable, we will use the standard product mix model, a version of which appears in Figure 1. (The conventions we use are that the inputs are in blue borders, the changing cells are in red borders, and the objective cell is in a black border.) We assume the Solver dialog box has already been completed in the obvious way (including checks in the Assume Linear Model and Assume Non-Negative boxes). Actually, this model has already been optimized, but this is not necessary for running SolverTable.

Figure 1

Running SolverTable

The purpose of SolverTable is very much like that of an Excel data table: to vary one or two inputs and keep track of one or more outputs. The main difference is that SolverTable runs Solver for each input value (or combination of input values) and reports the optimal results in the table. Like data tables, there are essentially two options: one-way tables and two-way tables, depending on whether there are one or two input cells. However, unlike Excel data tables, there can be multiple output cells for one-way and two-way tables. In the latter case, SolverTable creates a separate table for each output cell. Unfortunately (or fortunately, depending on your point of view), a table created by SolverTable retains no links to the original data. If you want to change anything about the table, you'll have to rerun SolverTable.

Creating a one-way table

To illustrate a one-way table, we'll see how the optimal profit and the optimal product mix (changing cells) vary as the number of labor hours available (cell D21) varies from 2000 to 8000 in increments of 1000. Begin by selecting the Data/SolverTable menu item. This brings up the dialog box in Figure 2. Fill it out as shown and click on OK.

Figure 2

The next dialog box, shown in Figure 3, requires you to specify the input cell, the input values (which are assumed to be in regular increments), the output cells, and a location for the table. Note that range names can be used if they exist. The add-in checks your entries in this dialog box for 'obvious' errors. For example, the input cell should not contain a formula or a label, the output range should not contain the input cell, the table location shouldn't write over existing values (unless you say it is OK to do so), and so on. However, we won't guarantee that it checks for everything, so be careful when making these entries. Be especially careful that you choose a location for the table that doesn't write over any information you don't want to lose (even though you'll be warned if you try to do so).

Figure 3

The table itself appears in Figure 4. (We've added the heading in row 1 manually.) The small red triangles are Excel comments that SolverTable automatically adds to a number of cells. For example, the comment in cell I4 reminds what the input cell is (in this case, D21). The comments in column J are the Solver messages you normally see after running Solver. For this example, they all contain the message you hope to see: 'Solver found a solution. All constraints and optimality conditions are satisfied.' However, if there is no feasible solution, say, then the comment will alert you to this. Note that unlike an Excel data table, SolverTable does not put formulas at the top of the table (in row 3 of the figure), because this wouldn't make sense. However, it does put the cell addresses of the output cells. This way, you can remember which outputs are being reported.

Figure 4

Creating a two-way table

To create a two-way table, go through the same steps as above for a one-way table, but check the two-way option in Figure 2. Then the two-way dialog box in Figure 5 appears. Here, we'll assume that both labor hour availability (D21) and hourly wage rate (B4) are being varied, and we want to keep track of the optimal profit and the number of labor hours used (B21). (Any output cells can be selected.)

Figure 5

SolverTable then creates as many tables as there are output cells (in a vertical direction), as shown in Figure 6. Note that each cell in a table corresponds to a Solver run. For example, we see that when there are 4000 labor hours available and the wage rate is $4 per hour, the optimal profit is $25,200 (top table) and all 4000 labor hours are used (bottom table). Again, there are comments in selected cells. For example, the comments in cells I13 and J12 remind you that the input cells are D11 and B4. The comments in the body of each table report the Solver message, exactly as with one-way tables.

Figure 6

As with all Solver models, it is a good idea to take a close look at the answers and see whether they make sense. For example, in Figure 6 we see all zeros in column L. Does this make sense? Yes, it probably does. When the labor rate is $12 per hour and all other monetary inputs stay constant, labor is evidently too expensive for the company to make a profit. So it produces nothing!

Being creative

With some imagination, you can get SolverTable to run some really interesting sensitivity analyses. For example, suppose we want to allow the availabilities of all three resources (labor, metal, and glass) to change by common factor. Then we need to change the model slightly, as indicated in Figure 7. Now the original availabilities have been moved to column F, a change factor has been inserted in column H, and formulas have been entered for availabilities in column D. Specifically, the formula in cell D21 is =$H$21*F21, which is then copied down.

Figure 7

We can now do a one-way sensitivity analysis on this change factor, using the settings in Figure 8. The corresponding table appears in Figure 9.

Figure 8

Figure 9

As another example, suppose you want to keep track of a function of several cells in the model. For example, suppose you want to keep track of the maximum number of frames of any single type produced, that is, the maximum of the changing cell values. You can't select this as an output directly because it doesn't appear anywhere in the model. But the solution is simple: Create a formula for it in some unused cell, and then specify this cell as an output cell.

SolverTable Difficulties

SolverTable relies on Solver. In fact, SolverTable invokes Solver for each input value (or combination of input values). Therefore, all of the problems that people have experienced with Solver are liable to occur with SolverTable. However, we have tried to overcome one of Solver's more annoying features: claiming that a model is not linear when we know it is linear. In case you haven't run into this problem, we'll describe it first. When your model is linear, you should check the Assume Linear Model box under Solver Options. This has two advantages. First, it uses a faster algorithm (the simplex method). Second, it is guaranteed (well, almost) to find the optimal solution if an optimal solution exists. However, Solver uses its own rules to check whether a model is linear. Because of numerical precision problems inherent in computers, Solver sometimes decides that a model is not linear, even though we know it is. In this case, it responds with an error message that the conditions for a linear model are not satisfied.

SolverTable automatically checks for this error message. If Solver gives it, then SolverTable reruns Solver (for this problem) with the Assume Linear Model box unchecked and reports the result. However, to let you know that all of this happened, the corresponding cells of the table are colored yellow, and the comments in these cells describe the problem. An example we encountered appears in Figure 10. This model is indeed linear. However, when we formed the one-way table, Solver thought the model was not linear for input values of 0.80 and 1.00, even though it agreed that it was linear for input values of 0.90 and 1.10. Similarly, for the two-way table, it thought the model was not linear for 2 of the 16 input combinations. This is clearly strange behavior, but it happens fairly frequently. At least, SolverTable provides a solution (using a nonlinear algorithm) rather than the annoying 'conditions for linear model are not satisfied' Solver message.

Figure 10

Free Downloads

Watch this page for free downloads as they become available.

·DADM_Tools add-in: For various reasons, some users of our DADM and PMS books prefer not to use the Palisade add-ins discussed in these books. To provide another alternative, I created my own add-in called DADM_Tools that provides much of the basic functionality of the Palisade software. This add-in, written in Excel's VBA language, is not used in the books but it is available here for free. Because it is totally free, no support is available. However, it is very easy to use, and it is compatible with Excel for Windows and Excel for Mac. Here is a link to instructions: DADM_Tools Help.docx. Here is a link to the add-in: DADM_Tools.xlam.

Breaktweaker for mac. ·Random Functions Add-Ins: The DADM_Tools add-in mentioned in the previous bullet includes, among other things, a simulation program. For technical reasons, the custom functions I developed to generate random numbers from various probability distributions are not included in the DADM_Tools add-in. However,…

oFor Windows users, the random functions are contained in a special type of add-in (an XLL that works only with Excel for Windows 2010 or higher). First read the following: RandGen Add-In.docx (updated 1/24/2019). Then install the add-in by running the Setup file in: RandGenSetup.zip.

oFor Mac users, the random functions are in the following add-in: Random Functions for the Mac.xlam.

·Excel tutorial: Here is a free version of my Excel tutorial: Excel Tutorial for Windows.xlsx. It provides information for upgrading to a more complete version called ExcelNow!. You can also download a version of the tutorial for the Mac: Excel Tutorial for the Mac.xlsx. By comparing these, you can see which features in Excel for Windows are not included in Excel for Mac.

·Analysis ToolPak Guide: This is a supplement to our books for those of you who would like to use Excel's built-in Analysis ToolPak add-in for statistical analysis. The zip file contains a pdf version of the guide and accompanying data files: Analysis ToolPak Guide.zip

·SolverTable Add-in: Each version below has a corresponding Help file (a Word file) that you should read before contacting me about problems. Each zip file below contains only two files: the .xla or .xlam add-in file and the Word help file. You should unzip both to the same folder (any folder of your choice) and then read the help file for more instructions.

oSolverTable tip for international users: A user from outside the US discovered why his SolverTable wasn't working. The problem was in the numerical settings (decimal symbols and list separators), and the fix was to change these in Windows settings, making sure the separator is a period, not a comma. I'm not sure how common this problem might be, but if you're outside the US and your SolverTable isn't working, this is worth a try.

oFor Solver that ships with Excel for Mac: SolverTable for Mac.zip

¨(Note: If you downloaded this zip before 10/30/2020, download this version instead. The previous version didn't recognize when a model has no feasible solutions. This version corrects the problem.) This version of SolverTable was created for the Mac in October 2020. The essence of SolverTable has always been that it makes multiple uninterrupted Solver runs. For technical reasons, this is not possible in Excel for Mac, which explains why a version of SolverTable had never been available for the Mac. However, this new version gets around the problem by making interrupted Solver runs. Specifically, before each run, you are prompted whether you want to make the next run. (This is explained more fully in the help file that is part of this zip file.) Admittedly, the interruptions slow down the process to some extent (besides the fact that Solver for the Mac is just plain slow), but it is much better than making multiple Solver runs manually, each with new input values. Fortunately, the user interface and the results sheets are exactly the same as those for the Windows version of SolverTable.

oFor Solver that ships with Excel 2019 or Office 365: There is no 'new' SolverTable add-in for either of these. As far as I'm aware, SolverTable for Excel 2016 should work fine with either of them. I'm currently using it with Office 365 and haven't run into any problems.

oFor Solver that ships with Excel 2016: SolverTable 2016.zip

¨This version is basically the same as the 2013 version.

oFor Solver that ships with Excel 2013: SolverTable 2013.zip

¨This version wasn't created because SolverTable 2010 wouldn't work with Excel 2013. Rather, I made some technical changes in the software. Probably the main change is that this version now starts each Solver run from the original solution in the decision variable cells. (In previous versions, it started each Solver run from the previous Solver solution.)

¨Modified on 10/5/2015 to open the Help file in a simpler manner (less possibility of an error occurring).

oFor Solver that ships with Excel 2010:SolverTable 2010.zip

¨Modified on 10/5/2015 to open the Help file in a simpler manner (less possibility of an error occurring).

¨Modified on 4/26/2012 to fix a problem with long worksheet names. Basically, Excel allows worksheet names to be no longer than 31 characters. SolverTable creates a hidden sheet with its settings, and the name of the sheet is the model sheet name plus the suffix '_STS'. So if the name of your model sheet has from 28 to 31 characters, this would create an error. SolverTable now warns you before the error occurs.

¨Modified on 12/5/2011 to fix a potential sheet-naming problem.

¨Modified on 11/8/2011 to fix a potential problem where a user mistakenly selects the Simplex LP method on a nonlinear model. The previous code could get into an infinite loop in this case. A similar fix was made (see below) to the 2007 and 2003 versions. However, this 2010 version might not work correctly in 2007 or 2003 because of a subtle code change Frontline Systems made in its 2010 version of Solver.

¨Modified on 10/7/2010 to fix a bug that occurred when a user mistakenly ran SolverTable from an STS sheet (not a model sheet)

¨Modified on 9/24/2010 to make it compatible with the GRG Nonlinear Multistart option

¨Modified on 9/3/2010 to be compatible with 64-bit Office 2010.

oFor Solver that ships with Excel 2007:SolverTable 2007.zip

¨Modified on 4/26/2012 – see point 2 above for the 2010 version

¨Modified on 12/5/2011 – see point 3 above for the 2010 version

¨Modified on 11/8/2011 – see point 4 above for the 2010 version

¨Modified on 10/7/2010 to fix a bug that occurred when a user mistakenly ran SolverTable from an STS sheet (not a model sheet)

oSolverTable fix: For those of you who have problems with SolverTable, here are instructions for a possible fix: Fixing SolverTable.docx.

oMissing Solver Reference: Here is another possible fix for SolverTable: Missing Solver Reference.docx

oA strange SolverTable problem: Reynold Byers and his students at Arizona State discovered that in a straightforward integer-constrained model, SolverTable gave slightly suboptimal solutions. I originally thought this had to do with the Integer Optimality setting, but that wasn't it. They found that the decimal input being varied, something like from 0 to 0.6 in increments of 0.1, was not being set to exactly 0.4, say, but instead to something like 0.400025 – a slight roundoff – and this was enough to cause the suboptimal solutions. Great detective work on their part, but I'm not sure how to fix the problem. Anyway, be aware!

oAn interesting use of SolverTable: One way to use SolverTable is to let the Input cell(s) (for a one-way or two-way table) be the initial value(s) of decision variable cell(s). For a linear model, the only point in doing this would be to check that Solver indeed gets to the optimal solution regardless of the initial values. For a nonlinear model, this could be used to check whether there are local optima that Solver might get to, depending on the initial values it starts from. For example, for problem 7.48 of PMS 3e, which has exactly two decision variable cells, it is easy to show that Solver gets to the global optimum only for some initial values of the decision variable cells. (Thanks to Tom Schriber for this suggestion.)

·StatPro and StatBasics Add-Ins

oStatPro for Excel 2007 and later: Although I no longer support StatPro, I tinker with it from time to time, and this version is the result: StatPro New.zip. It doesn't have all the options from the original StatPro (e.g., stepwise regression is missing), but it has some new features and a slightly different interface. It is contained in a single .xla file, and it works with Excel 2007 and later versions. To load it, just double-click the .xla file.

oStatPro for the Mac: Some of you have requested a version of StatPro for the Mac, that is, for the Mac version of Excel. This was originally impossible because early version of Excel for Mac didn't even have VBA, the programming language. That changed in Excel 2011, but the VBA interface is quite different from the one in Excel for Windows. Anyway, I gave it a shot, and you can try out this version: StatPro for Mac.zip. However, you're completely on your own; I provide no support for this version. VBA programming for the Mac is no fun!

oStatBasics for Excel 2007: StatBasics for Excel 2007.zip. This is a mini version of StatPro I created, mostly to practice my programming skills. It provides only the basics: summary measures and useful statistical charts. Installation instructions are in the zip file. Try it out, but keep in mind that I do not provide any support for it.

  • NCAA March Madness simulation: Here is the simulation for 2019: March Madness 2019 with Data Table.xlsx. Also, here is a version that calculates the probability of a perfect bracket, i.e., successfully predicting the winner of each game: March Madness Probabilities 2013.xlsx. (I didn't update this file after 2013, but you can if you like. The probability of picking all winners will still be infinitesimally small.)
  • Transient queueing analysis: Transient Queue.xlsm Did you know that you can analyze queues with time-varying behavior (e.g., arrival rates that increase during peak periods of the day) with spreadsheets, using analytical approximations, not simulation or steady-state analysis? This is indeed possible, as Wayne Winston described in the 4th edition of his Operations Research book. Although Wayne's approach is to use Excel formulas, this file uses a VBA program to perform the calculations. Enjoy!
  • Automating Sudoku with VBA: Sudoku.xlsm (or Sudoku16.xlsm) If you love the laborious effort of working Sudoku puzzles—the pencil marks, the erasing, etc.—then you should not open these files. But if you want to see how powerful VBA programs can be, check out the Sudoku.xlsm file. (You can even view the VBA code to see how it works.) And if you want to go a step farther, with 16x16 grids instead of the usual 9x9 grids, check out the Sudoku16.xlsm file. (Note: I changed these files slightly in April 2016. Specifically, the Sudoku.xlsm file now has an Algorithm sheet that walks you through the algorithm implemented in the VBA code. The VBA code is a bit hard to follow – a lot of nested loops – but the algorithm, i.e., the plan of attack, itself is quite straightforward.)

Visit the Cengagesite for our books.

Send e-mail to albright@indiana.edu

Albright and Winston are both retired from the Kelley School of Business, Indiana University, Bloomington.

Back to home page For mac programs.

Solver Table For Mac Catalina

Updated: 12/2/2020





broken image