diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/2020meetings/index.html b/2020meetings/index.html new file mode 100644 index 00000000..9136411e --- /dev/null +++ b/2020meetings/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + Training events in 2020 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Workshops in 2020

+

During 2020 we ran a series of online workshops, with support from the London Mathematical Society, Universitas 21, and the School of Mathematics at the University of Edinburgh.

+

You can access recordings and materials from these workshops through the links below:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TitleDateLocationDescription
Workshop: Effective use of Maxima2 Dec 2020
15:00-17:00 GMT
Online.
Course page - effective use of Maxima
Learn how mathematics educators use Maxima effectively with STACK, and how to use more advanced Maxima techniques to improve your own STACK questions.
Workshop: Addressing common student errors25 Nov 2020
15:00-17:00 GMT
Online.
Course page - student errors 25-11-20
Gain insight into common student errors based on mathematics education research, and get practical experience of using STACK to detect and give feedback on errors.
Workshop: Assessment of proofs in STACK7 September 2020
15:00-16:30 BST
Online.
Course page - assessment of proofs
Learn about important practical findings from educational research on how to teach mathematical proof effectively, and hear about practical approaches to assessing proof online using tools like STACK.
Workshop: Getting started with STACK20 July 2020
10:00-12:00 BST
Online.
Course page - getting started 20-07-20
Learn about the features of STACK and write your first STACK question with experts on hand to help.
Workshop: addressing common student errors3 July 2020
14:00-16:00 BST 
Online.
Course page - student errors
Gain insight into common student errors based on mathematics education research, and get practical experience of using STACK to detect and give feedback on errors.
Workshop: quality questions and assessing proof19 June 2020
10:00-12:00 BST
Online.
Course page - quality questions
Learn about advanced features of STACK that help to make sure your questions work reliably, and get tips from experienced authors on how to write polished questions. In the second half, learn about ways to assess proof using STACK.
Workshop: getting started with STACK15 June 2020
10:00-15:00 BST
Online.
Course page - getting started
Hear from some experienced users about how they use STACK in variety of courses, then write your first STACK question with experts on hand to help.
+ +
+
+ + + + + + + + + + + diff --git a/404.html b/404.html new file mode 100644 index 00000000..a878bb89 --- /dev/null +++ b/404.html @@ -0,0 +1,367 @@ + + + + + + + + + + + + STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+
+

404

+

Page not found

+
+
+ + +
+
+ + + + + + + + + + + diff --git a/About/index.html b/About/index.html new file mode 100644 index 00000000..69c22fbc --- /dev/null +++ b/About/index.html @@ -0,0 +1,412 @@ + + + + + + + + + + + + About - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

About STACK

+

STACK is an online assessment system for mathematics and STEM, designed to enable students to answer questions with a mathematical expression, such as a polynomial.

+
+
+A STACK question giving specific feedback on a partially correct answer, including graphing the student's answer. +
STACK helps students learn from their mistakes through specific feedback.
+
+ +

Computer Algebra Support

+

STACK uses the Computer Algebra System Maxima to evaluate expressions.

+
    +
  • Mathematical answers: questions are not limited to multiple choice.
  • +
  • Randomise questions: so different students see different variants of a quiz.
  • +
  • Graphical support: make your questions stand out by integrating Maxima plots, JSXGraphs or Google Charts.
  • +
+ +

Validation of answers

+

Before answers are graded, students confirm their answer is interpreted correctly by the system. Invalid answers, like ones with mismatched brackets, are rejected.

+
    +
  • Fair: students are not penalised for poor computer skills.
  • +
  • Flexible: the teacher decides what a valid answer looks like.
  • +
+ +

Intelligent marking

+

Teachers write grading trees that mark answers based on mathematical properties, like "is it factored?"

+
    +
  • Specific feedback tailored to each student's answer.
  • +
  • Multipart questions with follow-through marking.
  • +
  • Give-example style questions with many correct answers.
  • +
  • Diverse question types involving scientific units, numerical accuracy, line-by-line reasoning and more.
  • +
+

Open-source

+

As an open-source project, users help improve STACK by adding features, translations, bug reports and more. Many users share STACK materials, for example through the ABACUS material bank. +
+Credits and contributionsABACUS material bank

+

Trusted user base

+

STACK is trusted by many respected institutions.

+
+ +
+ +
+ +
+ +
+ +
+ +


+More users

+ +
+
+ + + + + + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..3cb1a637 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +stack-assessment.org diff --git a/CaseStudies/2019/ABACUS/index.html b/CaseStudies/2019/ABACUS/index.html new file mode 100644 index 00000000..0427b39c --- /dev/null +++ b/CaseStudies/2019/ABACUS/index.html @@ -0,0 +1,421 @@ + + + + + + + + + + + + STACK for Engineering Mathematics and the Abacus Material Bank - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

STACK for Engineering Mathematics and the Abacus Material Bank

+

+

Aalto University

+

Antti Rasila, Guangdong Technion - Israel Institute of Technology

+

Abstract

+

Since 2006, Aalto University has been using STACK to run online assessments within their Engineering Mathematics courses. Initially, the University was running a STACK version developed in-house specifically for the University, but this was later merged back into the main STACK branch in version 3.0. After receiving funding, the material bank Abacus was created, with the purpose of helping institutions collaborate and share STACK questions. The project's agreement was written in a way that ensured question authors kept their copyright, while still encouraging collaboration. Abacus has 30 members and its courses cover most of undergraduate mathematics and many parts of physics.

+

Motivation

+

The MatTa group ("Matematiikkaa tietokoneavusteisesti"; "mathematics by using computers") was founded in 1990s by lecturer Emeritus Simo K. Kivelä at the Department of Mathematics and Systems Analysis at Aalto University, formerly known as Helsinki University of Technology. The purpose of the group was to investigate the use of computers and information technology to teach engineering mathematics. Initially, the projects involved, for example, using visualisations, multimedia and symbolic computation to make mathematical content more interesting and accessible for students. The group also produced a number of free Finnish language electronic lecture notes with interactive content and a substantial database of traditional pen and paper exercise assignments called Euler. In 2006, the group started to take interest in automatic assessment, as they believed computer-aided methodologies could achieve a practical impact in teaching activities there. There was also hope at the University that Computer Aided Assessment could reduce the number of students assistants required to grade homework, both to save cost and because a sufficient number of qualified graders was not always available. Initially, the group focused on the Maple T.A. system, however it was found lacking in several aspects. The most important of these were performance issues and an incompatibility with various browsers, in particular ones available for the Linux operating system. The high licensing fees were also a problem, as they could undo all the savings that the University hoped to achieve by using the system.

+

In spring of 2006, the group started gaining interest in STACK, which has an open source license. This license would allow the University to use its in-house software development skills to improve the platform where needed, and it would also guarantee that licence fees would not be imposed in the future. After deciding to use STACK, which was running its standalone version 1.x at the time, the group spent the summer of 2006 modifying the software to better suit the University's needs. This included replacing the rendering code of mathematical formulas to support browsers other than Microsoft Internet Explorer, translating the software to Finnish and a Shibboleth based integration with the Finnish national Haka single-sign-in system.

+

Implementing STACK

+
+
+ +
Figure: An interactive STACK question from Aalto University's "Multivariable Calculus" course, where students drag points along a contour line. +
+
+ +

After modifying the system, the University started testing STACK. The initial test was with the university's Basic Course in Engineering Mathematics KP3. A. Rasila wrote four STACK assignments for each week of the course, all of which were relatively simple questions involving numerical or algebraic input. The system had numerous small technical issues, but the students were generally happy with the system as evidenced both by student feedback and general usage statistics [1].

+

Encouraged by the positive results, it was decided to test the system more comprehensively to convince the teaching community that automatic assessment was worth of the effort in teaching engineering mathematics. It was important to show that the online assessment could be used by teachers with little programming skill, and that it would not cause a large increase in their workload. This was crucial for the long-term success of the project, as MatTa's previously developed materials were often only used by a handful of teachers, most of whom where developers themselves. Furthermore, the group needed to demonstrate that the system had real cost savings, as well as good learning outcomes compared to traditional types of assignments. The University set up an experimental course "Discrete Mathematics", where STACK would form a significant portion of the final grade [2]. Following the positive results of this course, the use of STACK began to spread at the University, and within three years, most basic courses in Engineering Mathematics at Aalto University were using STACK.

+

STACK Developments

+

A key ingredient in the success of STACK at Aalto University were the in-house developments by programmer Matti Harjula, also wrote his Master’s Thesis on this work [3]. His initial work included analysing the data of the first 2006 experiment and further developing the system to address any shortcomings. His project was successful, as it led to a system that many lecturers at the department were willing to use, and no major issues were identified in the subsequent use of the system.

+

However, it also led to a new problem. Independently from Aalto University, the British STACK developers had been developing STACK 2.0, which was very different from the 1.x series Aalto University had been using for their work. The in-house developments by Aalto University were not easily implemented into STACK 2.0, but merging the Aalto University code back into the trunk of STACK was still necessary for a number of reasons. Firstly, a unified code base would speed up the overall development of STACK, and the Department at Aalto University did not intend to permanently commit many resources to maintaining the system. Secondly, there was interest from other Finnish universities to try the system, however they preferred to use the “official” British version of STACK, which would prevent them from using the materials developed at Aalto University. Because of this, the Finnish and British developers agreed to join forces in combining their work into STACK 3.0. During the STACK 3.0 merge, experimental features of STACK were also being added to the Aalto University version, as documented in section 7.8 of [4]. These features were related to several pedagogical ideas, detailed in [5,6,7].

+

Creating Abacus

+

There were two key advancements in 2015. Firstly, STACK 3.0 was completed and Aalto University had finalised their plans to the deploy the system as a replacement to their old in-house version. Since the University was now using the official STACK version, it was easier to collaborate with other Universities on STACK material. Secondly, the consortium of the seven Finnish technology universities called for proposals in developing collaborative practices in education. A draft proposal for joint development of electronic materials for mathematics education was proposed and selected as a pilot project with over half a million euros of funding. A. Rasila was chosen as the national coordinator of this project, which become known as the Abacus consortium [8].

+
+
+ +
Figure: The Abacus logo. +
+
+ +

Abacus is a database of teaching materials, mainly STACK questions, covering most basic topics in undergraduate mathematics. Its mission statement is to help lecturers find high quality and free learning materials, achieved through facilitating the sharing of online teaching resources between institutions. National and international collaboration is at the heart of the project, as it helps standardise the platform, minimise the necessary contribution of each institution and contribute to the overall market share of the platform. Language differences between courses is not a concern, since adding translations to individual questions are almost trivial compared to the expense of actually programming the mathematics e-content.

+

In drafting the initial consortium agreement, Abacus drew from two other related projects, namely a 2009 e-learning collaboration project with the Bavarian Virtual University VHB, which was funded by the later discontinued Finnish Virtual University, and the MatTa material bank Euler.

+

Fair Use

+

In projects largely developed through public and institutional funding, fair use is a common problem. Some partners may feel they are contributing more than the rest, and hence will not be interested in collaboration and instead push for in-house development. Furthermore, collaborators who develop materials without being paid are often unhappy when someone else makes even minor monetary gains from their work, which has led to a widespread use of non-commercial licenses for academic work. While understandable, these restrictions hinder the acceptance of platforms like Abacus, and lead to divisions in the community. Furthermore, non-commercial licenses can be confusing, as the exact nature of commercial activity is not clearly defined in academia. For example, is "free" work done by a salaried lecturer commercial use? Finally, it can be necessary for institutions to share the sources of assignments due to international differences in notation, course content and language. On the other hand, a pure open source model is not particularly attractive for e-assessment materials, since students should not be able to search online for the teachers' answers.

+

To solve these problems, the Abacus consortium agreement was written such that there are no strict legal restrictions on what kind of institutions can join the consortium or what kinds of materials can be included. The materials are shared in a way such that each partner gets substantial rights to develop them based on a license similar to open source, but is not allowed to share the source code with third parties. The original developers retain their copyright of the materials and are allowed to give them other licenses besides the one required by Abacus. Since new members are reviewed by the consortium's steering group and are required to make a one-time contribution to the consortium, the agreement encourages collaboration and guarantees that existing partners benefit from the growth of the consortium.

+

Outlook

+

As of July 2019, the Abacus consortium consists of 30 members, 17 of which are from Finland, as well as three from Estonia and two from both Germany and Norway. Other countries present in the consortium are China, France, Ireland, Portugal, Ukraine, and the United Kingdom. There are ongoing discussions with several other potential partners, mainly from Europe. The database currently contains problem assignments for most bachelor level courses in mathematics, as well as a substantial number of physics assignments. Although Abacus accepts contributions in any language, most materials are available in English. Translations of the remaining Finnish-only materials are ongoing, and are expected to be completed in 2020.

+

References

+

[1] A. Rasila, M. Harjula, and K. Zenger. Automatic assessment of mathematics exercises: Experiences and future prospects. In ReekTori 2007: Symposium of Engineering Education, 70-80. Helsinki University of Technology, Finland, Teaching and Learning Development Unit, http://www.dipoli.tkk.fi/ok, 2007.

+

[2] A. Rasila, L. Havola, H. Majander, and J. Malinen. Automatic assessment in engineering mathematics: evaluation of the impact. In ReekTori 2010: Symposium of Engineering Education. Aalto University, Finland, Teaching and Learning Development Unit, http://www.dipoli.tkk.fi/ok, 2010.

+

[3] M. Harjula. Mathematics exercise system with automatic assessment. Master's thesis, Helsinki University of Technology, 2008.

+

[4] C. J. Sangwin. Computer Aided Assessment of Mathematics. Oxford University Press, Oxford, UK, 2013.

+

[5] H. Majander and A. Rasila. Tutkimus suuntaamassa 2010-luvun matemaattisten aineiden opetusta, Experiences of continuous formative assessment in engineering mathematics, 197-214. Tampereen yliopistopaino Oy - Juvenes Print, 2011.

+

[6] A. Rasila, J. Malinen, and H. Tiitu. Automatic assement and conceptual understanding. Teaching Mathematics and its Applications, 34(3):149-159, 2015.

+

[7] T. Pelkola, A. Rasila, and C. J. Sangwin. Investigating Bloom's learning for mastery in mathematics with online assessment. Informatics in Education, 17(2), 363-380, 2018.

+

[8] A. Rasila. E-assessment material bank abacus. In Proceedings of EDILEARN16, 8th Annual International Conference on Education and New Learning Technologies, July 2016.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/Adaptive/index.html b/CaseStudies/2019/Adaptive/index.html new file mode 100644 index 00000000..f28116c7 --- /dev/null +++ b/CaseStudies/2019/Adaptive/index.html @@ -0,0 +1,463 @@ + + + + + + + + + + + + Adaptive Self-learning Exercises - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Adaptive Self-learning Exercises

+

Ruhr-Universität Bochum

+

Michael Kallweit

+

Abstract

+

At the Ruhr-Universität Bochum, students from all disciplines are offered digital mathematics tasks in an e-learning course for self-study in order to prepare and revise. These questions make intensive use of the randomisation and differentiated feedback options of the STACK question type. Some tasks have been supplemented by adaptive exercises, which guide the students through complex tasks. These adaptive tasks have had great success, are shown to have the same level of student engagement as paper-based tasks and be a better predictor of exam performance.

+

Introduction

+

At the Ruhr University Bochum, digital exercises have been used in courses at the Faculty of Mathematics since 2011, and since 2013 this has included STACK. In 2015, a cross-curricular e-learning course was set up, in which students can repeat and process selected topics for exam preparation by themselves. The course takes advantages of Moodle's gamification features: students gain points for engaging with quizzes, contributing to a "level". They also earn badges for completing material in a short time or with a high mark. Additionally, students have access to digital tutorial support.

+

In addition to these features, the University wanted to add learning exercises that adapt to students' needs.

+

Motivation

+

In online assessment, weekly digital exercises are often done in "examination mode", that is, where students complete tasks in a given timeframe without interacting with the teachers in the meantime. Normally students are only allowed one attempt at the question, and differentiated feedback is only available for the students after the deadline. However, experience shows that students rarely use the detailed written feedback provided and are satisfied with just seeing their score. This observation is consistent with the students' responses to manually graded paper-based homework.

+

Additionally, often valuable reflective loops that promote learning are omitted. As highlighted by Hattie's meta-analysis [2 and 3], it is important to increase students' interactivity with the feedback on their solutions. According to [4], good feedback should show concrete possibilities of how gaps in skills can be closed by students.

+

Contrast this with tutorial lessons, where teachers often help students find a solution path. In the form of minimal assistance, teachers will intervene to help students achieve steady progress in dealing with a problem. If the students take an erroneous path to a solution, the teacher not just corrects the error, but will instead take the student on the path through the task. After being steered on the right path, the student will often fix the error by themselves. This procedure is known as instructional scaffolding: with just minimal support from the teacher, the students can master the individual tasks themselves, and can actively reflect on difficulties and mistakes during the process to close gaps in their knowledge.

+

The developers at Ruhr-Universität Bochum wanted to bring this concept to online assessment: to build an online assessment system that can carry out instructional scaffolding to help students find a solution path. STACK was ideal for this, as its features in providing specific feedback depending on the properties of students answers provide a great foundation for an adaptive system.

+

Adaptive self-learning approach

+

Instead of being confronted by a teacher in a tutorial group, students can process adaptive digital self-learning tasks. Following the above principles, students follow an adaptive path of intermediate step tasks in small steps after submitting an incorrectly answered task. The intermediate steps focus on concrete knowledge and skills that must be combined to solve the original task.

+

The adaptive methods were tested in entrance exams at secondary level II schools, through diagnostic error analysis tools [5,6,7]. The goal of this was to isolate the underlying errors behind why students incorrectly process digital tasks. Using digital tasks with STACK and a complex composition of digital tasks, the researchers achieved a considerable error detection rate of about 90%.

+

Development of adaptive self-learning tasks

+

Adaptive self-learning tasks follow the scaffolding principle. The error analysis and subsequent presentation of intermediate steps take place within the potential response trees of a STACK question, and offer added value compared to traditional digital tasks:

+
    +
  • In contrast to tasks in "examination mode", students actively deal with difficulties and errors. These are independently overcome by support in small steps and aim at a lasting learning success and increased motivation.
  • +
  • Even with randomized STACK tasks, intermediate exercises refer to the task set at the beginning. A reference to the initial problem remains visible along the entire learning path.
  • +
  • There are no limits on the design and variety of adaptive paths through the task. With each intermediate step, the next step can be selected on the basis of the student's individual input.
  • +
  • The individual paths through the task are included in the source code of the individual STACK task, which allows questions to be easily shared between courses.
  • +
  • The STACK Response Analysis Tool gives teachers insight into the paths taken by students.
  • +
+

Technical implementation

+

Moodle currently only offers limited possibilities for adaptively designing a sequence of tasks in tests. Hence, the adaptive tasks were introduced at the level of individual STACK questions. For each question, the potential response tree analyses the student's solution, and if they have made an error, shows a link to the starting point of an individual path. By including an externally stored Javascript file, the next intermediate step exercise becomes visible only by clicking on a button. The analysis of the input for this intermediate step is also stored in a response tree which adaptively defines the subsequent tasks. By repeating steps and integrating additional ones, the adaptive procedure can simulate real tutorial support.

+

Example

+

The following elementary example for matrix multiplication illustrates the central principles of the adaptive task format:

+
+
+An adaptable question about matrix multiplication. +
Figure: An adaptable question about matrix multiplication. +
+
+ +

If the input of the solution is incorrect, the student is informed that they can work on the task again in guided intermediate steps via the "Weiter" ("Next") button.

+
+
+The feedback shows the student got the answer wrong, and they have the option to go through the problem again, step-by-step. +
Figure: In the feedback, students may be told to work through the problem again, step-by-step. +
+
+ +

The first intermediate step then opens directly below the actual task, in this case asking students to identify the rule that is used when calculating matrix products. Subsequent steps will be available each time a step is correctly completed and the student clicks "Next"

+
+
+1A. The student is first asked which calculation rule is used for matrix multiplication. +2A. The student is asked to calculate a single entry in the matrix. +2B. The student is given the explicit calculation for the previous coefficient, and asked to complete it. +
Figure: The three intermediate problem-solving steps for this question about matrix multiplication. +
+
+ +

The entire adaptive path with all intermediate step tasks has the following structure.

+
+
+An overview of the adaptive path. If task is wrong, go to 1. intermediate step: selection of correct multiplication rule. If correct, go to 2: calculation of entry C11. If wrong, go to additional step: evaluation of an arithmetic expression. If correct, go to calculation of entry C31. +
Figure: An overview of the adaptive path for the matrix multiplication question. +
+
+ +

It is also possible to ask students to make a decision about which direction they want to take.

+

Branches at which students make decisions about which direction they want to take are also possible. Overall, the feedback can be structured in a variety of ways according to Zech's hierarchy levels, with a focus on motivation, strategy or content help [8].

+

Results

+

When comparing the University's new online assessment to their old, multiple-choice based system, several improvements become apparent. In multiple choice questions, you can only have a finite number of "distractors", but in STACK you can give feedback on an unlimited number of answers. In particular, the developers compared a question about expanding (2x+3y)^2, and found that while the old system had only 9 distractor options, the STACK system had registered 41 different answers over its lifetime, which could be grouped into 28 different types of mistakes. This is a major improvement on the number of mistakes students can receive specific feedback about.

+

Additionally, the developers wanted to compare the performance of paper-based and digital homework. Across all courses, they did not find any significant difference in how many tasks students complete between the two systems. This is encouraging; the University saves resources by not relying on human markers for homework, and this confirms that they have not lost any functionality or student engagement by moving towards online assessment. For the course "Mathematics for Chemistry", the correlation between paper-based homework scores and exam scores was found to be 0.56, but the correlation between online homework scores and exam scores was 0.63. Similar results were found for the other courses at the University. Hence, online quiz scores are a better predictor for exam scores.

+
+
+Correlation between weekly paper exercises and final exam scores are 0.58. The correlation between weekly online exercises and final exam scores are 0.65. +
Figure: Comparing both paper-based and online homework scores with exam scores, for the course "Mathematics for Chemistry". +
+
+ +

Challenges

+

One of the main challenges of STACK integration was keeping up with new versions. It was important to convince administrators that going through the trouble of updating STACK was worth it, as new updates and features could be important to question authors.

+

Additionally, there was a challenge in distributing the questions to new users, since Moodle's options for managing and distributing questions were found lacking. To solve this, a database for managing STACK questions in moodleXML files was created, which included more sophisticated search options. For each question, the system generates an overview pdf file with a short description, information on available languages, screenshots and an automatically generated overview of the potential response trees. About 700 questions are in the database, and because of its usability, it is easy to convince new users that it is simple to find good STACK questions.

+

Enablers

+

It was helpful to have a strong community of STACK users to help with projects. For example, one of the lecturers held a seminar to teach effective STACK usage to students training to become school teachers. The students of this class became a valuable community of STACK users willing to help with other projects. Additionally, it was valuable that STACK had been translated to German, as this allowed the University to easily spread STACK to other German institutions and build good partners.

+

What's Next?

+

The STACK courses at Ruhr-Universität Bochum continue to be improved on. Future additions may include using more sophisticated features in questions, such as equivalence reasoning inputs and interactive JSXGraph visuals.

+

References

+

[1] M. Kallweit and E. Glasmachers. Adaptive selbstlernaufgaben mit STACK. 2019.

+

[2] J. Hattie. Visible learning: A synthesis of over 800 meta analyses relating to achievement. Routledge, 2009.

+

[3] J. Hattie and H. Timperley. The power of feedback. Review of Educational Research, 77(1):91-112, 2007.

+

[4] D.J. Nicol and D. Macfarlane-Dick. Formative assessment and self-regulated learning: a model and seven principles of good feedback practice. Studies in Higher Education, 31(2):199-218, 2006.

+

[5] R. Bruder, N. Feldt Caesar, A. Pallack, G. Pinkernell, and A. Wynands. Mathematisches grundwissen und grundkonnen in der sekundarstufe ii. W. Blum et al. (Hrsg.), Bildungsstandards aktuell: Mathematik in der Sekundarstufe II, pages 108-124, 2015.

+

[6] M. Schaub. Einsatz des elementarisierenden testens im ein- und ausgangstest des online vorkurses vemint. Beiträge zum Mathematikunterricht 2018., pages 1567-1570, 2018.

+

[7] F. Zech. Grundkurs Mathematikdidaktik. Theoretische und praktische Anleitungen für das Lehren und Lernen von Mathematik. 1978.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/Edinburgh/index.html b/CaseStudies/2019/Edinburgh/index.html new file mode 100644 index 00000000..da4adc8e --- /dev/null +++ b/CaseStudies/2019/Edinburgh/index.html @@ -0,0 +1,638 @@ + + + + + + + + + + + + Institutional Support for STACK in Edinburgh - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Institutional Support for STACK in Edinburgh

+

+

University of Edinburgh

+

Interview with Chris Sangwin

+

Abstract

+

At the University of Edinburgh, online assessment has been consolidated with in-house support, mostly with STACK, for the majority of year one and two mathematics modules and for many other mathematics and general science courses. A dedicated learning-technologist post was created to help course organisers implement online assessment. Replacing the current online assessment with human marking is currently estimated to save the School over 6100 hours of work marking students' work each year.

+

Motivation

+

The School of Mathematics at the University of Edinburgh had, over the years, grown to use a number of separate online assessment systems. However, there was growing concern that using separate systems created a number of problems, for example students had to learn the syntax of many different systems. It was also problematic that students needed to purchase access to the online systems provided by publishers. At the same time, student numbers in the UK continued to grow [1], and there were growing expectations from students for more frequent formative assessment in their courses. This motivated the school to bring all assessments in-house with STACK.

+

Execution

+
+
+Give an example of a matrix with eigenvalues {-7,6}. A wrong answer is given, with feedback tailored to the student's answer. +
Figure: A typical Introduction to Linear Algebra question. +
+
+ +

STACK was first used in Edinburgh at a small scale for the Lothian Equal Access Programme for Schools (LEAPS) summer school in 2016. Following the success with LEAPS, STACK was used in larger courses such as Introduction to Linear Algebra, a year one module with over 600 students, in the 2016-17 academic year. The University's primary learning environment is Blackboard "LEARN", so students gain access to a dedicated STACK service via the LTI protocol through their normal LEARN pages.

+

Having identified the need for additional support, the School of Mathematics created a dedicated "Learning Technologist" post. The primary goal of this post was to transform existing (largely paper-based) problem sets into online assessments and to develop alternatives to existing external online assessments. The Technologist used the following process to transform these assessments.

+
    +
  1. +

    Before the year started, current forms of assessment were reviewed, and suitable STACK questions were written together with course organisers.

    +
  2. +
  3. +

    During the academic year, quizzes were made available, and their usage monitored.

    +
  4. +
  5. +

    When the year was over, this monitoring data was analysed and questions were updated where appropriate.

    +
  6. +
+

Creating online assessments is significant additional work, but once the quizzes have been created they require minimal work to maintain and can last for the lifetime of the course. Because of this cost-benefit relationship, employing a Learning Technologist has been an effective strategy in ensuring change actually took place.

+

Results

+

In 2019, many courses have online assessments using STACK. A course will typically have weekly or fortnightly assessment, many using a combination of flipped classroom "reading quizzes" (RQ), formative "practice quizzes" (PQ) and summative "assessed quizzes" (AQ). Some courses also make an optional mock online exam available to students. The following table provides an overview from the 18/19 year, including the number of students, how often quizzes were given out (per week W or semester S), the average number of questions per quiz (#Q/quiz) and the total number of questions (#Qs).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
YearCourseStudentsQuizzes#Q/quiz#Qs
1Introduction to Linear Algebra6042 RQ/W2-3
1 AQ/W6-8110
1Calculus and its Applications5941 RQ/W4
1 AQ/W10150
1Proofs and Problem Solving3441 RQ/W220
1Engineering Mathematics 1a3933 PQ/W5
Mathematics for Natural Sciences 1a1381 AQ/W7-10240
1Engineering Mathematics 1b4013 PQ/W3-5
Mathematics for Natural Sciences 1b1361 AQ/W7-10200
1Mathematics for Physics 11935 AQ/S525
1Mathematics for Physics 22025 AQ/S630
1Fundamentals of Algebra and Calculus1135 PQ/W10-20
3 AQ/W6-12950
2Probability3121 AQ/W3-536
2Several Variable Calculus and DEs2871 PQ/W5-12
1 AQ/W5-10180
3Honours Algebra2029 AQ/S1-846
3Combinatorics and Graph Theory602 RQ/W2
4 AQ/S1-645
3Symmetry and Geometry361 AQ/W4-745
4Galois Theory271 RQ/W222
PGFundamentals of Optimization1903 AQ/S4-816
PGIntroduction to Probability and Statistics231 PQ/W6-8
5 AQ/S462
+
Table: Courses using STACK assessments at The University of Edinburgh 2018-19.
+ +

Cost

+

Over the course of this project, the Learning Technologist estimates that developing a fully functioning quiz of 8 questions took about two person-days, or 16 hours of work, to create. As an example, consider the large first-year course "Introduction to Linear Algebra", with around 600 students in 65 tutorial groups. Replacing half of the weekly hand-ins with online assessments has saved each tutor over one hour of marking per week. Hence, over 65 hours of work is saved each week as a result. In addition, the students now complete more than double the number of practice problems, providing them with enhanced formative feedback which would be impossible to resource otherwise. Since online quizzes can be reused each year, this will be a consistent saving for as long as the course remains.

+

Overall, it is estimated that STACK saves the University over 6100 hours of work each year [2].

+
+
+The James Clerk Maxwell Building, with students walking. +
Figure: Many School of Mathematics courses are taken at the James Clerk Maxwell Building. +
+
+ +

Barriers

+

The goal was to have the first 4-6 weeks of quizzes ready before the beginning of a semester. However, as the term progressed, it was not unusual for the last few quizzes to be ready only "at the last moment". This did not give the question authors a lot of time to review their questions, but does reflect the realities of teaching.

+

It was also important that the course organiser were fully involved in the authoring process. They had to give clear and explicit guidance on the learning objectives and help review the mathematical content.

+

Finally, when working with large question banks, organising became difficult. Large Moodle question banks are tricky to browse, and maintenance becomes tedious when questions are duplicated between similar courses.

+

Enablers

+

The most significant factor in the success of this project was the dedicated Learning Technologist post. This was essential, as it assured course organisers had practical support, and that online quizzes could have a consistently high level of quality.

+

It was helpful to be able to work closely with STACK developers when designing quizzes, in a way that is difficult with non-open-source programs. For example, the "numerical" input type which helps students enter answers at a pre-specified level of numerical accuracy, was designed to help cope with the difficulties of assessing vague student answers in statistics questions [3].

+

What's Next?

+

The School of Mathematics continues to expand the use STACK at the University of Edinburgh. Future challenges involve modifying STACK to suit more conceptual courses, such as group theory and real analysis, as well as expanding into statistics and computer programming using the CodeRunner system [4]. There are also plans for wider use of STACK in summative assessments, with the possibility of using it in online examinations.

+

References

+

[1] Patterns and trends in UK higher education 2018. Universities UK, September 2018. ISBN: 978-1-84036-409-5.

+

[2] C. J. Sangwin and K. Zerva. Developing online learning materials to support undergraduate education at the University of Edinburgh. Mathematics Today, 2019.

+

[3] K. Zerva. Developing STACK assessments in Edinburgh, 2017-2019. In Contributions to the 1st International STACK conference 2018 in Furth, Germany. Zenodo, 2019.

+

[4] R. Lobb and J. Harlow. Coderunner: a tool for assessing computer programming skills. ACM Inroads, 7(1):47{51, March 2016.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/FAC/index.html b/CaseStudies/2019/FAC/index.html new file mode 100644 index 00000000..8fa32f9a --- /dev/null +++ b/CaseStudies/2019/FAC/index.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + Developing a Fully Online Course - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Developing a Fully Online Course

+

+

The University of Edinburgh, UK

+

Interview with George Kinnear and Richard Gratwick

+

Abstract

+

STACK is used in the completely online course "Fundamentals of Algebra and Calculus". The course is designed to prepare students for Higher Education (HE) study at the University of Edinburgh, where incoming students have a wide range of mathematical backgrounds. The main barriers were the risk of students using online answer engines to answer questions, and the lack of community. The organizers attempted to address this by clever question design and creating "autonomous learning groups". The course was enabled by University support, both in the form of a dedicated learning-technologist post and assistance from colleagues. Subsequent diagnostics test results indicate this course was successful.

+

Introduction

+

Approximately six hundred students typically study first-year mathematics courses at the University of Edinburgh. They have a wide range of mathematical backgrounds and attainments. "Fundamentals of Algebra and Calculus" (FAC) was introduced as an additional course, approximately covering SQA Advanced Higher Mathematics and A-Level Further Mathematics, to address the needs of this diverse group. Since +some incoming students do not have the chance to take these higher qualifications before coming to university, the course fulfils a role as part of the University’s Widening Participation strategy, enabling access to mathematics courses for a wider range of students, e.g. students admitted through contextual admissions. This also was an attempt to address a concern from the University that one reason for undergraduate non-continuation was a lack of preparation for the mathematical components of students’ degree programmes, particularly those students on non-mathematics degrees within the College of Science and Engineering. Increasingly, the second-semester year 1 "Calculus and its Applications" course had been adapted to address these problems. However, staff and students felt that it recently contained too much material. FAC aimed to relieve some of the pressure on this course.

+

FAC was delivered as a completely online course to make it scalable, since the above issues are not unique to the School or the University. FAC plays a role in addressing the so-called “mathematics gap” of attainment, preparing students from a wide range of mathematical backgrounds for HE study, and as such could easily see demand both across the University and beyond.

+

Why Use STACK?

+

FAC is essentially a course in mathematical techniques, assessing routine computation. STACK precisely lets teachers assess such questions automatically and give tailored feedback to students. Quite sophisticated questions can be implemented, for example “give an example” type questions, asking students to provide examples of e.g. a quadratic with given roots, or a sequence with certain monotonicity or boundedness properties. These are important for "retrieval practice", that is, encouraging students to recall previous topics.

+

Execution

+

The course is worth 10 ECTS credits, and consists of approximately 200 hours of work for the student. The course is delivered in ten weekly units, each comprising a number of quizzes intended for students to work through during that week. Each week ends with a 90-minute "Practice Quiz" the student can take an unlimited number of times, and a 90-minute "Final Test" only allowing one attempt. The test is either given a grade of fail (0-80%), mastery (80-95%) or distinction (95%-100%). The high pass mark encourages students to master a topic before moving on. The final grade is determined by combining the results of the 10 "Final Tests" (worth 80%) with a final 2-hour test covering the whole course (worth 20%).

+

The development involved a substantial up-front time investment: writing the material in these quizzes, including over 900 STACK questions. Although some existing questions were borrowed from other courses, the majority of these questions were authored from scratch. The quizzes interleave textbook-style exposition with videos of worked examples, interactive applets and practice questions, and as a result, the questions have a polished and varied look. Two lecturers were involved, each responsible for five units, with final cross-checking and occasional extra contributions.

+

Research

+
+
+A question where students give examples of functions and their derivates +
Figure: A FAC question aimed at both retrieval practice and building a strong example space.
+
+

The design of the course was heavily influenced by educational research. Firstly, the course uses "faded worked examples", that is, presenting a sequence of problems with different amounts of the solution already worked out. For example, a topic might begin with a full worked solution of a problem, followed by a worked solution with the final step as a STACK input, followed by a worked solution with the last two steps as STACK input, and so on. There is evidence that this is helpful for students [2].

+

Additionally, given the literature on the importance of "retrieval practice" [3], FAC gives plenty of chances for students to recall what they have learned, for example by having quizzes draw on skills from previous weeks. Weeks alternate between algebra and calculus, spacing out practice of the two topics.

+

Furthermore, the lecturers decided not to make feedback for the final tests available to students until after the deadline, since there is evidence suggesting delaying feedback is helpful for learning [5].

+

Finally, FAC gives students a chance to create strong "example spaces" [4], that is, sets of examples that a student can recall for a given topic. Example spaces are developed through "give-an-example" style questions, which are easy to write in STACK.

+

Visuals

+

FAC uses a lot of graphs and interactive applets to make questions visually appealing. Visual intuition is an important part of learning about functions, so it is appropriate for graphical components to play a significant part in this course. FAC uses both JSX graphs (which can be coded directly in STACK) and external plugins, like GeoGebra. The advantage of JSX graphs is that they are self-contained; there is no need to worry about changes to external programs, or licensing rights. There is, however, a large cost-benefit analysis to consider. JSX graphs are time-consuming and have a steep learning curve, while external applets are often quick to set up and have simple drag-and-drop features.

+
+
+A question with an automatically rendered graph of a parabola +
Figure: FAC uses graphs and other visuals to aid learning.
+
+ +

Results

+

The six hundred students taking the first-semester year 1 "Introduction to Linear Algebra" course sat a +diagnostic test (also delivered through STACK) in September 2018. In January 2019, the students sat the test again with the same questions but different random variants. In the September test, students also enrolled on FAC scored on average fifteen percentage points lower than their peers. This is not surprising; FAC will have been recommended to students who felt like they needed more practice in mathematics fundamentals. However, in January after studying FAC, they had gained these fifteen percentage points and were scoring in line with their peers. This is quantitative evidence that FAC has done exactly what was hoped: removed the discrepancy in attainment between the two groups of students.

+

The lecturers also wanted to know if taking FAC had improved student performance in other maths courses such as "Introduction to Linear Algebra" (ILA) and "Calculus and its Applications" (CAP). Of students scoring similarly in the September diagnostics test, students who took FAC were scoring better than their peers in online quizzes for CAP. They also scored at a similar level to students who did not take FAC in the exams for ILA and CAP.

+
+
+Visual showing how diagnostic results improved for students taking FAC. The average diagnostic test score for students who did not take FAC improved from 76.1 to 78.1, and those who took FAC improved on average from 62.1 to 77.4 +
Figure: Diagnostic results in September (pre) and January (post).
+
+ +

Challenges

+

While it is true that authoring a simple STACK question is ultimately straightforward, there was nonetheless a technological hurdle to be cleared. One lecturer was entirely new not only to STACK, but to Maxima and any form of online assessment, and therefore was confronted with quite an intimidating prospect. However, they ended up authoring hundreds of questions without trouble, and are now confident in undertaking significantly more demanding questions. This hurdle was easier to overcome given STACK requires no programming expertise.

+

The lecturers were mindful of the possibility that students could be working through assessed quizzes in one browser tab, with a tool like WolframAlpha open in another. While ultimately this does no benefit to the student, and it remains their responsibility to ensure submitted answers are their own work, the potential of this kind of abuse should be minimised. This just required a bit of cunning at the level of question-setting: turning “find the derivative of this given function at this given point” into “at what point is the value of the derivative of this given function this given number?”

+

The limitations of an online course include the difficulties of forming meaningful staff-student and student-student interaction. The lack of real staff-student interaction made it hard to gauge whether the level and volume of material was suitable – anecdotal feedback indicates this was misjudged in at least one of the weekly units. Student-student interaction is important to foster a sense of community. This was addressed by setting up “autonomous learning groups” in which the students could study, in person, once a week, without staff input. Furthermore, students could ask questions in the online forum Piazza, and get in-person help in the MathsBase study room if needed.

+

Enablers

+

The University had created a dedicated learning-technologist post to help design the online assessment and write STACK questions. Their work was invaluable for authoring some of the questions, often given only a one-line sketch of the desired question.

+

The capacity in STACK to clone questions and export questions from other courses was also very useful, making it possible to produce multiple related questions, sharing, for example, a grading structure, without duplicating any work.

+

Finally, it was an advantage that there is substantial “in-house” support at the University, since STACK is now used across the entire first-year curriculum and increasingly beyond. Hence, there are a number of members of staff with experience of authoring questions, and the students are familiar with it.

+

What's Next?

+

A lot of data has been collected in FAC's first year. Quiz responses will be analysed to determine if any questions should be modified. There are also plans to have interviews with students on the effectiveness of the course, which will help identify areas that need work.

+

The course organiser will be looking at improving the "autonomous learning groups". Since groups were given weekly tasks and asked to upload solutions to a shared Dropbox, the lecturers can see how much students interacted with these groups. Initially, the engagement was very strong, but half-way through the course, a lot of groups seemed to stop meeting. The course organiser will look at ways to improve turnout for these groups.

+

The course continues to be worked on. The lecturers are considering options for more interactive questions, for example using equivalence reasoning to assess line-by-line arguments, or interactive JSX graphs that ask a student to, for example, "drag a vector so it is perpendicular to another vector".

+

The success of FAC paves the way for similar methods to be used in different courses. Other schools have shown interest in creating similar online courses, and some students may find it helpful to have an online course teaching even less advanced maths.

+

References

+

[1] George Kinnear. Delivering an online course using STACK. In Proceedings of the STACK Conference, 2018.

+

[2] A. Renkl, R. K. Atkinson, U. H. Maier, and R. Staley. From Example Study to Problem Solving: Smooth Transitions Help Learning. The Journal of Experimental Education, 70(4):293-315, 2002.

+

[3] H. L. Roediger and A. C. Butler. The critical role of retrieval practice in longterm retention. Trends in Cognitive Sciences, 15(1):20-27, 2011.

+

[4] P. Goldenberg and J. Mason. Shedding light on and with example spaces. Educational Studies in Mathematics, 65(2):183-194, 2008.

+

[5] H. G. Mullet, A. C. Butler, B. Verdin, R. Borries, and E. J. Marsh. Delaying feedback promotes transfer of knowledge despite student preferences to receive feedback immediately. Journal of Applied Research in Memory and Cognition, 3(3):222-229, 2014.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/FlickInterface/index.html b/CaseStudies/2019/FlickInterface/index.html new file mode 100644 index 00000000..05ab617e --- /dev/null +++ b/CaseStudies/2019/FlickInterface/index.html @@ -0,0 +1,475 @@ + + + + + + + + + + + + A Flick Interface for Maths Input - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

A Flick Interface for Maths Input

+

Graduate School of Informatics, Nagoya University, Japan

+

Yasuyuki Nakamura

+

Sangensha LLC., Japan

+

Takahiro Nakahara

+

Abstract

+

Typing mathematical expressions into mobile devices can be time-consuming. To solve this problem, developers at Nagoya University are developing a "flick interface" for STACK, similar to the popular Japanese keyboard mode. Students can pick a common integer or variable and flick in a direction to quickly turn, for example, into . A survey of usability suggests students prefer this input type to their traditional keyboard.

+

Motivation

+

As smartphones become increasingly used in schools and universities, it is important to find a reliable way to input mathematical expressions. Inputting mathematics on a computer is not a problem, but on smartphones and other mobile devices it can be much more time-consuming. For example, to type an answer to the question "Expand (x+2)(x+3)", students have to enter the expression x^2+5*x+6 into the answer space. On a mobile device, this requires several switches between the alphabetical and numerical views of the keyboard, resulting in 19 key touches for this simple answer.

+

Recently, a flick keyboard for Japanese characters has become very popular in Japan, especially amongst young students. Japanese has three character systems. Hiragana is mostly used for simple and native Japanese words, katakana mostly for foreign words and kanji for all other words. The keyboard shows only a limited number of hiragana[^hiragana] characters, but students can hold and "flick" on a key to choose a similar character. Characters are grouped together by sound, for example grouping together na, ni, nu, ne and no. The keyboard will then suggest related kanji and/or katakana characters that share similar sounds. It was the popularity of this keyboard that motivated the developers to create a similar interface for inputting mathematics, as a STACK input type.

+

Execution

+
+
+A STACK question is answered using a mobile keyboard. '2' is held down, displaying options for '2 to the power of', '2y', 'something to the power of 2' and '2x'. +
Figure: The flick interface in action. +
+
+

The flick interface was developed by Yasuyuki Nakamura and Takahiro Nakahara, funded by a grant from the Japan Society for the Promotion of Science. Like the Japanese character keyboard, students are faced with a small set of common inputs. Students can switch between numerical values and common variables by pressing "123" and "xy", respectively, or see a full keyboard view by clicking the keyboard logo. Pressing on a number reveals some common manipulations, and students can then flick in one direction to turn, for example, "2" into "2x". The input is compatible with normal keyboards, and will automatically be selected for the type of device being used.

+

The interface is programmed in JavaScript to minimise the dependency on mobile device operating systems. The interface uses MathDox to describe expressions, and the input is then converted to the Maxima format by a conversion filter previously created by the developers. Developing an interface suitable for all different screen sizes was one of the biggest challenges of the project, but now the interface is suitable for most devices of sizes around 5-6 inches.

+

Results

+

The flick interface is estimated to significantly reduce the number of keypresses required to type an expression. The following table shows an estimated comparison for a few common expressions [1].

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Mathematical expressionDirect input tapsFlick input taps
+ +198
+ +3613
+ +237
+
Table: A comparison of the number of taps needed to type an expression. +
+ +

To analyse the usability of the interface, the developers conducted a usability test at Nagoya University, Japan. 29 students where asked to enter five common maths expressions by using both a traditional keyboard and the new flick input keyboard. After they entered these math expressions, they were given a survey on usability and satisfaction levels. The survey questions were based on the following five parameters, originally from Jakob Nielsen’s five goals of usability [2]: learnability, efficiency, difficulty or ease in making corrections, rememberability, and the intent to reuse. For each parameter, students were asked to give each input type a score from 0.0 to 5.0. The following table shows the results [1], including both the averages, as well as the standard deviations in parentheses. The survey suggests that the usability and satisfaction levels are higher when the flick input method is used to enter mathematical expressions, rather than the direct input method.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QuestionDirect input scoreFlick input score
It is easy to learn how to input math.3.0 (1.2)3.5 (1.0)
I can input math quickly and easily.2.6 (1.1)3.2 (1.3)
It is not confusing and easy to correct.3.0 (1.2)3.1 (1.1)
I remember the method that I learnt at the rehearsal.3.0 (1.1)3.1 (1.1)
I will use this method to input math the next time2.9 (1.3)3.2 (1.4)
+
Table: Responses from the interface survey. Standard deviations are given in parentheses. +
+ +

What's Next?

+

The next step for the developers is to merge the flick interface into STACK as a new input type. This will include refactoring the flick interface code and working with STACK developers to best implement it into the question type.

+

References

+

[1] Y. Nakamura and T. Nakahara. A new mathematics input interface with flick operation for mobile devices. 15(2), 2017.

+

[2] J. Nielsen. Usability Engineering. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1993.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/ILIAS/index.html b/CaseStudies/2019/ILIAS/index.html new file mode 100644 index 00000000..32c4bd01 --- /dev/null +++ b/CaseStudies/2019/ILIAS/index.html @@ -0,0 +1,411 @@ + + + + + + + + + + + + Technical Integration of STACK Into ILIAS - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Technical Integration of STACK into ILIAS

+

+

Innovation in Learning Institute

+

Interview with Fred Neumann and Jesus Copado

+

Abstract

+

STACK was integrated into the ILIAS learning management system to support projects for learning content. This was done by creating an integrated question type directly in ILIAS. The biggest challenges were decoupling the dependencies on Moodle, and an increasing number of user queries following a quickly growing community.

+

Motivation

+

ILIAS is one of the most popular Learning Management Systems (LMS) used in German universities. It has been available under an open-source license since 2000, and since then has grown in popularity in a number of countries, especially Germany and Switzerland. In the last decade, the ILIAS community started a special-interest group related to mathematical assessment. The main driver for this was the "optes" project, a federally funded project to create open learning content for mathematics and natural science. It was key for this project to have a sophisticated question system that uses CAS to evaluate students' input. In 2013, the group compared different systems for CAS based questions and finally decided to use STACK.

+

STACK was initially built for the learning management system Moodle, and it would not be trivial to implement STACK into ILIAS. A crowd funding initiative was started to port the STACK plugin from Moodle to ILIAS, and the Innovation in Learning Institute at the Friedrich-Alexander-University Erlangen-Nuremberg (FAU) was asked to implement and maintain it. This would also be an advantage to FAU, as it could then establish STACK as an innovative element of e-learning and e-assessment at the University.

+

Execution

+

It was important to create an integrated question type that works like all the others in ILIAS, instead of trying to dynamically connect a separate STACK platform to ILIAS. Initially, a 2-day meeting with lead STACK developer Chris Sangwin was held at Loughborough University in December 2013, where the basic architecture and principles of the question type were laid out. In the following months, the ILIAS question type was created.

+

The developers set up a Moodle installation with STACK, examined the code and analysed how it works. Then the ‘library-like’ Moodle core was extracted and integrated into the template of an ILIAS question plugin. The techniques used followed the open source nature of STACK and were supported by the fact that STACK uses the same technology (PHP/mySQL) as ILIAS.

+

Initially, the only way to add questions was to create them in Moodle, then import the moodleXML file into ILIAS. However, authoring provisions and an authoring interface were later created in ILIAS, using the GUI classes.

+

Results

+

From the beginning, the ILIAS community has shown a great interest in using the integration of STACK. To date, nine separate institutions have participated in the crowd funding of the plugin. Over time, several workshops have been organized by the community. A German user manual and workshops to teach the creation of STACK questions was created at FAU and ported to an online module by the University of Göttingen. In 2018, the first international STACK conference was held at the Innovation in Learning Institute, bringing together around 65 participants from the Moodle and ILIAS communities.

+

As hoped, STACK is now being used extensively at FAU for innovative e-assessment. The ILIAS installation at FAU contains around 3000 questions from over 100 different authors. Additionally, a local ‘STACK user group’ was founded with 40 members from various disciplines, including mathematics, natural sciences, engineering, and economics.

+

Based on external and internal funding, it is possible to permanently provide new major versions of the plugin for each major ILIAS release every year, as well as several minor bug fix versions in between. The core of STACK used by the plugin is also updated every year. The ILIAS questions are fully compatible with the Moodle version and can be exchanged between the two Learning Management Systems through the moodleXML format.

+
+
+A typical ILIAS question about simplification. +
Figure: A typical ILIAS question about simplification.. +
+
+ +

Challenges

+

The biggest challenge for the initial integration of STACK into ILIAS was the decoupling of all dependencies from Moodle in the STACK core. Currently, around 50 patches are maintained for that. Furthermore, there were major differences in ILIAS and Moodle regarding the definition and display of feedback and various test player options. The completely different GUIs of Moodle and ILIAS meant the whole authoring interface of STACK had to be redesigned.

+

When the community of STACK users in ILIAS grew, the number of bug reports related to exotic edge cases of STACK usage also grew. This could, for example, be issues relating to questions with a huge number of inputs. Furthermore, an increasing community of users brought in very different opinions about the styles of a question, its validation and feedback. Dealing with these issues was a significant challenge.

+

A barrier that had to be evaluated is time. The initial work in integrating STACK into ILIAS took significant effort, and the project has to be continually maintained as bug fixes and project features are applied. It is estimated that, on average, 70% of a full-time employee's time is required to maintain the STACK developments for ILIAS. This is currently partially funded by the ILIAS community and the Innovation in Learning Institute.

+

Server performance was an issue when it came to using STACK in large institutions. Maxima was designed as a desktop application, and so lacks a set of “good practice” recommendations for hardware and configuration options depending on the expected load. To solve this, there are some initiatives such as the GoMaxima project from HAW Hamburg and an initiative at the University of Göttingen for a docker swarm of Maxima pools.

+

Enablers

+

The meeting with the lead STACK developer was a major help in getting the project off on the right track. The comprehensive STACK documentation was also invaluable for understanding the question type.

+

Additionally, the support from the ILIAS special interest group was invaluable. This group helped sketch the authoring interface in ILIAS, write documentation and organise the first workshops. It also helped moderate the discussion of feature requests from the ILIAS community and organise crowd funding for the maintenance of the plugin. Furthermore, since the Innovation in Learning Institution is not a mathematics institution, it was invaluable to get help from mathematicians to write good demonstration questions.

+

Finally, the port was supported by the common technology of ILIAS and STACK and the fact Moodle and ILIAS have very similar quiz structures, and both treat STACK as a question plugin type. Implementation differences aside, the main principles are the same.

+

What's Next?

+

The ILIAS question type will continue to be updated as STACK, Moodle and ILIAS get updated. In particular, the way question types in ILIAS are implemented will change in a future ILIAS patch, which means the question type will have to be adapted accordingly. There are also plans to make STACK less dependent on the Moodle library. If this is successful, the ILIAS plugin will have to be largely rewritten (since it depends on the Moodle library), however the developers are optimistic. From writing the question type the first time around, they have gained invaluable experience. Furthermore, the authoring interface will not have to be rewritten.

+

There are many wishes from the ILIAS community for new features to be implemented. Some of these are step-wise feedback, as well as more control of the feedback style, for example the colour of feedback boxes. These may be added to the STACK question type in the future.

+

Finally, the maintenance relies heavily on crowdfunding managed between institutions (typically the Innovation in Learning Institution and another University). This means contracts have to be written between the heads of each institution, which can be difficult to manage. There are therefore considerations to transfer the maintenance of the question type to an ILIAS service provider, as it would then be easier to get crowdfunding contracts from Universities.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/Images/ABACUS_thumbnail.svg b/CaseStudies/2019/Images/ABACUS_thumbnail.svg new file mode 100644 index 00000000..b29c478d --- /dev/null +++ b/CaseStudies/2019/Images/ABACUS_thumbnail.svg @@ -0,0 +1,915 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CaseStudies/2019/Images/Aalto_logo.png b/CaseStudies/2019/Images/Aalto_logo.png new file mode 100644 index 00000000..0fa98a3e Binary files /dev/null and b/CaseStudies/2019/Images/Aalto_logo.png differ diff --git a/CaseStudies/2019/Images/Abacus_logo.svg b/CaseStudies/2019/Images/Abacus_logo.svg new file mode 100644 index 00000000..eb56acaf --- /dev/null +++ b/CaseStudies/2019/Images/Abacus_logo.svg @@ -0,0 +1,929 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CaseStudies/2019/Images/Abacus_question.png b/CaseStudies/2019/Images/Abacus_question.png new file mode 100644 index 00000000..08f22605 Binary files /dev/null and b/CaseStudies/2019/Images/Abacus_question.png differ diff --git a/CaseStudies/2019/Images/Adaptable_1.png b/CaseStudies/2019/Images/Adaptable_1.png new file mode 100644 index 00000000..7a51305f Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_1.png differ diff --git a/CaseStudies/2019/Images/Adaptable_2.png b/CaseStudies/2019/Images/Adaptable_2.png new file mode 100644 index 00000000..b5c01429 Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_2.png differ diff --git a/CaseStudies/2019/Images/Adaptable_3.png b/CaseStudies/2019/Images/Adaptable_3.png new file mode 100644 index 00000000..3cb5a355 Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_3.png differ diff --git a/CaseStudies/2019/Images/Adaptable_4.png b/CaseStudies/2019/Images/Adaptable_4.png new file mode 100644 index 00000000..6f6084bf Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_4.png differ diff --git a/CaseStudies/2019/Images/Adaptable_4_solved.png b/CaseStudies/2019/Images/Adaptable_4_solved.png new file mode 100644 index 00000000..d3f97197 Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_4_solved.png differ diff --git a/CaseStudies/2019/Images/Adaptable_5.png b/CaseStudies/2019/Images/Adaptable_5.png new file mode 100644 index 00000000..f0357f2f Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_5.png differ diff --git a/CaseStudies/2019/Images/Adaptable_correlation.svg b/CaseStudies/2019/Images/Adaptable_correlation.svg new file mode 100644 index 00000000..00554587 --- /dev/null +++ b/CaseStudies/2019/Images/Adaptable_correlation.svg @@ -0,0 +1,2523 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + + + + + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + + Sum of points earned in paper exercises + Sum of points earned in the final exam + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 50 + + + 100 + + + 150 + + + 200 + + + + + + + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + + Sum of points earned in online exercises + Sum of points earned in the final exam + + Correlations + Weekly paper exercisesvs. final exam: ρ=0.58 (p<0.00001) + Weekly online exercisesvs. final exam: ρ=0.65 (p<0.00001) + + + + diff --git a/CaseStudies/2019/Images/Adaptable_overview.pdf b/CaseStudies/2019/Images/Adaptable_overview.pdf new file mode 100644 index 00000000..8235acef Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_overview.pdf differ diff --git a/CaseStudies/2019/Images/Adaptable_overview.png b/CaseStudies/2019/Images/Adaptable_overview.png new file mode 100644 index 00000000..fad851f0 Binary files /dev/null and b/CaseStudies/2019/Images/Adaptable_overview.png differ diff --git a/CaseStudies/2019/Images/Adaptive_thumbnail.png b/CaseStudies/2019/Images/Adaptive_thumbnail.png new file mode 100644 index 00000000..4e165f15 Binary files /dev/null and b/CaseStudies/2019/Images/Adaptive_thumbnail.png differ diff --git a/CaseStudies/2019/Images/CATE_large.png b/CaseStudies/2019/Images/CATE_large.png new file mode 100644 index 00000000..c14ecf47 Binary files /dev/null and b/CaseStudies/2019/Images/CATE_large.png differ diff --git a/CaseStudies/2019/Images/CaseStudy_pg1.png b/CaseStudies/2019/Images/CaseStudy_pg1.png new file mode 100644 index 00000000..d28caf27 Binary files /dev/null and b/CaseStudies/2019/Images/CaseStudy_pg1.png differ diff --git a/CaseStudies/2019/Images/CaseStudy_thumbnail.png b/CaseStudies/2019/Images/CaseStudy_thumbnail.png new file mode 100644 index 00000000..f09b1b01 Binary files /dev/null and b/CaseStudies/2019/Images/CaseStudy_thumbnail.png differ diff --git a/CaseStudies/2019/Images/Chris.jpg b/CaseStudies/2019/Images/Chris.jpg new file mode 100644 index 00000000..fe4b8737 Binary files /dev/null and b/CaseStudies/2019/Images/Chris.jpg differ diff --git a/CaseStudies/2019/Images/Edinburgh_logo.png b/CaseStudies/2019/Images/Edinburgh_logo.png new file mode 100644 index 00000000..a8ee32cc Binary files /dev/null and b/CaseStudies/2019/Images/Edinburgh_logo.png differ diff --git a/CaseStudies/2019/Images/Edinburgh_logo_stacked.png b/CaseStudies/2019/Images/Edinburgh_logo_stacked.png new file mode 100644 index 00000000..3df05e5c Binary files /dev/null and b/CaseStudies/2019/Images/Edinburgh_logo_stacked.png differ diff --git a/CaseStudies/2019/Images/Edinburgh_thumbnail.PNG b/CaseStudies/2019/Images/Edinburgh_thumbnail.PNG new file mode 100644 index 00000000..0d2f02a5 Binary files /dev/null and b/CaseStudies/2019/Images/Edinburgh_thumbnail.PNG differ diff --git a/CaseStudies/2019/Images/FAC_1_Large.png b/CaseStudies/2019/Images/FAC_1_Large.png new file mode 100644 index 00000000..a81147b2 Binary files /dev/null and b/CaseStudies/2019/Images/FAC_1_Large.png differ diff --git a/CaseStudies/2019/Images/FAC_5_Large.png b/CaseStudies/2019/Images/FAC_5_Large.png new file mode 100644 index 00000000..cfedcec7 Binary files /dev/null and b/CaseStudies/2019/Images/FAC_5_Large.png differ diff --git a/CaseStudies/2019/Images/FAC_Results.png b/CaseStudies/2019/Images/FAC_Results.png new file mode 100644 index 00000000..708f9620 Binary files /dev/null and b/CaseStudies/2019/Images/FAC_Results.png differ diff --git a/CaseStudies/2019/Images/FAC_thumbnail.png b/CaseStudies/2019/Images/FAC_thumbnail.png new file mode 100644 index 00000000..97a76d87 Binary files /dev/null and b/CaseStudies/2019/Images/FAC_thumbnail.png differ diff --git a/CaseStudies/2019/Images/FlickInterface_thumbnail.PNG b/CaseStudies/2019/Images/FlickInterface_thumbnail.PNG new file mode 100644 index 00000000..6fad3382 Binary files /dev/null and b/CaseStudies/2019/Images/FlickInterface_thumbnail.PNG differ diff --git a/CaseStudies/2019/Images/Flick_interface_compressed.PNG b/CaseStudies/2019/Images/Flick_interface_compressed.PNG new file mode 100644 index 00000000..91ff2a28 Binary files /dev/null and b/CaseStudies/2019/Images/Flick_interface_compressed.PNG differ diff --git a/CaseStudies/2019/Images/GitStats.PNG b/CaseStudies/2019/Images/GitStats.PNG new file mode 100644 index 00000000..6202c36e Binary files /dev/null and b/CaseStudies/2019/Images/GitStats.PNG differ diff --git a/CaseStudies/2019/Images/ILA_1.PNG b/CaseStudies/2019/Images/ILA_1.PNG new file mode 100644 index 00000000..9cbb15a9 Binary files /dev/null and b/CaseStudies/2019/Images/ILA_1.PNG differ diff --git a/CaseStudies/2019/Images/ILIAS_thumbnail.png b/CaseStudies/2019/Images/ILIAS_thumbnail.png new file mode 100644 index 00000000..567bb445 Binary files /dev/null and b/CaseStudies/2019/Images/ILIAS_thumbnail.png differ diff --git a/CaseStudies/2019/Images/ILI_logo.png b/CaseStudies/2019/Images/ILI_logo.png new file mode 100644 index 00000000..5fe54596 Binary files /dev/null and b/CaseStudies/2019/Images/ILI_logo.png differ diff --git a/CaseStudies/2019/Images/ILI_question.png b/CaseStudies/2019/Images/ILI_question.png new file mode 100644 index 00000000..cc55ef85 Binary files /dev/null and b/CaseStudies/2019/Images/ILI_question.png differ diff --git a/CaseStudies/2019/Images/Intro_1.PNG b/CaseStudies/2019/Images/Intro_1.PNG new file mode 100644 index 00000000..77eeef4d Binary files /dev/null and b/CaseStudies/2019/Images/Intro_1.PNG differ diff --git a/CaseStudies/2019/Images/JCMB.jpg b/CaseStudies/2019/Images/JCMB.jpg new file mode 100644 index 00000000..18dde653 Binary files /dev/null and b/CaseStudies/2019/Images/JCMB.jpg differ diff --git a/CaseStudies/2019/Images/LBORO_1.png b/CaseStudies/2019/Images/LBORO_1.png new file mode 100644 index 00000000..1e1379cc Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_1.png differ diff --git a/CaseStudies/2019/Images/LBORO_2.png b/CaseStudies/2019/Images/LBORO_2.png new file mode 100644 index 00000000..7660c3df Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_2.png differ diff --git a/CaseStudies/2019/Images/LBORO_2_alt.png b/CaseStudies/2019/Images/LBORO_2_alt.png new file mode 100644 index 00000000..92e3022a Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_2_alt.png differ diff --git a/CaseStudies/2019/Images/LBORO_3.png b/CaseStudies/2019/Images/LBORO_3.png new file mode 100644 index 00000000..43eec551 Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_3.png differ diff --git a/CaseStudies/2019/Images/LBORO_4.png b/CaseStudies/2019/Images/LBORO_4.png new file mode 100644 index 00000000..2bae0176 Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_4.png differ diff --git a/CaseStudies/2019/Images/LBORO_5.png b/CaseStudies/2019/Images/LBORO_5.png new file mode 100644 index 00000000..83023f2f Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_5.png differ diff --git a/CaseStudies/2019/Images/LBORO_logo.png b/CaseStudies/2019/Images/LBORO_logo.png new file mode 100644 index 00000000..c87fd73c Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_logo.png differ diff --git a/CaseStudies/2019/Images/LBORO_thumbnail.png b/CaseStudies/2019/Images/LBORO_thumbnail.png new file mode 100644 index 00000000..8f56145c Binary files /dev/null and b/CaseStudies/2019/Images/LBORO_thumbnail.png differ diff --git a/CaseStudies/2019/Images/Maseno_Question_1.PNG b/CaseStudies/2019/Images/Maseno_Question_1.PNG new file mode 100644 index 00000000..ae7a17cb Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_Question_1.PNG differ diff --git a/CaseStudies/2019/Images/Maseno_Question_2.PNG b/CaseStudies/2019/Images/Maseno_Question_2.PNG new file mode 100644 index 00000000..208c08dd Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_Question_2.PNG differ diff --git a/CaseStudies/2019/Images/Maseno_Survey_1.png b/CaseStudies/2019/Images/Maseno_Survey_1.png new file mode 100644 index 00000000..6b25e853 Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_Survey_1.png differ diff --git a/CaseStudies/2019/Images/Maseno_Survey_2.PNG b/CaseStudies/2019/Images/Maseno_Survey_2.PNG new file mode 100644 index 00000000..9c5e51ec Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_Survey_2.PNG differ diff --git a/CaseStudies/2019/Images/Maseno_University.jpg b/CaseStudies/2019/Images/Maseno_University.jpg new file mode 100644 index 00000000..007a5d48 Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_University.jpg differ diff --git a/CaseStudies/2019/Images/Maseno_thumbnail.jpg b/CaseStudies/2019/Images/Maseno_thumbnail.jpg new file mode 100644 index 00000000..920558ee Binary files /dev/null and b/CaseStudies/2019/Images/Maseno_thumbnail.jpg differ diff --git a/CaseStudies/2019/Images/MoodleStats.PNG b/CaseStudies/2019/Images/MoodleStats.PNG new file mode 100644 index 00000000..97e3e522 Binary files /dev/null and b/CaseStudies/2019/Images/MoodleStats.PNG differ diff --git a/CaseStudies/2019/Images/OU_1.jpg b/CaseStudies/2019/Images/OU_1.jpg new file mode 100644 index 00000000..98fee221 Binary files /dev/null and b/CaseStudies/2019/Images/OU_1.jpg differ diff --git a/CaseStudies/2019/Images/OU_4_large.png b/CaseStudies/2019/Images/OU_4_large.png new file mode 100644 index 00000000..7cfef1bf Binary files /dev/null and b/CaseStudies/2019/Images/OU_4_large.png differ diff --git a/CaseStudies/2019/Images/OU_logo.png b/CaseStudies/2019/Images/OU_logo.png new file mode 100644 index 00000000..fd72d0ac Binary files /dev/null and b/CaseStudies/2019/Images/OU_logo.png differ diff --git a/CaseStudies/2019/Images/OU_thumbnail.png b/CaseStudies/2019/Images/OU_thumbnail.png new file mode 100644 index 00000000..96caaefe Binary files /dev/null and b/CaseStudies/2019/Images/OU_thumbnail.png differ diff --git a/CaseStudies/2019/Images/Old_College.jpg b/CaseStudies/2019/Images/Old_College.jpg new file mode 100644 index 00000000..0e07b3c9 Binary files /dev/null and b/CaseStudies/2019/Images/Old_College.jpg differ diff --git a/CaseStudies/2019/Images/PhysicsCurriculum_1.jpg b/CaseStudies/2019/Images/PhysicsCurriculum_1.jpg new file mode 100644 index 00000000..c997caad Binary files /dev/null and b/CaseStudies/2019/Images/PhysicsCurriculum_1.jpg differ diff --git a/CaseStudies/2019/Images/PhysicsCurriculum_3.jpg b/CaseStudies/2019/Images/PhysicsCurriculum_3.jpg new file mode 100644 index 00000000..43d6c313 Binary files /dev/null and b/CaseStudies/2019/Images/PhysicsCurriculum_3.jpg differ diff --git a/CaseStudies/2019/Images/PhysicsCurriculum_thumbnail.jpg b/CaseStudies/2019/Images/PhysicsCurriculum_thumbnail.jpg new file mode 100644 index 00000000..19edd8d7 Binary files /dev/null and b/CaseStudies/2019/Images/PhysicsCurriculum_thumbnail.jpg differ diff --git a/CaseStudies/2019/Images/RUB_logo.png b/CaseStudies/2019/Images/RUB_logo.png new file mode 100644 index 00000000..b832c2c1 Binary files /dev/null and b/CaseStudies/2019/Images/RUB_logo.png differ diff --git a/CaseStudies/2019/Images/RUB_logo.svg b/CaseStudies/2019/Images/RUB_logo.svg new file mode 100644 index 00000000..51290415 --- /dev/null +++ b/CaseStudies/2019/Images/RUB_logo.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + diff --git a/CaseStudies/2019/Images/abacus_logos.pdf b/CaseStudies/2019/Images/abacus_logos.pdf new file mode 100644 index 00000000..d33b9a9e Binary files /dev/null and b/CaseStudies/2019/Images/abacus_logos.pdf differ diff --git a/CaseStudies/2019/Images/optes_design.png b/CaseStudies/2019/Images/optes_design.png new file mode 100644 index 00000000..25e8137b Binary files /dev/null and b/CaseStudies/2019/Images/optes_design.png differ diff --git a/CaseStudies/2019/Images/optes_design.tif b/CaseStudies/2019/Images/optes_design.tif new file mode 100644 index 00000000..56c8f97f Binary files /dev/null and b/CaseStudies/2019/Images/optes_design.tif differ diff --git a/CaseStudies/2019/Images/optes_feedback.png b/CaseStudies/2019/Images/optes_feedback.png new file mode 100644 index 00000000..d2e76a4b Binary files /dev/null and b/CaseStudies/2019/Images/optes_feedback.png differ diff --git a/CaseStudies/2019/Images/optes_question.png b/CaseStudies/2019/Images/optes_question.png new file mode 100644 index 00000000..c6c48fe8 Binary files /dev/null and b/CaseStudies/2019/Images/optes_question.png differ diff --git a/CaseStudies/2019/Images/optes_thumbnail.png b/CaseStudies/2019/Images/optes_thumbnail.png new file mode 100644 index 00000000..905f4cf2 Binary files /dev/null and b/CaseStudies/2019/Images/optes_thumbnail.png differ diff --git a/CaseStudies/2019/Loughborough/index.html b/CaseStudies/2019/Loughborough/index.html new file mode 100644 index 00000000..ed6c7a49 --- /dev/null +++ b/CaseStudies/2019/Loughborough/index.html @@ -0,0 +1,412 @@ + + + + + + + + + + + + Promoting STACK Across Disciplines at Loughborough University - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Promoting STACK Across Disciplines at Loughborough University

+

+

Loughborough University

+

Ian Jones

+

Abstract

+

At Loughborough University, STACK has been implemented across many disciplines. Courses are created by module leaders, who prepare paper-based problems, and academics and students who implement these problems in STACK. To promote STACK to lecturers across the University, a showcase module page was developed that makes it easy to navigate and browse good STACK examples across disciplines.

+

Introduction

+

STACK was installed at Loughborough University in 2014. Since then, a programme of development and dissemination led by Loughborough’s Mathematics Education Centre has resulted in widespread use across the University. The University has encouraged multidisciplinary take up beyond the mathematics department, and now 57 modules across six degree programmes include STACK content. STACK is used for assessment in topics including mathematics, business, statistics, chemical engineering, physics and foundation programmes.

+

Execution

+

Initially, questions were developed in conjunction with module leaders. Typically a module leader provided the developers with paper-based problem sheets. The developers, who included academics as well as PhD and undergraduate mathematics students working on projects, adapted the problems into STACK questions. The example below illustrates how the developers paid special attention to making use of STACK’s unique feedback feature to provide personalised feedback to students.

+
+
+A list of partial derivatives questions. +The list of partial derivatives questions, turned into STACK questions. +
Figure: A paper-based question and its STACK equivalent.
+
+ +

Alongside development, the STACK content was promoted and disseminated to lecturers across the University via internal workshops. This included workshops to train module leaders in developing their own content. Additionally, a module page was developed, viewable to all teaching staff, that acts as a showcase for STACK content.

+
+
+The showcase module page, which has links to several other pages, such as 'Welcome to STACK', 'Important and Exporting', and 'Syntax quiz'. +
Figure: The University developed a showcase module page.
+
+ +

The showcase module page is designed to be easy to use and navigate, even for beginners. This is because newcomers often find navigating, selecting and exporting questions off-putting. To overcome this, all questions within a topic have been wrapped into a downloadable .zip file, and only a few navigable example questions have been provided. The download screen for business-based STACK questions is shown below. Business questions have been a particular success, and a new project to develop further STACK content for the School of Business and Economics begins in Autumn 2019.

+
+
+The download screen for a collection of business STACK questions, including a link to a Complex numbers quiz and a download link for the individual questions. +
Figure: The download screen for a collection of business STACK questions.
+
+ +

What's Next?

+

STACK development continues at Loughborough. The University continues to be particularly interested in promoting STACK in areas where it is not commonly used. This development includes developing STACK content for degree programmes beyond mathematics, such as statistics for psychologists, as well as areas within mathematics that are traditionally difficult to assess automatically. A particularly exciting area being explored is assessing proof comprehension, and an example prototype question is shown below.

+
+
+A proof in 12 steps for why the square root of 2 is irrational. Students are asked a) for an example of a number that is coprime to 60, b) to justify which earlier step is contradicted in step 10 c) giving an example of another value the proof could apply to. +
Figure: A STACK question assessing some skills in proof comprehension.
+
+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/Maseno/index.html b/CaseStudies/2019/Maseno/index.html new file mode 100644 index 00000000..ed47dff0 --- /dev/null +++ b/CaseStudies/2019/Maseno/index.html @@ -0,0 +1,426 @@ + + + + + + + + + + + + Innovating Education in Maseno, Kenya - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Innovating Education in Maseno, Kenya

+

Maseno University, Kenya

+

Santiago Borio, IDEMS

+

Michael Obiero Oyengo, Maseno University

+

Abstract

+

IDEMS International is working with Maseno University to implement online assessment for their mathematics courses. Developers from IDEMS and Maseno University created online quizzes for two courses during the pilot of the project, running on servers at the University of Edinburgh. The main challenges of the project were related to poor student access to WiFi and time pressure for the question authors. The feedback from the students was mostly positive, and the pilot paves the way for more similar work in the future. This includes online assessment for many more courses at Maseno University, as well as collaborations with other African universities and secondary schools.

+

Introduction

+

IDEMS International (Innovations on Development, Education and the Mathematical Sciences) is a Community Interest Company working to support different development causes, mostly in Africa, in fields of education and mathematical sciences. The non-profit organisation generates open education resources and offers services to Universities and other institutions. One of their projects was to help implement Computer Aided Assessment (CAA) in African Universities, of which Maseno University was chosen as a pilot.

+

Maseno University, Kenya, has a large number of students in its undergraduate mathematics courses, many courses having 800 enrolled students and some more than 1000, but there is little support for lecturers in terms of marking. This puts pressure on their ability to reliably do weekly assessments for students. By changing the continuous assessment from a paper format to an electronic system, the hope was that lecturers would have more opportunities to concentrate on their teaching and supporting students in other ways.

+
+
+Maseno University +
Figure: Maseno University. +
+
+ +

Why Use STACK?

+

There were a number of reasons for why STACK was chosen for this project. Firstly, there was already some familiarity with the STACK system within IDEMS, as one of the contributors had previously worked with STACK question authoring. Secondly, the main STACK developer offered assistance, including the opportunity to run the service on servers at the University of Edinburgh. Finally, having compared STACK with other systems, the developers found that the flexibility in answer tests, recognition of mistakes through potential response trees and the ability to have questions that require numerical or algebraic input for answers made STACK more powerful than the alternatives.

+

Execution

+
+
+A STACK question from 'Calculus I' involving continuity and L'Hôpital's rule. +
Figure: A STACK question from "Calculus I" involving continuity and L'Hôpital's rule. +
+
+

The developers from IDEMS and Maseno University created online STACK quizzes for the courses "Calculus I" and "Introduction to Linear Algebra". In the case of "Calculus I", the main lecturer provided a written quiz structure and list of questions, so the main work was just typing these into STACK and implementing randomisation. In contrast, the quizzes of "Introduction to Linear Algebra" were written mostly from scratch, only using a few questions from the STACK sample materials.

+

Initially, students are given a syntax quiz to learn the STACK syntax, and then in each of the following 10 weeks they are given a formative "mastery quiz" and a summative "test quiz". The mastery quiz can be taken as many times as the students wants, but they must get a score of 80% in the mastery quiz to unlock the respective test quiz, where students are only given one attempt. In "Introduction to Linear Algebra", this restriction was later reduced to 70%, as lecturers felt students were having a hard time keeping up with materials. The mastery and test quizzes together count for 30% of the students course grade. Towards the end of the course there is also a review week with STACK questions, and in "Introduction to Linear Algebra" students can take an online practice exam.

+

Feedback

+

After the first year, the students of the two courses were asked to fill out a survey about their experience with STACK. The first few questions regarded accessing the course. Maseno University does not have reliable WiFi, and it is not common for students' accommodation to have WiFi either. As a result, most students had to use either their own or a friends' phone, and purchase a data package to access the course. Indeed, when asked to rate the difficulty of different aspects, many students ranked "accessing the internet" in the range of "slightly challenging" to "very challenging".

+
+
+How did you access the course website? 470 responses. My own smartphone: 444, my friend's smart phone: 50, a computer in the maths lab: 47, my own laptop: 40, a friend's laptop: 24... +How did you access internet for the course? 467 responses. Purchased my own data bundles: 434, the university WiFI: 185, a friend's internet bundles: 43, another WiFi locaation: 5. +
Figure: Responses to the survey for "Introductory Linear Algebra". +
+
+ +

When asked to rate how helpful they found different aspects of the assessments, many students ranked getting feedback, being able to have multiple attempts at mastery quizzes, having weekly quizzes and having the mastery quizzes open all semester as useful. Most students did not seem to have too much difficulty with the STACK syntax, ranking it in a range of "not a challenge" to "moderately challenging". This was surely helped by the attempts to ensure students were learning the syntax, for example through the introductory syntax quiz. However, it also seems there is room for improvement here.

+

The students were also given an opportunity to add any general comments or suggestions. The majority of these answers were from students who were happy with STACK and said it was useful for getting a deeper understanding of the material.

+

With regards to quizzes, many students requested more than one attempt at test quizzes, with extended deadlines. They requested more mastery quizzes, suggesting they found them helpful, and some students suggested access to harder, exam-style questions.

+

There were also some comments about the feedback for questions. Due to time constraints, the calculus course only had feedback in the form of worked solutions, and for linear algebra, students were only given outlines to solutions. Students said that they wanted better feedback, and so one of the goals for the next iteration will be to add tailored feedback to all questions.

+

Finally, there was a call to improve accessibility for the visually impaired.

+

Challenges

+

As is evident from the survey responses, there was a challenge regarding the students' access to internet. However, this did not end up being as big a problem as anticipated, as students seemed able and willing to pay for data packages to access the course.

+

Furthermore, due to the short term allocation of courses and lecturers, there was a significant time pressure for writing the quizzes. As a result, there was no time to implement tailored feedback, and a number of quizzes were delivered late. However, this did not seem to discourage students or create major issues in the completion of quizzes.

+

Enablers

+

A major enabler for the project was the ability of IDEMS to assist the University in question authoring. The questions were written by Michael Obiero Oyengo and David Ambogo from Maseno University and Santiago Borio, Danny Parsons and David Stern from IDEMS. Additionally, the main STACK developer C. Sangwin helped give crash courses in using STACK, which sped up the learning process. The course was also run on a server at the University of Edinburgh, which meant the developers did not have to worry about setting up a server and could focus entirely on question authoring. Finally, the STACK sample questions helped speed up the question authoring process, as the developers could use them as templates when writing similar questions.

+

What's Next?

+

Following the success of this pilot course, IDEMS is looking to expand into similar projects. The first step will be improving the two initial courses. Once the analysis of the data from the pilot course is finished, it will be possible to identify the main areas that need work. These two courses have been transferred to an IDEMS server, so they can be easily used for online assessment at other universities. The server will be built to cope with universities with many students, as IDEMS expects to use it for some courses with more than 1000 students.

+

A number of Universities have expressed interest in this project, including universities from Kenya, Ethiopia, Rwanda, Tanzania and Uganda. In particular, the mathematics department at Bahir Dar University, Ethiopia has agreed to investigate implementing a number of IDEMS' courses. In August 2019, IDEMS is holding a workshop, where representatives from these universities will discuss STACK and how to best implement e-assessment at their institutions. The 5-day workshop will include talks on the advantages of using online assessment, as well as practical work to prepare lecturers who want to use IDEMS' online course material. The workshop is funded by a grant from the Commission for Developing Countries (CDC) of the International Mathematical Union.

+

IDEMS is also helping Maseno University create online materials for several of its other courses. In the 19/20 term, Maseno University will run the improved "Calculus I", as well as five other courses with online assessment: "Descriptive Statistics", "Introduction to Probability Theory", "Basic Mathematics", "Calculus II" and "Vector Analysis". For these courses, IDEMS will be training some lecturers to author their own questions, which will increase their control of the online quizzes. As with the two pilot courses, these courses are planned to be piloted at Maseno University first, then refined based on feedback and made available as an OER for other universities.

+

Finally, IDEMS is looking at using STACK in secondary schools. There are plans to develop an e-book for African schools with accompanying STACK questions, including an offline system for schools with poor WiFi. IDEMS is also evaluating opportunities to develop an open assessment system for English schools.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/PhysicsCurriculum/index.html b/CaseStudies/2019/PhysicsCurriculum/index.html new file mode 100644 index 00000000..247cc90d --- /dev/null +++ b/CaseStudies/2019/PhysicsCurriculum/index.html @@ -0,0 +1,413 @@ + + + + + + + + + + + + STACK for a Physics Textbook - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

STACK for a Physics Textbook

+

Physics Curriculum & Instruction

+

David Hilsen

+

Abstract

+

The commercial textbook publisher, Physics Curriculum & Instruction have developed STACK questions to accompany a Physics textbook [1]. These make significant use of random variants and intermediate problem-solving steps. It was important to have feedback on problem design from academic colleagues, and to have support for significant figures and scientific units in STACK. The question bank will contain 3500 questions by the start of the 2019/20 school year.

+

Motivation

+

Physics Curriculum & Instruction is a Minnesota-based company providing schools with learning resources for Physics. With a lot of open-source options becoming available, putting resources into developing a commercial textbook can carry a significant risk. Physics Curriculum hopes to address this by directing their development efforts towards online physics educational resources. It was important to have a system that allowed them to address the wide variety of needs of instructors and that utilised randomization of numerical values. This makes it nearly impossible to search online for the answer to a particular problem; a major concern for publishers.

+

Execution

+
+
+Three forces are displayed as vectors. The student must find the magnitude and direction of the sum of the three forces. +
Figure: A Physics Curriculum question involving intermediate problem-solving steps. +
+
+

A large collection of online STACK questions were developed to accompany the book Physics Fundamentals [1]. Access to the online homework package can be purchased along with the book for an extra fee. The online questions are managed in the online learning environment Physics LE, which runs on Moodle. Moodle was picked for its Enrolment key feature and its Adaptive mode question behaviour that allows students to make multiple question attempts with immediate feedback.

+

The team had four people authoring STACK questions, and two additional people working on Moodle and the cloud servers. Authoring questions required an average of just over one hour per question with a significant portion of that time devoted to quality control and testing. Ultimately the development sums to a significant financial investment, but also one that leaves an end product of high quality.

+

A significant focus in the authoring of questions was on intermediate problem-solving steps, and which ones would be most beneficial to help the student formulate a problem-solving strategy. It was important to go beyond a system in which students simply enters a final numerical value that is marked right or wrong with no additional feedback. The intermediate problem-solving steps used are of the following type:

+
    +
  1. multiple-choice questions, using text or diagrams, checking for understanding and problem-solving approach,
  2. +
  3. input of relevant equations or algebraic expressions,
  4. +
  5. input of intermediate numerical values which need to be calculated to obtain the final answer.
  6. +
+

Results

+

The service went live in January 2019. Since then, 15 schools, both high schools and colleges, have urchased the online question package. Instructors gave positive feedback, especially appreciating the multiple-part question structure where students are given specific feedback.

+

Barriers

+
+
+A question about a pole-vaulter beginning a jump with a running start, then rotating his body about the other end. Students must give an expression for the speed. +
Figure: A Physics Curriculum question involving potential energy. +
+
+

Initially, there was no provision in STACK for handling significant figures, and limited support for physical units. This was a big barrier for Physics question authoring, and hence a more robust system was developed for this purpose. Additionally, high school students sometimes struggle with the syntax for equation input, especially those with minimal computer background. This continues to improve within STACK and may not be a concern in the future.

+

Enablers

+

Instructors and colleagues provided feedback from an outside perspective indicating where students might have difficulty. This encouraged the authoring of additional PRT nodes, for example checking for a particular misconception.

+

What's Next?

+

There are many additional schools evaluating the Physics Curriculum online homework system, and additional schools are expected to join. Furthermore, the question bank continues to grow. By the start of the 2019/20 school year, Physics Curriculum plans to have 3500 STACK problems in their system, many of these multiple-part. There are also plans to partner up with OpenStax, a company producing high quality College Physics textbooks, to bring them an affordable online homework solution as well.

+

References

+

[1] V. P. Coletta. Physics Fundamentals. Physics Curriculum and Instruction Inc., Lakeville, +Minessota, 2nd edition, 2010.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/References/CreateRefs.bat b/CaseStudies/2019/References/CreateRefs.bat new file mode 100644 index 00000000..76474173 --- /dev/null +++ b/CaseStudies/2019/References/CreateRefs.bat @@ -0,0 +1,13 @@ +pdflatex references.tex +bibtex bu1 +bibtex bu2 +bibtex bu3 +bibtex bu4 +bibtex bu5 +bibtex bu6 +bibtex bu7 +bibtex bu8 +bibtex bu9 +pdflatex references.tex +pdflatex references.tex +pdflatex references.tex diff --git a/CaseStudies/2019/References/PUS.bib b/CaseStudies/2019/References/PUS.bib new file mode 100644 index 00000000..82c6db47 --- /dev/null +++ b/CaseStudies/2019/References/PUS.bib @@ -0,0 +1,4519 @@ +### Common journal names and publishers +@string{AJP = {American Journal of Physics}} +@string{AMM = {American Mathematical Monthly}} +@string{OUP = {Oxford University Press}} +@string{GAZ = {The Mathematical Gazette}} +@string{SIAM = {Scientific American}} +### Cited works + +@BOOK{Abelson1988, + author = {Harold Abelson, H. and DiSessa, A.~A.}, + title = {Turtle Geometry: The Computer as a Medium for Exploring Mathematics}, + publisher = {MIT Press}, + year = {1986}, +} + +@BOOK{Acheson1997, + author = {Acheson, D.~J.}, + title = {From Calculus to Chaos: an Introduction to Dynamics}, + publisher = OUP, + address = {Oxford, UK}, + year = {1997}, +} + +@BOOK{Adams1994, + AUTHOR = {Adams, W.~W. and Loustaunau, P.}, + TITLE = {An Introduction to {G}robner Bases}, + PUBLISHER = {American Mathematical Society}, + address = {Providence, Rhode Island}, + YEAR = {1994}, + volume = {3}, + series = {Graduate Studies in Mathematics}, + isbn = {0-8218-3804-0}, +} +# url = {http://books.google.co.uk/books?hl=en\&lr=\&id=Caoxi78WaIAC\&oi=fnd\&pg=PR9\&dq=an+introduction+to+gr�bner+bases\&ots=w9sRSYJ4\_l\&sig=rT2f7R1MCTi\_EzJPl0jPjelmNsk}, + + +@ARTICLE{Adleman1994, + author = {Adleman, L.~M.}, + title = {Molecular computation of solutions to combinatorial problems}, + journal = {Science}, + year = {1994}, + volume = {266}, + pages = {1021--1024}, +} + +@BOOK{Aigner2004, + AUTHOR = {Aigner, M. and Ziegler, G.}, + TITLE = {Proofs from THE BOOK}, + PUBLISHER = {Springer}, + YEAR = {2004}, + edition = {Third}, +} + +@BOOK{Allenby1989, + author = {Allenby, R.~B.~J.~T. and Redfern, E.~J.}, + title = {Introduction to Number Theory with Computing}, + publisher = {Routledge}, + year = {1989}, + address = {London}, +} + +@BOOK{Allenby1997, + author = {Allenby, R.~B.~J.~T.}, + title = {Numbers and Proofs}, + publisher = {Arnold}, + year = {1997}, + address = {London}, +} + +@ARTICLE{Alperin1987, + author = {Alperin, R.~C.}, + title = {Heron's Area Formula}, + journal = {The College Mathematics Journal}, + year = {1987}, + volume = {18}, + number = {2}, + pages = {137--138}, + month = {March}, +} + +@BOOK{Arbuthnot1692, + AUTHOR = {Arbuthnot, J.}, + TITLE = {Of the laws of chance}, + PUBLISHER = {London}, + YEAR = {1692}, +} + +@BOOK{Arbuthnot1701, + AUTHOR = {Arbuthnot, J.}, + TITLE = {An essay on the usefulness of mathematical learning}, + PUBLISHER = {London}, + YEAR = {1701}, +} + +@article{Arnold1991, + author = {Arnol'd, V.~I.}, + title = {A mathematical trivium}, + journal = {Russian Mathematical Surveys}, + volume = {46}, + number = {1}, + pages = {271--278}, + year = {1991}, +} + +@BOOK{Artobolevsky1976, + AUTHOR = {Artobolevsky, I.~I.}, + TITLE = {Mechanisms in modern engineering design}, + PUBLISHER = {MIR publishers, Moscow}, + YEAR = {1976}, +} + + +@BOOK{Ashton, + author = {Ashton, A.}, + title = {Harmonograph, a visual introduction to harmony}, + publisher = {Wooden books}, + year = {1999}, + address = {Walkmill, Cascob, Presteigne, Powys, Wales, LD82NT}, +}# note = {ISBN 1902418050}, + + +@BOOK{Atkinson1989, + author = {Atkinson, K.~E.}, + title = {An Introduction to Numerical Analysis}, + publisher = {Wiley}, + year = {1989}, + edition = {Second}, +} + +@BOOK{Austen1880, + AUTHOR = {Austen, W.~F.}, + TITLE = {Military Examinations: Mathematical Examination Papers set for entrance to R.M.A.~Wollwich, with answers}, + PUBLISHER = {Edward Stanford, London}, + YEAR = {1880}, +} + +@ARTICLE{Babbage1821, + AUTHOR = "Babbage, C.", + TITLE = "Observations on the notation employed in the calculus of functions", + JOURNAL = "Transactions of the Cambridge Philosophical Society", + YEAR = "1821", + volume = "I", + part = "I", + pages = "63--76", +} + +@ARTICLE{Babbage1827, + AUTHOR = "Babbage, C.", + TITLE = "On the influence of Signs in Mathematical Reasoning", + JOURNAL = "Transactions of the Cambridge Philosophical Society", + YEAR = "1827", + volume = "II", + part = "II", + pages = "325--377", +} + +@ARTICLE{Babbage1830, + AUTHOR = "Babbage, C.", + TITLE = "On notations", + JOURNAL = "Edinburgh Encyclopedia", + YEAR = "1830", + volume = "15", + pages = "394--9", +} + +@Book{Babbage1864, + AUTHOR = "Babbage, C.", + TITLE = "Passages from the Life of a Philosopher", + YEAR = "1864", + publisher = "Longman, Green, Longman, Roberts and Green", + address = "London", +} +# https://en.wikisource.org/wiki/Passages_from_the_Life_of_a_Philosopher + +@ARTICLE{Babbage1948, + AUTHOR = {Babbage, R.~H.}, + TITLE = {The Work of {C}harles {B}abbage}, + JOURNAL = {Annals of the Computation Laboratory of Harvard University}, + YEAR = {1948}, + volume = {16}, +} + +@ARTICLE{Babinski2003, + author = {Babinski, H.}, + title = {How do wings work?}, + journal = {Physics Education}, + year = {2003}, + volume = {38}, + number = {6}, + pages = {497--503}, +} + +@BOOK{Bauldry1995, + author = {Bauldry, W.~C. and Evans, B. and Johnson, J.}, + title = {Linear Algebra with {Maple}}, + publisher = {John Wiley and Sons}, + year = {1995}, + address = {New York, UAS}, +} + +@BOOK{Baylis1988, + author = {Baylis, J. and Haggarty, R.}, + title = {Alice in Numberland}, + publisher = {MacMillan Education}, + year = {1988}, + address = {London, UK}, +} + +@BOOK{Beardon2009, + author = {Beardon, A.~F.}, + title = {Creative Mathematics: A Gateway to Research }, + publisher = {Cambridge University Press}, + year = {2009}, + series = {AIMS Library of Mathematical Sciences}, + address = {Cambridge, United Kingdom}, + isbn = {978-0521130592}, +} + +@article{Beeson1992b, + title = {Triangles with Vertices on Lattice Points}, + author = {Beeson, M.~J.}, + journal = {The American Mathematical Monthly}, + volume = {99}, + number = {3}, + pages = {243--252}, + url = {http://www.jstor.org/stable/2325060}, + year = {1992}, +} + +@book{Beiler1964, + author = "Beiler,A.~H.", + title = "Recreations in the Theory of Numbers", + publisher = "Dover", + address = "New York", + year = 1964} + +@ARTICLE{Belson2002, + author = {Beldon, T. and Gardiner, T.}, + title = {Triangular Numbers and Perfect Squares}, + journal = {The Mathematical Gazette}, + year = {2002}, + volume = {86}, + number = {507}, + pages = {423--431}, + month = {Nov}, + doi = {10.2307/3621134}, +} + + +@ARTICLE{Bellhouse2004, + author = {Bellhouse, D.~R.}, + title = {The Reverend {Thomas Bayes}, {FRS}: A Biography to Celebrate the Tercentenary of His Birth}, + journal = {Statistical Science}, + year = {2004}, + volume = {19}, + number = {1}, + pages = {3--43}, + doi = {10.1214/088342304000000189}, +} + +@BOOK{Berkeley1734, + AUTHOR = {Berkeley, G.}, + TITLE = {The Analyst; or, a discourse addressed to an Infidel Mathematician}, + PUBLISHER = {J. Tonson}, + address = {The Strand, London}, + YEAR = {1734}, +} + +@ARTICLE{Bickley1938, + AUTHOR = {Bickley, W.~G.}, + TITLE = {{\S} 1324. {A}n adventure with limits}, + JOURNAL = GAZ, + YEAR = {1936}, + volume = {22}, + number = {251}, + pages = {404--405}, + month = {October}, +} + +@ARTICLE{Bilodeau1982, + AUTHOR = {Bilodeau, G.~G.}, + TITLE = {The origin and early development of non-analytic infinitely differentiable functions}, + JOURNAL = {Archive for History of Exact Sciences}, + YEAR = {1982}, + volume = {27}, + number = {2}, + pages = {115--135}, + month = {June}, +} +# DOI 10.1007/BF00348345 + +@ARTICLE{Biggins2013, + author = {Biggins, J.~S. and Warner, M.}, + title = {Understanding the Chain Fountain}, + journal = {Royal Society (?)}, + year = {2013}, +} + + +@BOOK{Bird1767, + AUTHOR = {Bird, J.}, + TITLE = {The Method of Dividing Astronomical Instruments}, + PUBLISHER = {John Nourse, London}, + YEAR = {1767}, +} + +@book{Bolt1984, + Title = {The Amazing Mathematical Amusements Arcade}, + Author = {Bolt,~B.}, + Publisher = {Cambridge University Press}, + Year = {1984}, + ISBN = {978-0521269803} +} + +@BOOK{BoltHiscocks, + author = {Bolt, A.~B. and Hiscocks, J.~E.}, + title = {Machines, Mechanisms and Mathematics}, + publisher = {Chatto and Windus, London}, + year = {1970}, +} # ISBN 070100455 + + +@BOOK{Bond1887, + AUTHOR = {Bond, G.~E.}, + TITLE = {Standards of Length and their Practical Application}, + PUBLISHER = {The {P}ratt and {W}hitney Company}, + YEAR = {1887}, +} + +@ARTICLE{Bondi1986, + author = {Bondi, H.}, + title = {The Rigid Body Dynamics of Unidirectional Spin}, + journal = {Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences}, + year = {1986}, + volume = {405}, + pages = {265--274}, + month = {June}, +} +# http://www.jstor.org/stable/2397977 + +@BOOK{Boole1847, + author = {Boole, G.}, + title = {The Mathematical Analysis of Logic, being an essay towards a calculus of deductive reasoning}, + publisher = {MacMillian, Barclay, \& MacMillan}, + address = {Cambridge, UK}, + year = {1847}, +} + +@UNPUBLISHED{Borovik2005, + AUTHOR = {Borovik, A. and Gardiner, T.}, + TITLE = {A Dozen Problems}, + NOTE = {Meeting report from ``Where will the next generation of UK mathematicians come from?"}, + year = {2005}, + source = {\href{http://manchester.academia.edu/AlexandreBorovik/Papers/370441/A_dozen_problems}{\verb#http://manchester.academia.edu/AlexandreBorovik/Papers/370441/A_dozen_problems#}}, +} +#http://manchester.academia.edu/AlexandreBorovik/Papers/370441/A_dozen_problems + +@ARTICLE{Borovik2012, + AUTHOR = {Borovik, A. and Katz, M.~G.}, + title = {Who Gave You the {Cauchy--Weierstrass} Tale? The Dual History of Rigorous Calculus}, + journal = {Foundations of Science}, + year = {2012}, + volume = {17}, + number = {3}, + pages = {245--276}, + doi = {10.1007/s10699-011-9235-x} +} + +@INBOOK{Borovik2016, + author = {Borovik, A.~V.}, + title = {Mathematical Cultures: The London Meetings 2012-14}, + chapter = {Calling a spade a spade: Mathematics in the new pattern of division of labour}, + publisher = {Springer}, + year = {2016}, +} +# ISBN 978-3-319-28580-1 +# goo.gl/TT6ncO + + +@BOOK{Bourne1846, + AUTHOR = {Bourne, J.}, + TITLE = {A Treatise on the Steam Engine in its application to Mines, Mills, Steam Navigation and Railways}, + PUBLISHER = {Longman, Brown, Green and Longmans}, + YEAR = {1846}, +} + +@BOOK{Boyer1959, + AUTHOR = {Boyer, C.~B.}, + TITLE = {The History of the Calculus and Its Conceptual Development}, + PUBLISHER = {Dover}, + YEAR = {1959}, +} + +@BOOK{Bradley2010, + AUTHOR = {Bradley, C.~J.}, + TITLE = {Introduction to Inequalities}, + PUBLISHER = {The United Kingdom Mathematics Trust}, + YEAR = {2010}, +} + +@BOOK{Brancker1668, + author = {Brancker, T. and Pell, J. and Rahn, J.~H.}, + title = {An Introduction to Algebra}, + publisher = {Printed by W.G.~for Moses Pitt}, + year = {1668}, + address = {London, UK}, +} +# http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_id=xri:eebo:citation:12255003 + +@ARTICLE{Brewster1942, + AUTHOR = "Brewster, G.~W.", + TITLE = "Ovals of constant diameter", + JOURNAL = GAZ, + YEAR = "1942", + volume = "26", + number = "269", + pages = "97--99", + month = "May", +} + +@BOOK{Browne2000, + AUTHOR = {Browne, C.}, + TITLE = {Hex Strategy: Making the Right Connections}, + PUBLISHER = {A K Peters/CRC Press}, + YEAR = {2000}, +} +# See also Haywood2019 + +@BOOK{Browne2005, + AUTHOR = {Browne, C.}, + TITLE = {Connection Games: Variations On A Theme}, + PUBLISHER = {A K Peters/CRC Press}, + YEAR = {2005}, +} + +@ARTICLE{Brunton1973, + AUTHOR = "Brunton, J.", + TITLE = "The cube dissected into three y\'{a}ngm\v{a}", + JOURNAL = GAZ, + YEAR = "1973", + volume = "57", + number = "399", + pages = "66--67", + month = "February", +} + +@manual{BS939, + author = {{BS 939}}, + title = {Engineers' squares (including cylindrical and block squares)}, + organization = {{British~Standards~Institute}}, + note = {BS 939:1977}, + year = {1977}, +} + +@manual{BS3730, + author = {{BS 3730}}, + title = {Assessment of departures from roundness}, + organization = {{British~Standards~Institute}}, + note = {BS 3730:1987}, + year = {1987}, +} + +@manual{BS6727, + author = {{BS 6727}}, + title = {Specification for representation of numerical values in character strings for information interchange}, + organization = {{British~Standards~Institute}}, + note = {{BS 6727:1987}}, + year = {1987}, +} + +@manual{BS14977, + author = {BSI}, + title = {Information technology. Syntactic Metalanguage. Extended {BNF}}, + organization = {{British~Standards~Institute}}, + note = {{BS ISO/IEC 14977:1996}}, + year = {1996}, +} + +@inproceedings{Buchberger1997, + author = {B. Buchberger}, + title = {Introduction to {G}roebner Bases}, + booktitle = {Logic of Computation}, + series = {NATO ASI Series, Series F: Computer and Systems Sciences}, + volume = {157}, + pages = {35--66}, + publisher = {Springer-Verlag, Berlin}, + isbn_issn = {ISBN 3-540-62963-7}, + year = {1997}, + annote = {1997-00-00-D}, + editor = {H.Schwichtenberg}, +} + +@PHDTHESIS{Buchberger1965, + AUTHOR = {Buchberger, B.}, + TITLE = {Ein Algorithmus zum Auffinden der Basis Elemente des Restklassenrings nach einem nulldimensionalen Polynomideal}, + SCHOOL = {University of Innsbruck}, + YEAR = {1965}, + note = {(An Algorithm for Finding a Basis for the Residue Class Ring of a Zero-Dimensional Polynomial Ideal)}, + url = {http://www.ricam.oeaw.ac.at/Groebner-Bases-Bibliography/gbbib_files/publication_706.pdf} +} + +@article{Buchberger2006, + title = {{B}runo {B}uchberger's {PhD} thesis 1965: An algorithm for finding the basis elements of the residue class ring of a zero dimensional polynomial ideal}, + author = {Buchberger, B.}, + journal = {Journal of symbolic computation}, + volume = {41}, + number = {3--4}, + pages = {475--511}, + year = {2006}, + publisher = {Elsevier}, + doi = {10.1016/j.jsc.2005.09.007}, + issn = {07477171}, + url = {http://linkinghub.elsevier.com/retrieve/pii/S0747717105001483}, +} + +@BOOK{Budden1968, + AUTHOR = {Budden, F.~J.}, + TITLE = {Complex numbers and their applications}, + PUBLISHER = {Longmans}, + YEAR = {1968}, +} + +@BOOK{Budden1972, + AUTHOR = {Budden, F.~J.}, + TITLE = {The Fascination of Groups}, + PUBLISHER = {Cambridge University Press}, + Address = {London, UK}, + YEAR = {1972}, +} + +@ARTICLE{Buddenhagen1992, + AUTHOR = {Buddenhagen, J. and Ford, C.}, + TITLE = {Nice Cubic Polynomials, Pythagorean Triples, and the Law of Cosines}, + JOURNAL = {Mathematics Magazine}, + YEAR = {1992}, + volume = {64}, + number = {4}, + pages = {244--249}, + month = {October}, +} + +@BOOK{Burn1987, + AUTHOR = {Burn, R.~P.}, + TITLE = {Groups: A Path to Geometry}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1987}, +} + +@BOOK{Burn1996, + AUTHOR = {Burn, R.~P.}, + TITLE = {A Pathway into Number Theory}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1996}, +} + +@BOOK{Burn2000, + AUTHOR = {Burn, R.~P.}, + TITLE = {Numbers and Functions: Steps to Analysis}, + PUBLISHER = {Cambridge University Press}, + YEAR = {2000}, +} + + +@BOOK{Buxton1987, + AUTHOR = {Buxton, H.~W. and Hyman, A.}, + TITLE = {Memoir of the Life and Labours of the Late Charles Babbage}, + PUBLISHER = {MIT Press}, + YEAR = {1987}, +} + + +@BOOK{Cadwell1966, + AUTHOR = "Cadwell, J.~H.", + TITLE = "Topics in Recreational Mathematics", + PUBLISHER = "Cambridge University Press", + YEAR = "1966", +} + +@BOOK{Cajori1896, + author = {Cajori, F.}, + title = {A history of elementary mathematics: with hints on methods of teaching}, + publisher = {MacMillan}, + year = {1896}, +} + +@BOOK{Cajori1909, + author = {Cajori, F.}, + title = {A History of the Logarithmic Slide Rule}, + publisher = {J.F. Tapley Co. New York"}, + year = "1909", + note= {"Note, this book contains a flawed conclusion as to the priority of the invention of the slide rule. See \cite{Cajori4}.} +} + +@article{Cajori1910, + title = {Attempts Made During the Eighteenth and Nineteenth Centuries to Reform the Teaching of Geometry}, + author = {Cajori, F.}, + journal = {The American Mathematical Monthly}, + volume = {17}, + number = {10}, + pages = {181--201}, + url = {http://www.jstor.org/stable/2973645}, + ISSN = {00029890}, + year = {1910}, + publisher = {Mathematical Association of America}, +} + +@ARTICLE{Cajori1913a, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, I}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {1}, + pages = {5--14}, +} + +@ARTICLE{Cajori1913b, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, II}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {2}, + pages = {35--47}, +} + +@ARTICLE{Cajori1913c, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, III}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {3}, + pages = {75--84}, +} + +@ARTICLE{Cajori1913d, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, IV}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {4}, + pages = {107--117}, +} + +@ARTICLE{Cajori1913e, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, V}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {5}, + pages = {148--151}, +} + +@ARTICLE{Cajori1913f, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, VI}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {5}, + pages = {173--182}, +} + +@ARTICLE{Cajori1913g, + author = {Cajori, F.}, + title = {History of the exponential and logarithmic concepts, VII}, + journal = {American Mathematical Monthly}, + year = {1913}, + volume = {20}, + number = {5}, + pages = {205--210}, +} + +@BOOK{Cajori1916, + author = {Cajori, F.}, + title = "{W}illiam {O}ughtred, a great seventeenth-century teacher of mathematics", + publisher = "Open Court", + year = "1916" +} + +@article{Cajori1918, + author = {Cajori, F.}, + title = {Origin of the Name ``Mathematical Induction''}, + journal = {The American Mathematical Monthly}, + year = {1918}, + volume = {25}, + number = {5}, + pages = {197--201}, + publisher = {Mathematical Association of America}, + URL = {http://www.jstor.org/stable/2972638}, +} + +@ARTICLE{Cajori1920, + author = {Cajori, F.}, + title = "On the history of {G}unter's scale and the slide rule during the Seventeenth Century", + journal = "University of California publications in mathematics", + year = "1920", + volume = "1", + number = "9", + pages = "187--209", + month = "February", +} + +# Book is in Paper achive +@BOOK{Cajori1928, + author = {Cajori, F.}, + title = {A history of mathematical notations}, + publisher = {Open Court}, + address = {La Salle, Illionis}, + year = {1928}, +} + +@ARTICLE{Caldwell2012, + AUTHOR = {Caldwell, C.~K. and Xiong, Y.}, + TITLE = {What is the smallest prime?}, + JOURNAL = {arXiv}, + YEAR = {2012}, + volume = {1209.2007v1}, + source = {arXiv:1209.2007v1}, +} +#http://arxiv.org/abs/1209.2007 + +@INPROCEEDINGS{Calerio2007, + author = {Calerio, C. and Gon\c{c}alves, R.}, + title = {On the algebraization of many-sorted logics}, + booktitle = {Recent Trends in Algebraic Development Techniques: 18th International Workshop, WADT 2006, La Roche en Ardenne, Belgium, June 1-3, 2006}, + year = {2007}, + pages = {21--36}, +} +# ISBN 978-3-540-71997-7. + +@BOOK{Cardano1545, + AUTHOR = {Cardano, G.}, + TITLE = {Ars Magna, sive de Regulis Algebraicis}, + PUBLISHER = {Nuremberg}, + YEAR = {1545}, +} + +@Book{Cardano1993, + author = {Cardano, G.}, + title = {Ars magna, or, The rules of algebra}, + publisher = {Dover}, + year = {1993}, + address = {New York}, +} + +@book{Carroll1936, + Author = {Carroll,~L.}, + Title = {The Complete Works of Lewis Carroll [Pseud.]}, + Publisher = {Modern Library}, + Year = {1936} +} + +@ARTICLE{Casselman2000, + author = {Casselman, B.}, + title = {Pictures and proofs}, + journal = {Notices of the AMS}, + year = {2000}, + volume = {47}, + number = {10}, + pages = {1257--1266}, + month = {November}, +} + +@article{Cayley1858, + title = {A Memoir on the Theory of Matrices}, + author = {Cayley, A.}, + journal = {Philosophical Transactions of the Royal Society of London}, + volume = {148}, + pages = {17--37}, + url = {http://www.jstor.org/stable/108649}, + ISSN = {02610523}, + year = {1858}, + publisher = {The Royal Society}, +} + +@BOOK{Chapman1990, + AUTHOR = {Chapman, A.}, + TITLE = {Dividing the Circle. The Development of Critical Angular Measurement in Astronomy 1500--1850}, + PUBLISHER = {Ellis Horwood}, + YEAR = {1990}, +} + +@BOOK{ChaucerAstro, + AUTHOR = {Chaucer, G.}, + TITLE = {A Treatise on the Astrolabe}, + PUBLISHER = {The early {E}nglish text society, London 1872}, + YEAR = {1391}, + volume = {16}, + series = {Extra Series}, +} +## editor = {Skeat, W.~W.}, + +@INCOLLECTION{Chakerian1983, + AUTHOR = {Chakerian, G. D. and Groemer, H. }, + TITLE = {Convex bodies of constant width}, + BOOKTITLE = {Convexity and its Applications}, + PUBLISHER = {Birkhauser}, + YEAR = {1983}, + editor = {Gruber, P.~M. and Wills, J.~M.}, + pages = {49--96}, +} + +@ARTICLE{Chemin2017, + author = {Chemin, A. and Besserve, P. and Caussarieu, A. and Taberlet, N. and Plihon, N.}, + title = {Magnetic cannon: The physics of the {Gauss} rifle}, + journal = {American Journal of Physics}, + year = {2017}, + volume = {85}, + number = {7}, + doi = {10.1119/1.4979653}, +} + +@ARTICLE{Christoph1985, + author = {Christoph, W.}, + title = {A Mechanical Solution of Schubert's Steamroller by Many-Sorted Resolution}, + journal = {Artificial Intelligence}, + year = {1985}, + volume = {26}, + number = {2}, + pages = {217--224}, + doi = {10.1016/0004-3702(85)90029-3}, +} + +@article{Clark2102, + Title = {The Instructor's Guide to Real Induction}, + Author = {Clark, P.~L.}, + Year = {2012}, + Journal = {arXiv}, + Number = {arXiv:1208.0973}, +} + + +@ARTICLE{Cole1972, + AUTHOR = {Cole, D.~E.}, + TITLE = {The {W}ankle Engine}, + JOURNAL = SIAM, + YEAR = {1972}, + volume = {227}, + number = {2}, + pages = {14--23}, + month = {August}, +} + +@BOOK{Colson1736, + AUTHOR = {Newton, I.}, + TITLE = {The method of fluxions and infinite series}, + PUBLISHER = {Henry Woodfall, London}, + YEAR = {1736}, + edition = {Translated by {Colson, J.}}, +} +# http://archive.org/details/methodfluxionsa00newtgoog + +@BOOK{Coletta2010, + author = {Coletta, V.~P.}, + title = {Physics Fundamentals}, + publisher = {Physics Curriculum and Instruction Inc.}, + year = {2010}, + address = {Lakeville, Minessota}, + edition = {2nd}, + isbn = {978-0-9713134-5-3}, +} + + +@article{Colwell1986, + title = {70.36 A Method for Summing Generalised Arithmetic-Geometric Series}, + author = {Colwell, D. J. and Gillett, J. R.}, + journal = {The Mathematical Gazette}, + volume = {70}, + number = {453}, + date = {Oct}, + pages = {225--226}, + url = {http://www.jstor.org/stable/3615689}, + ISSN = {00255572}, + year = {1986}, +} + +@ARTICLE{Connelly1977, + author = {Connelly, R.}, + title = {A counterexample to the rigidity conjecture for polyhedra}, + journal = {Publications Math\'{e}matiques de l'Institut des Hautes \'{E}tudes Scientifiques }, + year = {1977}, + volume = {47}, + number = {1}, + pages = {333--338}, + doi = {10.1007/BF02684342}, +} + +@ARTICLE{Conway1968, + author = {Conway, J.~H. and Guy, R.~K.}, + title = {Problem 66--12, Stability of Polyhedra}, + journal = {SIAM Review}, + year = {1969}, + volume = {11}, + number = {1}, + pages = {78--82}, + month = {January}, +} + +@BOOK{Corfield2003, + author = {Corfield, D.}, + title = {Towards a Philosophy of Real Mathematics}, + year = {2003}, + publisher = {Cambridge University Press}, +} + +@ARTICLE{Craik2000, + author = {Craik, A.~D.~D.}, + title = {Geometry versus Analysis in Early Nineteenth-Century {Scotland}: {John Leslie, William Wallace, and Thomas Carlyle}}, + journal = {Historia Mathematica}, + year = {2000}, + volume = {27}, + number = {2}, + pages = {133--163}, + month = {May}, +} + +@ARTICLE{Crathorne1908, + author = {Crathorne, A.~R.}, + title = {The {P}rytz Planimeter}, + journal = {The American Mathematical Monthly}, + year = {1908}, + volume = {15}, + number = {3}, + pages = {55--57}, + month = {Mar}, +} + + +@BOOK{Cresci1560, + AUTHOR = "Giovanni Francesco Cresci Milanese", + TITLE = "Essemplare dr priv sorti lettres", + PUBLISHER = "Rome", + YEAR = "1560", + note = "Edited and translated by Osley, A.~S., London, 1968", +} + +@ARTICLE{Crilly2012, + author = {Crilly, T.}, + title = {96.32 The ‘sums of squares’ formula – a reprise}, + journal = {The Mathematical Gazette}, + year = {2012}, + volume = {96}, + number = {536}, + pages = {269--271}, + month = {July}, + source = {10.1017/S0025557200004538}, +} + +@ARTICLE{Cross2013, + author = {Cross, R.}, + title = {Rocking and Rolling Rattlebacks}, + journal = {The Physics Teacher}, + year = {2013}, + volume = {51}, + number = {9}, + pages = {544-545}, + month = {December}, + doi = {10.1119/1.4830068}, +} +# http://dx.doi.org/10.1119/1.4830068 + +@ARTICLE{Crowe1975, + author = {Crowe, M.}, + title = {Ten `laws' concerning patterns of change in the history of mathematics}, + journal = {Historia Mathematica}, + year = {1975}, + volume = {2}, + pages = {161-166}, +} + + +@BOOK{Cundy, + author = {H.~M.~Cundy and A.~P.~Rollet}, + title = {Mathematical Models}, + publisher = OUP, + year = {1961}, +} + +@ARTICLE{Cundy1984, + author = {H.~M.~Cundy}, + TITLE = {A direct proof of {M}orley's theorem}, + JOURNAL = GAZ, + YEAR = {1984}, + volume = {68}, + number = {444}, + pages = {112--119}, + month = {June}, +} +# Morley's theorem + +@BOOK{Cuoco1990, + author = {Cuoco, A.}, + title = {Investigations in Algebra}, + publisher = {The MIT Press}, + year = {1990}, + address = {Cambridge, Massachusetts}, +} + + +@ARTICLE{Cuoco2000, + author = {Cuoco, A.}, + title = {Meta-Problems in Mathematics}, + journal = {The College Mathematics Journal}, + year = {2000}, + volume = {31}, + number = {5}, + pages = {373--378}, + month = {November}, + doi = {10.2307/2687452}, +} + +@BOOK{Cupillari2001, + author = {Cupillari, A.}, + title = {The nuts and bolts of proof}, + publisher = {Academic Press}, + year = {2001}, + address = {London}, +} + +@article{Chuquet1880, + title={{Le Triparty en la Science des Nombres, {\'e}d. A.~Marre}}, + author={Chuquet, N.}, + journal={Bullettino di Bibliografia e di Storia delle scienze matematiche et fisiche}, + volume={13}, + pages={555--659}, + year={1880} +} + + +@BOOK{Dagnall1996, + AUTHOR = {Dagnall, H.}, + TITLE = {Let's Talk Roundness}, + PUBLISHER = {Taylor Hobson Pneumo}, + YEAR = {1996}, +} + +@BOOK{Davenport1970, + AUTHOR = {Davenport, H.}, + TITLE = {The Higher Arithmetic}, + PUBLISHER = {Hutchinson University Library}, + YEAR = {1970}, + edition = {fourth}, +} + +@BOOK{Davis1982, + author = {Davis, P.~J. and Hersh, R.}, + title = {The Mathematical Experience}, + publisher = {Houghton Mifflin}, + year = {1982}, +} + +@UNPUBLISHED{Davis2003, + author = {Davis, T.}, + title = {Pick's Theorem}, + year = {2003}, +} +#http://www.geometer.org/mathcircles/pick.pdf + +@BOOK{DeBono1967, + AUTHOR = {de Bono, E.}, + TITLE = {New Think: The Use of Lateral Thinking}, + PUBLISHER = {Jonathan Cape}, + YEAR = {1967}, +} + +@BOOK{DeCelle, + author = {De Celle, B.}, + title = {La Gnomonique pratique}, + publisher = {Paris}, + year = {1760}, +} + +@BOOK{Dedekind1963, + author = {Dedekind, R.}, + title = {Essays on the Theory of Numbers}, + publisher = {Dover}, + year = {1963}, + address = {New York}, +} + +@BOOK{Demidovich1973, + author = {Demidovich, B.}, + title = {Problems in Mathematical Analysis}, + publisher = {MIR Moscow}, + year = {1973}, +} + +@ARTICLE{Derham1717, + AUTHOR = {Derham, W.}, + TITLE = {Extracts from {M}r {G}ascoigne's and {M}r {C}rabtree's letters, proving {M}r {G}ascoigne to have been the Inventor of the Telescopick Sights of Mathematical Instruments, and not the {F}rench}, + JOURNAL = {Philosophical Transactions}, + YEAR = {1717}, + volume = {30}, + pages = {603--610}, +} + +@BOOK{Descartes1952, + title = {{The geometry of Ren{\'e} Descartes; translated from the French and Latin by D.~E.~Smith and M.~L.~Latham}}, + author = {Descartes, R.}, + year = {1952}, + publisher = {Open Court} +} + +@ARTICLE{DeTemple1974, + author = {DeTemple, D. and Rovertson, J.~M.}, + title = {The Equivalence of Euler's and Pick's Theorems}, + journal = {Mathematics Teacher}, + year = {1974}, + volume = {67}, + number = {3}, + pages = {222--226}, + month = {March}, +} + +@BOOK{Dickinson1963, + AUTHOR = "Dickinson, H.~W.", + TITLE = "A Short History of the Steam Engine", + PUBLISHER = "Frank Cass", + YEAR = "1963", + edition = "2nd", +} + +@ARTICLE{Dirac1928, + author = {Dirac, P.~A.~M.}, + title = {The quantum theory of the electron}, + journal = {Proceedings of the Royal Society of London. Series A, Containing Papers of a Mathematical and Physical Character}, + year = {1928}, + volume = {117}, + number = {778}, + pages = {610--624}, +} + +@BOOK{Djukic2011, + AUTHOR = {Djuki\'{c}, D and Jankovi\'{c}, V. and Mati\'{c}, I. and Petrovi\'{c}, N.}, + TITLE = {The IMO Compendium: A Collection of Problems Suggested for International Mathematical Olympiads 1959--2009}, + PUBLISHER = {Springer}, + YEAR = {2011}, + edition = {Second}, + isbn = {978-1441998538}, +} +# http://www.imomath.com/index.php?options=8&lmm=4 + +@BOOK{Doets2004, + author = {Doets, K. and van Eijck, J.}, + title = {The Haskell Road to Logic, Maths and Programming}, + year = {2004}, + publisher = {Kings College Publications}, + address = {London, UK}, + series = {Texts in Computing}, + volume = {4}, + isbn = {978-0954300692} +} +#https://fldit-www.cs.uni-dortmund.de/~peter/PS07/HR.pdf + +@BOOK{Dorrie1932, + AUTHOR = {Dorrie, H.}, + TITLE = {100 Great Problems of Elementary Mathematics: their history and solution}, + PUBLISHER = {Dover}, + YEAR = {1965}, +} + +@BOOK{Downs2003, + AUTHOR = {Downs, J.~W.}, + TITLE = {Practical Conic Sections: The Geometric Properties of Ellipses, Parabolas and Hyperbolas}, + PUBLISHER = {Dover}, + YEAR = {2003}, +} + +@BOOK{Dudeney1919, + author = {Dudeney, H.~E.}, + title = {The {C}anterbury Puzzles}, + publisher = {Thomas Neslon, London}, + year = {1919}, + edition = {second}, +} + +@BOOK{Dudeney1917, + author = {Dudeney, H.~E.}, + title = {Amusements in Mathematics}, + publisher = {Thomas Neslon, London}, + year = {1917}, +} + +@BOOK{Dudeney1932, + author = {Dudeney, H.~E.}, + title = {Puzzles and Curious Problems}, + publisher = {Thomas Neslon, London}, + year = {1932}, +} + + +@BOOK{Dunkerley1912, + AUTHOR = "Dunkerley, S.", + TITLE = "Mechanism", + PUBLISHER = "Longmans, Green and Co.", + YEAR = "1912", +} + + +@book{Eastaway1995, + Title = {The {G}uinness Book of Mindbenders}, + Author = {Eastaway,~R. and Wells,~D.}, + Publisher = {Guinness World Records Limited}, + Year = {1995}, + ISBN = {978-0851126685} +} + +@Article{Eastwood2000, + author = {Eastwood, M. and Penrose, R.}, + title = {Drawing with complex numbers}, + journal = {Mathematical Intelligencer}, + year = {2000}, + volume = {22}, + number = {4}, + pages = {8--13}, +} +# http://arxiv.org/pdf/math/0001097v1.pdf + +@BOOK{Edwards1979, + author = "Edwards, C.~H.", + title = "The Historical Development of the Calculus", + publisher = "Springer-Verlag", + year = "1979", +} +# PDF in Paper Archive. + +@BOOK{Euclid, + author = {Euclid}, + title = {The Thirteen books of {E}uclid's {E}lements, with introduction and commentary by {S}ir {T}homas {H}eath}, + publisher = {Dover}, + year = {1956}, +} + +@MISC{EuclidOnline, + author = {Joyce, D.~E.}, + title = {Euclid's Elements online}, + howpublished = {{\tt http://aleph0.clarku.edu/~djoyce/java/elements/elements.html}}, + year = {1998}, +} + + +@BOOK{EulerIAI1, + author = {Euler, L.}, + title = {Introduction to Analysis of the Infinite}, + publisher = {Springer}, + year = {1988}, + volume = {I}, + note = {Translated by {B}lanton, {J}.~from the Latin {\em Introductio in Analysin Infinitorum, 1748}}, +} +# See Rickey2002 + +@BOOK{EulerIAI2, + author = {Euler, L.}, + title = {Introduction to Analysis of the Infinite}, + publisher = {Springer}, + year = {1990}, + volume = {II}, + note = {Translated by {B}lanton, {J}.~from the Latin {\em Introductio in Analysin Infinitorum, 1748}}, +} + +@BOOK{EulerFDC, + author = {Euler, L.}, + title = {Foundations of Differential Calculus}, + publisher = {Springer}, + year = {2000}, + note = {Translated by {B}lanton, {J}. from the Latin {\em Institutiones Calculi Differentialis, 1755}}, +} + +@BOOK{Euler1822, + author = {Euler, L.}, + title = {Elements of algebra}, + publisher = {Longman, Hurst, Rees, Orme and Co.}, + address = {London, UK}, + year = {1822}, + edition = {3rd}, + note = {Translated from the French, with the notes of M.~Bernoulli and the Additions of M.~de La Grange, by Hewlett, J.}, +} + +@ARTICLE{EulerConstWidth, + AUTHOR = "Euler, L.", + TITLE = "De curvis triangularibus", + JOURNAL = "Acta Academiae Scientiarum Imperialis Petropolitanea", + YEAR = "1778", + volume = "2", + pages = "3--30", +} + +@ARTICLE{Euler-E147, + AUTHOR = "Euler, L.", + TITLE = "On an Apparent Contradiction in the Doctrine of Curved Lines", + JOURNAL = "Memoires de l'academie des sciences de {Berlin}", + YEAR = "1750", + volume = "4", + pages = "219-233", +} +# Opera Omnia: Series 1, Volume 26, pp. 33 - 45 + +@BOOK{Euler-E168-Leapfrog, + AUTHOR = {Euler, L.}, + TITLE = {On the controversy between {M.~Leibniz} and {M.~Bernoulli} about the logarithms of negative and imaginary numbers}, + PUBLISHER = {Leapfrogs}, + YEAR = {1978}, + isbn = {0905531140}, + note = {See also {Enestr\"{o}m's} {E168} and also {E807}}, +} +# See also Cajori1913b +# See also Euler-E168. +# See also Euler-E807 + +@ARTICLE{Euler-E168, + author = {Euler, L.}, + title = {De la controverse entre Mrs. Leibnitz et Bernoulli sur les logarithmes des nombres negatifs et imaginaires}, + journal = {Memoires de l'academie des sciences de Berlin}, + year = {1751}, + volume = {5}, + pages = {139--179}, + note = {(E168, Opera Omnia: Series 1, Volume 17, pp. 195 -- 232)}, +} +# http://eulerarchive.maa.org/pages/E168.html + +@ARTICLE{Euler-E807, + author = {Euler, L.}, + title = {Sur les logarithmes des nombres negativs et imaginaires}, + journal = {Opera Postuma}, + year = {1862}, + volume = {1}, + pages = {269--281}, + note = {(E807, Opera Omnia: Series 1, Volume 19, pp. 417 -- 438)}, +} +# http://eulerarchive.maa.org/pages/E807.html + +@ARTICLE{E352, + AUTHOR = {Euler, L.}, + TITLE = {Remarques sur un beau rapport entre les s\'{e}ries des puissances tant directes que r\'{e}ciproques.}, + JOURNAL = {M\'{e}moires de l'acad\'{e}mie des sciences de Berlin}, + YEAR = {1768}, + volume = {17}, + pages = {83--106}, + note = {\href{http://math.dartmouth.edu/~euler/docs/translations/E352.pdf}{http://math.dartmouth.edu/~euler/docs/translations/E352.pdf}}, +} +# http://math.dartmouth.edu/~euler/docs/translations/E352.pdf + +@misc{wiki:Euler, + author = {{Euler diagram}}, + title = {Euler diagram --- {Wikipedia}{,} The Free Encyclopedia}, + year = {2018}, + url = {\url{https://en.wikipedia.org/wiki/Euler_diagram}}, + note = {[Online; accessed 27-March-2018]} +} + +@ARTICLE{Eisner, + author = {Eisner, L.}, + title = {Leaning tower of The Physical Reviews}, + journal = {American Journal of Physics}, + year = {1959}, + volume = {27}, + number = {2}, + pages = {121--122}, + month = {February}, +} + +@BOOK{Emmerson1977, + AUTHOR = "Emmerson, G.~S.", + TITLE = "John Scott Russell", + PUBLISHER = "John Murray, London", + YEAR = "1977", +} + +@ARTICLE{Ernst, + author = {Ernst, B.}, + title = {Equator Projection Sundials}, + journal = {Journal of the British Astronomical Association}, + year = {1986}, + volume = {97}, + number = {1}, + pages = {??}, +} + +@ARTICLE{Evans1971, + AUTHOR = {Evans, L.}, + TITLE = {On ``Rotating" Ellipses Inside Triangles}, + JOURNAL = {Mathematics Magazine}, + YEAR = {1971}, + volume = {44}, + number = {1}, + pages = {28--33}, + month = {Jan}, +} + + +@ARTICLE{Fahmi1965, + AUTHOR = "Fahmi, N", + TITLE = "On note 3022---Trisection of the angle", + JOURNAL = GAZ, + YEAR = "1965", + volume = "49", + number = "367", + pages = "80--81", + month = "February", +} + +@ARTICLE{Farthing1985, + AUTHOR = "Farthing, S.", + TITLE = "Theory of the hatchet planimeter", + JOURNAL = "Proceedings of the {I}ndia {A}cademy of {S}ciences: S{\={a}}dhana{\={a}}", + YEAR = "1985", + volume = "8", + number = "4", + pages = "351--359", + month = "October", +} + +@ARTICLE{Ferdinands2007, + author = {Ferdinands, J.}, + title = {Finding Curves with Computable Arc Length}, + journal = {The College Mathematics Journal}, + year = {2007}, + volume = {38}, + number = {3}, + pages = {221-222}, +} + +@ARTICLE{Ferguson1962, + author = {Ferguson, E.~S.}, + title = {Kinematics of Mechanisms from the time of {W}att}, + journal = {United States National Museum Bulletin}, + number = {228}, + pages = {1962}, + annote = {Smithsonian Institute, Washington D.~C.}, +} + +@ARTICLE{Ferguson1977, + author = {Ferguson, E.~S.}, + title = {The Mind's Eye: Nonverbal Thought in Technology}, + journal = {Science}, + volume = {197}, + number = {4306}, + pages = {827--836}, + annote = {Smithsonian Institute, Washington D.~C.}, +} + +@BOOK{Ferrar1943, + author = {Ferrar, W.~L.}, + title = {Higher Algebra: a Sequal to Higher Algebra for Schools}, + publisher = {Oxford}, + year = {1943}, +} + + +@BOOK{Feynman1986, + AUTHOR = {Feynman, R.~P. and Hutchings, E.}, + TITLE = {Surely you're joking, Mr {F}eynman}, + PUBLISHER = {Bantam}, + YEAR = {1986}, +} + +@BOOK{Feynman1988, + AUTHOR = {Feynman, R.~P.}, + TITLE = {What to {\em you} care what other people think? Further Adventures of a Curious Character}, + PUBLISHER = {Gwyneth Feynman and Ralph Leighton}, + YEAR = {1988}, +} + + +@BOOK{Flamsteed1725, + AUTHOR = {Flamsteed, J.}, + TITLE = {Historia Coelestis Britannica}, + PUBLISHER = {H.~Meere, London}, + YEAR = {1725}, +} + + +@ARTICLE{Foote1998, + author = {Foote, R.~L.}, + title = {Geometry of the {P}rytz Planimeter}, + journal = {Reports on Mathematical Physics}, + year = {1998}, + volume = {42}, + pages = {249--271}, +} + +@article{Ford1938, + title = {Fractions}, + author = {Ford, L. R.}, + journal = {The American Mathematical Monthly}, + volume = {45}, + number = {9}, + pages = {586--601}, + url = {http://www.jstor.org/stable/2302799}, + ISSN = {00029890}, + language = {English}, + year = {1938}, + publisher = {Mathematical Association of America}, +} + +@ARTICLE{Foster-C-2012, + author = {Foster, C.}, + title = {Quadratic doublets}, + journal = {The Mathematical Gazette}, + year = {2012}, + volume = {96}, + number = {536}, + pages = {264--266}, + month = {July}, +} + +@ARTICLE{Fowler1985a, + author = {Fowler, D.}, + title = {400 Years of decimal fractions}, + journal = {Mathematics Teaching}, + year = {1985}, + volume = {110}, + pages = {20--21}, +} + +@ARTICLE{Fowler1985a, + author = {Fowler, D.}, + title = {400.25 Years of decimal fractions}, + journal = {Mathematics Teaching}, + year = {1985}, + volume = {111}, + pages = {30--31}, +} + +@UNPUBLISHED{Fowler2010, + AUTHOR = {Fowler, J.}, + TITLE = {little $o$ notation}, + NOTE = {Private Correspondence}, +} + #source = {\href{http://www.math.osu.edu/~fowler/teaching/handouts/ibl-analysis/little-oh.pdf}{http://www.math.osu.edu/~fowler/teaching/handouts/ibl-analysis/little-oh.pdf}}, + + +@ARTICLE{Frame1945, + author = {Frame, J.~S.}, + title = {Machines for solving algebraic equations}, + journal = {Math. Comp.}, + year = {1945}, + volume = {1}, + pages = {337--353}, + doi = {10.1090/S0025-5718-1945-0011196-2}, +} +# http://www.ams.org/journals/mcom/1945-01-009/S0025-5718-1945-0011196-2/ + +@article{Fraser1987, + title = {{Joseph Louis Lagrange's} algebraic vision of the calculus}, + author = {Fraser, C.~F.}, + journal = {Historia Mathematica}, + volume = {14}, + number = {1}, + pages = {38--53}, + year = {1987}, + issn = {0315-0860}, + doi = {10.1016/0315-0860(87)90002-4}, + url = {http://www.sciencedirect.com/science/article/B6WG9-4D7CNY9-5N/2/34b4f196f273a0e47aade50b5285063c}, +} + +@BOOK{Frederickson1997, + author = {Frederickson, G.~N.}, + title = {Dissections: Plane and Fancy}, + publisher = {Cambridge University Press}, + year = {1997}, +} # ISBN 0 521 811929, See Maths Gazette (88), March 2004, pg 183 for a review + +@BOOK{Frederickson2002, + author = {Frederickson, G.~N.}, + title = {Hinged dissections: swinging and twisting}, + publisher = {Cambridge University Press}, + year = {2002}, +} # ISBN 0 521 811929, See Maths Gazette (88), March 2004, pg 183 for a review + +@ARTICLE{Gale1979, + AUTHOR = {Gale, D.}, + TITLE = {The Game of Hex and the {Brouwer} Fixed-Point Theorem}, + JOURNAL = {The American Mathematical Monthly}, + YEAR = {1979}, + volume = {86}, + number = {10}, + pages = {818--827}, + month = {December}, +} +#http://links.jstor.org/sici?sici=0002-9890%28197912%2986%3A10%3C818%3ATGOHAT%3E2.0.CO%3B2-B + +@BOOK{Galileo1967, + AUTHOR = {Galileo, G.}, + TITLE = {Dialogue Concerning the Two Cheif World Systems}, + PUBLISHER = {University of California Press}, + year = {1967}, + edition = {Second, revised}, +} + +@BOOK{Gardner1957, + author = {Gardner, M.}, + title = {Mathematics Magic and Mystery}, + publisher = {Dover Publications}, + year = {1956}, +} + +@INBOOK{Gardner1959, + author = {Gardner, M.}, + TITLE = {Mathematical Puzzles and Diversions}, + CHAPTER = {The Game of Hex}, + pages = {70--77}, + PUBLISHER = {Hammondsworth}, + YEAR = {1959}, +} + +@ARTICLE{Gardner65, + author = {Gardner, M.}, + TITLE = {The ``{S}uperellipse": a curve that lies between the ellipse and the rectangle}, + JOURNAL = {Scientific American}, + YEAR = {1965}, + month = {September}, +} + +@BOOK{Gardner71, + author = {Gardner, M.}, + title = {Martin Gardner's Sixth Book of Mathematical Games from Scientific American}, + publisher = {New York: Scribner's}, + year = {1971}, +} + + +@BOOK{Gardner1966, + author = {Gardner, M.}, + TITLE = {New Mathematical Diversions}, + PUBLISHER = {Simon and Schuster, New York}, + YEAR = {1966}, +} + +@BOOK{Gardner1977, + author = {Gardner, M.}, + TITLE = {Mathematical Carnival. A New Round-Up of Tantalizers and Puzzles from Scientific American}, + PUBLISHER = {Vintage, New York}, + YEAR = {1977}, +} + +@book{Gardiner1982, + title = {Understanding Infinity: The Mathematics of Infinite Processes}, + author = {Gardiner, A.}, + year = {2003}, + publisher = {Dover} +} + +@ARTICLE{Gardiner2014, + author = {Gardiner, A.}, + title = {Teaching Mathematics at Secondary Level}, + journal = {The De Morgan Gazette}, + year = {2014}, + volume = {6}, + number = {1}, + pages = {1--215}, +} + +@ARTICLE{Gatterdam81, + author = {Gatterdam, R.~W.}, + title = {The Planimeter as an Example of {G}reen's Theorem}, + journal = AMM, + year = {1981}, + volume = {88}, + number = {9}, + pages = {701--704}, + month = {November}, +} + +@ARTICLE{Ghandi2005, + AUTHOR = {Ghandi, S.~C. and Efthimiou, C.~J.}, + TITLE = {The ascending double cone: a closer look at a familiar demonstration}, + JOURNAL = {European Journal of Physics}, + YEAR = {2005}, + volume = {26}, + pages = {681--694}, +} +## doi: 10.1088/0143-0807/26/5/002 + +@article{Gilkey1990, + Author = {Gilkey,~C.~F.}, + Journal = {Western Folklore}, + Number = {2}, + Pages = {215--220}, + Title = {The physicist, the mathematician and the engineer: Scientists and the Professional Slur}, + Url = {http://www.jstor.org/stable/1499408}, + Volume = {49}, + Year = {1990} +} + +@BOOK{Gnadig2001, + AUTHOR = {Gn\"{a}dig, P. and Honyek, G. and Riley, K.~F.}, + TITLE = {200 Puzzling Physics Problems}, + PUBLISHER = {Cambridge University Press}, + YEAR = {2001}, +} + +@BOOK{Goodeve1879, + AUTHOR = {Goodeve, T.~M.}, + TITLE = {Text-book on the Steam Engine}, + PUBLISHER = {Crosby Lockwood and Co, London}, + YEAR = {1879}, +} + +@ARTICLE{Goho1999, + AUTHOR = {Goho, K. and Kimiyuki, M. and Hayashi, A.}, + TITLE = {Development of a Roundness Profile Measurement System for Parallel Rollers Based on a V-Block Method}, + JOURNAL = {International Journal of the Japanese Society of Mechanical Engineers}, + YEAR = {1999}, + volume = {C42}, + number = {2}, + pages = {410--415}, +} + +@ARTICLE{Goldberg1948, + AUTHOR = {Goldberg, M.}, + TITLE = {Circular-arc rotors in regular polygons}, + JOURNAL = AMM, + YEAR = {1948}, + volume = {7}, + number = {55}, + pages = {393--402}, +} + +@ARTICLE{Goldberg1960, + AUTHOR = {Goldberg, M.}, + TITLE = {Rotors in polygons and polyhedra}, + JOURNAL = {Mathematics of Computation}, + YEAR = {1960}, + volume = {14}, + number = {71}, + pages = {229--239}, +} + +@article{Goldberg1962, + title = {N-Gon Rotors Making $N + 1$ Contacts with Fixed Simple Curves}, + author = {Goldberg, M.}, + journal = {The American Mathematical Monthly}, + volume = {69}, + number = {6}, + pages = {486--491}, + url = {http://www.jstor.org/stable/2311186}, + ISSN = {00029890}, + year = {1962}, + publisher = {Mathematical Association of America}, + copyright = {Copyright � 1962 Mathematical Association of America}, + language = {English}, +} + +@article{Goldberg1964, + title = {A Correction for ``N-Gon Rotors Making $N + 1$ Contacts with Fixed Simple Curves"}, + author = {Goldberg, M.}, + journal = {The American Mathematical Monthly}, + volume = {71}, + number = {8}, + pages = {886}, + url = {http://www.jstor.org/stable/2312397}, + ISSN = {00029890}, + year = {1964}, + publisher = {Mathematical Association of America}, + copyright = {Copyright � 1964 Mathematical Association of America}, + language = {English}, +} + +@ARTICLE{Goldberg1968, + author = {Goldberg, M.}, + TITLE = {Two-lobed Rotors with Three-lobed Stators}, + JOURNAL = {Journal of Mechanisms}, + YEAR = {1968}, + volume = {3}, + number = {2}, + pages = {55--60}, +} + + +@ARTICLE{Goodman1896, + AUTHOR = {Goodman, J.}, + TITLE = {Goodman's hatchet planimeter}, + JOURNAL = {Engineering}, + YEAR = {1896}, + pages = {255--256}, +} + + +@ARTICLE{Goodstein1967, + AUTHOR = "Goodstein, R.~L. and Wormell, C.~P.", + TITLE = "Formulae for primes", + JOURNAL = GAZ, + YEAR = "1967", + volume = "51", + number = "375", + pages = "35--38", + month = "February", +} + +@BOOK{Goold1906, + AUTHOR = {Goold, J. and Benham, C.~E. and Keer, R. and Wilberforce, L.~R.}, + TITLE = {Harmonic Vibrations and Vibrational Figures}, + PUBLISHER = {Newton and Co., Scientific Instrument Makers}, + YEAR = {1906}, +} + +@BOOK{Gowers2002, + AUTHOR = {Gowers, T.}, + TITLE = {Mathematics: A Very Short Introduction}, + PUBLISHER = {Oxford Paperbacks}, + YEAR = {2002}, +} + + +@BOOK{Grant1907, + AUTHOR = {Grant, G.~B.}, + TITLE = {A Treatise on Gear Wheels}, + PUBLISHER = {Grant Gear Works, Incorporated, Boston}, + YEAR = {1907}, + edition = {10th}, +} + + +@ARTICLE{Gray1972, + AUTHOR = "Gray, C.~G.", + TITLE = "Solids of constant breadth", + JOURNAL = GAZ, + YEAR = "1972", + volume = "56", + number = "398", + pages = "289--292", + month = "December", +} + +@PHDTHESIS{Greene1997, + AUTHOR = {Greene, M.~T.}, + TITLE = {Some Results in Geometric Topology and Geometry}, + SCHOOL = {Mathematical Institute, University of Warwick, Coventry, CV4 7AL, United Kingdom}, + YEAR = {1997}, +} + +@BOOK{Gregory2006, + AUTHOR = {Gregory, R.~D.}, + TITLE = {Classical Mechanics}, + PUBLISHER = {Cambridge}, + YEAR = {2006}, +} + +@ARTICLE{Groves2008, + author = {Groves, J.}, + title = {Nice symmetric and antisemmetric polynomials}, + journal = {The Mathematical Gazette}, + year = {2008}, + volume = {92}, + number = {525}, + pages = {437--453}, + month = {November}, +} + +@ARTICLE{Grunbaum1993, + author = {Grunbaum, B. and Shephard, G.~C.}, + title = {Pick's Theorem}, + journal = {The American Mathematical Monthly}, + year = {1993}, + volume = {100}, + number = {2}, + pages = {150--161}, + month = {February}, +} + + +@ARTICLE{Gustavsson2016, + author = {Gustavsson, J. and Sundqvist, M.~P.}, + title = {Defining trigonometric functions via complex sequences}, + journal = {The Mathematical Gazette}, + year = {2016}, + volume = {100}, + number = {547}, + pages = {9--23}, + month = {March}, +} + +@book{Gutenmacher2004, + title = {{Lines and curves: a practical geometry handbook}}, + author = {Gutenmacher, V. and Vasilyev, N.B.}, + year = {2004}, + publisher = {Birkhauser} +} +# Gutenmacher, V. and Vasilyev, N.B. (2004). Lines and curves: a practical geometry handbook, Birkhauser. + +@ARTICLE{Guy1988, + author = {Guy, R.~K.}, + title = {The Strong Law of Small Numbers}, + journal = {The American Mathematical Monthly}, + volume = {95}, + number = {8}, + pages = {697--712}, + url = {http://www.jstor.org/stable/2322249}, + year = {1988}, +} + +@article{Hadley1992, + title = {Problems to Sharpen the Young}, + author = {Hadley, J. and Singmaster, D.}, + journal = {The Mathematical Gazette}, + volume = {76}, + number = {475}, + pages = {102--126}, + year = {1992}, +} +# url = {http://www.jstor.org/stable/3620384}, + + +@BOOK{Haese1995, + AUTHOR = {Haese, R.~C. and Haese, S.~H. and Webber, B. and Bruce, M.}, + TITLE = {Competition Mathematics (part 1)}, + PUBLISHER = {Haese and Harris Publications}, + YEAR = {1995}, +} + +@BOOK{Haese1998, + AUTHOR = {Haese, R.~C. and Haese, S.~H. and Webber, B. and Bruce, M.}, + TITLE = {Competition Mathematics (part 2)}, + PUBLISHER = {Haese and Harris Publications}, + YEAR = {1998}, +} + +@ARTICLE{Hall2005, + AUTHOR = {Hall, J.~F.}, + TITLE = {Fun With Stacking Blocks}, + JOURNAL = {American Journal of Physics}, + YEAR = {2005}, + volume = {73}, + number = {12}, + pages = {1107-1116}, + month = {December}, +} + +@ARTICLE{Halsey1959, + AUTHOR = {Halsey, P.}, + TITLE = {The Ambiguous Case}, + JOURNAL = GAZ, + YEAR = {1959}, + volume = {43}, + number = {345}, + pages = {204--205}, + month = {October}, +} +#http://www.jstor.org/stable/stable/3610976 + +@article{Harding2007a, + title = {Sibling curves and complex roots 1: looking back}, + author = {Harding, A. and Engelbrecht, J.}, + journal = {International Journal of Mathematical Education in Science and Technology}, + volume = {38}, + number = {7}, + pages = {963--973}, + year = {2007}, +} + +@article{Harding2007b, + title = {Sibling curves and complex roots 2: looking ahead}, + author = {Harding, A. and Engelbrecht, J.}, + journal = {International Journal of Mathematical Education in Science and Technology}, + volume = {38}, + number = {7}, + pages = {975--985}, + year = {2007}, +} + +@article{Harding2009, + title = {Sibling curves 3: imaginary siblings and tracing complex roots}, + author = {Harding, A. and Engelbrecht, J.}, + journal = {International Journal of Mathematical Education in Science and Technology}, + volume = {40}, + number = {7}, + pages = {989--996}, + year = {2009}, +} + +@BOOK{HardyAp, + AUTHOR = {Hardy, G.~H.}, + TITLE = {A Mathematician's Apology}, + PUBLISHER = {Cambridge University Press}, + Address = {Cambridge, UK}, + YEAR = {1967}, +} + +@BOOK{HardyPure, + AUTHOR = {Hardy, G.~H.}, + TITLE = {A course of Pure Mathematics}, + PUBLISHER = {Cambridge University Press}, + address = {Cambridge, UK}, + YEAR = {1908}, +} + +@ARTICLE{Hardy1906, + author = {Hardy, G.~H.}, + title = {The Case against the Mathematical Tripos}, + journal = {The Mathematical Gazette}, + year = {1906}, + volume = {3}, + number = {56}, + pages = {284--288}, + month = {January}, +} + +@book{Hardy1916, + title = {The integration of functions of a single variable}, + author = {Hardy, G.~H.}, + year = {1916}, + series = {Cambridge Tracts in Mathematics and Mathematical Physics}, + publisher = {Cambridge University Press} +} + +@ARTICLE{Hardy1916b, + author = {Hardy, G.~H.}, + year = {1916}, + TITLE = {{W}eierstrass's Non-Differentiable Function}, + JOURNAL = {Transactions of the American Mathematical Society}, + volume = {17}, + number = {3}, + pages = {301--325}, + month = {July}, +} + +@ARTICLE{Hardy1948, + author = {Hardy, G.~H.}, + title = {The Case against the Mathematical Tripos}, + journal = {The Mathematical Gazette}, + year = {1948}, + volume = {32}, + number = {300}, + pages = {134--145}, + month = {July}, +} + +@BOOK{Hardy1988, + AUTHOR = {Hardy, G.~H.}, + TITLE = {Inequalities}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1988}, + edition = {2nd}, +} + + +@BOOK{Hardy1960, + AUTHOR = {Hardy, G.~H. and Wright, E.~M.}, + TITLE = {An introduction to the theory of numbers}, + PUBLISHER = {Oxford University Press}, + YEAR = {1960}, + edition = {4th}, +} + +@BOOK{Harriot1631, + AUTHOR = {Harriot, T.}, + TITLE = {Artis analyticae praxis}, + PUBLISHER = {Barker, London}, + YEAR = {1631}, +} + + +@ARTICLE{Hartree1938, + AUTHOR = {Hartree,D.~R.}, + TITLE = {The Mechanical Integration of Differential Equations}, + JOURNAL = GAZ, + YEAR = {1938}, + volume = {22}, + number = {251}, + pages = {342--365}, + month = {October}, +} + +@ARTICLE{Harvey1997, + author = {Harvey, M.}, + title = {Note 81.26: \(x^{2}-17x-60=0\)}, + journal = {The Mathematical Gazette}, + year = {1997}, + volume = {81}, + number = {491}, + pages = {267--269}, + month = {July}, +} +# http://www.jstor.org/stable/3619206 + +@BOOK{HavilGamma, + author = {Havil, J.}, + title = {Gamma, exploring {E}uler's constant}, + publisher = {Princeton University Press}, + year = {2003}, +} + + +@BOOK{Hayes1990, + AUTHOR = {Hayes, G}, + TITLE = {A Guide to stationary steam engines}, + PUBLISHER = {Moorland, Ashbourne}, + YEAR = {1990}, +} + +@BOOK{Haywood2019, + author = {Haywood, R.~B. and Toft, B.}, + title = {HEX: The Full Story}, + publisher = {CRC Press}, + address = {Raton, Florida}, + year = {2019}, + isbn = {9780367144227} +} + +@ARTICLE{Heeffer2006, + AUTHOR = {Heeffer, A.}, + TITLE = {\href{http://logica.ugent.be/albrecht/thesis/EulerProblems.pdf}{The Origin of the Problems in {E}uler's {A}lgebra}}, + JOURNAL = {Bulletin of the Belgian Mathematical Society -- Simon Stevin}, + YEAR = {2006}, + volume = {13}, + number = {5}, + pages = {949--952}, +} + +@INBOOK{Heefer2007, + author = {Heefer, A.}, + title = {New Perspectives on Mathematical Practices: Essays in Philosophy and History of Mathematics}, + chapter = {On the Nature and Origin of Algebraic Symbolism}, + pages = {1--27}, + publisher = {World Scientific Publishing}, + year = {2009}, +} + +@ARTICLE{Heeffer2012, + author = {Heeffer, A.}, + title = {The Genesis of the Algebra Textbook: From {Pacioli} to {Euler}}, + journal = {ALMAGEST}, + year = {2012}, + volume = {3}, + number = {1}, + pages = {26--61}, + doi = {10.1484/J.ALMA.5.100794}, +} + +@ARTICLE{Hein1942, + AUTHOR = {Hein, P.}, + TITLE = {``{Polygon}''}, + JOURNAL = {Politiken}, + YEAR = {1942}, +} + + +@ARTICLE{Henrici1894, + author = {Henrici, O.}, + title = {Report on Planimeters}, + journal = {British Association for the Advancement of Science, Report of the 64th Meeting}, + year = {1894}, + pages = {496--523}, +} + +@ARTICLE{HeleShaw1884, + AUTHOR = "Hele Shaw, H.~S.", + TITLE = "The theory of continuous calculating machines and a mechanism of this class on a new principle", + JOURNAL = "Philosophical transactions of the Royal Society of London", + YEAR = "1885", + volume = "176", + number = "2", + pages = "367--402", +} + +@ARTICLE{Heppes1967, + AUTHOR = "Heppes, A.", + TITLE = "A Double Tipping Tetrahedron", + JOURNAL = "SIAM Reviews", + YEAR = "1967", + volume = "9", + pages = "599--600", +} + +@BOOK{Herigone1634, + author = {H\'{e}rigone, P.}, + TITLE = {Cursus mathematicus, nova, brevi, et clara methodo demonstratus}, + PUBLISHER = {Paris}, + YEAR = {1634}, +} + +@Article{Hertz1881, + author = {Hertz, H.}, + journal = {Journal f\"{u}r die reine und angewandte Mathematik}, + year = {1881}, + volume = {92}, + pages = {156-171}, +} + +@BOOK{Hidetoshi2008, + AUTHOR = {Hidetoshi, F. and Rothman, R.}, + TITLE = {Sacred Mathematics: Japanese Temple Geometry }, + PUBLISHER = {Princeton University Press}, + YEAR = {2008}, +} + +@BOOK{Hildebrandt1985, + AUTHOR = {Hildebrandt, S. and Tromba, A.}, + TITLE = {Mathematics and Optimal Form}, + PUBLISHER = {Scientific American Library}, + address = {New York}, + YEAR = {1985}, +} + +@BOOK{Hinz2013, + author = {Hinz, A. and Klav\v{z}ar, S. and Milutinovi\'{c}, U. and Petr, C.}, + title = {The Tower of Hanoi -- Myths and Maths}, + publisher = {Birkhauser}, + year = {2013}, + isbn = {9783034802369}, +} + +@ARTICLE{Hirsch1974, + author = {Hirsch, C.~R.}, + title = {Pick's Rule}, + journal = {The Mathematics Teacher}, + year = {1974}, + volume = {67}, + number = {5}, + pages = {431--434, 473}, + month = {May}, +} + +@BOOK{Hobbes1656, + AUTHOR = {Hobbes, T.}, + TITLE = {Six lessons to the professors of mathematiques, one of geometry, the other of astronomy: in the chaires set up by {S}ir {H}enry {S}avile in the {U}niversity of {O}xford}, + PUBLISHER = {Oxford, London}, + YEAR = {1656}, +} + +@BOOK{Holmes1978, + AUTHOR = {Holmes, W.~T.}, + TITLE = {Plane geometry of rotors in pumps and gears}, + PUBLISHER = {The Scientific Publishing Company, Manchester}, + YEAR = {1978}, +} + +@ARTICLE{Horgan1993, + AUTHOR = {Horgan, J.}, + TITLE = {The Death of Proof}, + JOURNAL = {Scientific American}, + YEAR = {1993}, + volume = {269}, + number = {4}, + month = {October}, + pages = {92--103}, + doi = {10.1038/scientificamerican1093-92}, +} + +@BOOK{Horsburgh1914, + AUTHOR = "Horsburgh, E.~M.", + TITLE = "Modern instruments and methods of calculation: A Handbook of the Napier Tercentenary Exhibition", + PUBLISHER = "The Royal Society of Edinburgh", + YEAR = "1914", + URL = "https://archive.org/details/cu31924003962127", +} + +@BOOK{Hofstadter1979, + AUTHOR = {Hofstadter, D.~R.}, + TITLE = {Godel, Escher, Bach: An Eternal Golden Braid}, + PUBLISHER = {Basic Books}, + YEAR = {1979}, +} + +@ARTICLE{Hollings2017, + author = {Hollings, C. and Martin, U. and Ricec, A.}, + title = {The Lovelace–De Morgan mathematical correspondence: A critical re-appraisal}, + journal = {Historia Mathematica}, + year = {2017}, + volume = {44}, + number = {3}, + pages = {202--231}, + month = {August}, + doi = {https://doi.org/10.1016/j.hm.2017.04.001}, +} + +@BOOK{Horsley, + author = {Horsley, S.}, + title = {Isaaci Newtoni Opera}, + publisher = {Joannes Nichols, London}, + year = {1782}, +} + +@ARTICLE{Hoyrup1990, + AUTHOR = {H{\o}yrup, J.}, + TITLE = {Sub-scientific Mathematics: Observations on a Pre-modern Phenomenon}, + JOURNAL = {History of Science}, + YEAR = {1990}, + volume = {28}, + pages = {63--87}, + mpnth = {March}, +} + +@BOOK{Hrones1951, + AUTHOR = {Hrones, J.~A. and Nelson, G.~L.}, + TITLE = {Analysis of the Four Bar Linkage }, + PUBLISHER = {Press of the Massachusetts Institute of Technology, and Wiley, New York}, + YEAR = {1951} +} + +@BOOK{Huff1991, + AUTHOR = {Huff, D.}, + TITLE = {How to lie with statistics}, + PUBLISHER = {Penguin}, + YEAR = {1991}, + isbn = {978-0140136296}, +} + +@article{Imeson1938, + title={{1288. Rider Work in Geometry}}, + author={Imeson, K.~R.}, + journal=GAZ, + pages={186}, + year={1938}, +} + +@INBOOK{Jagger2003, + author = {Jagger, G.}, + title = {The History of Mathematical Tables: From Sumer to Spreadsheets}, + chapter = {The making of logarithm tables}, + publisher = {Oxford University Press}, + year = {2003}, + doi = {10.1093/acprof:oso/9780198508410.003.0003} +} + +@BOOK{James2015, + author = {James, G.}, + title = {Modern Engineering Mathematics}, + publisher = {Pearson}, + year = {2015}, + address = {Harlow, UK}, + edition = {5th}, +} + +@INBOOK{JanDijksterhuis2011, + author = {Jan Dijksterhuis, F.}, + editor = {Dupr\'{e}, S. and L\"{u}thy, C.}, + title = {Silent messengers: the circulation of material objects of knowledge in the early modern low countries}, + year = {2011}, + chapter = {Moving Around the Ellipse. Conic Sections in Leiden, 1620--1660}, + pages = {89--124}, + publisher = {Berlin}, +} + +@ARTICLE{Jobbings1995, + AUTHOR = {Jobbings, A.}, + TITLE = {Chords, tangents and cubics}, + JOURNAL = GAZ, + YEAR = {1995}, + volume = {79}, + number = {485}, + pages = {348--350}, + month = {July}, +} + +@ARTICLE{Johnson, + author = {Johnson, P.~B.}, + title = {Leaning tower of Lire}, + journal = {American Journal of Physics}, + year = {1955}, + volume = {22}, + number = {1}, + pages = {240}, + month = {April}, +} + +@ARTICLE{Johnson2011, + author = {Johnson, C.}, + title = {Nice cubics}, + journal = GAZ, + year = {2011}, + volume = {95}, + number = {533}, + pages = {273--279}, + month = {July}, +} + + +@ARTICLE{Kalman1984, + author = {Kalman, D.}, + title = {The Generalized {V}andermonde Matrix}, + journal = {Mathemtics Magazine}, + year = {1984}, + volume = {57}, + number = {1}, + pages = {15--21}, + month = {January}, +} + +@ARTICLE{Kalman1993, + author = {Kalman, D.}, + TITLE = {Six Ways to Sum a Series}, + JOURNAL = {The College Mathematics Journal}, + YEAR = {1993}, + volume = {24}, + number = {5}, + pages = {402--421}, + month = {November}, +} +# http://www.jstor.org/stable/2687013 + +@ARTICLE{Kalman2008, + author = {Kalman, D.}, + title = {An Elementary Proof of {M}arden's Theorem}, + journal = {The American Mathematical Monthly}, + year = {2008}, + volume = {115}, + number = {4}, + pages = {330--338}, + month = {April}, +} + +@ARTICLE{Kawohl2011, + AUTHOR = {Kawohl, B. and Weber, C.}, + TITLE = {Meissner's mysterious bodies}, + JOURNAL = {The Mathematical Intelligencer}, + YEAR = {2011}, + volume = {33}, + number = {2}, + pages = {1-8}, + month = {July}, +} +# DOI 10.1007/s00283-011-9239-y + +@ARTICLE{Kamenetskii1947, + AUTHOR = {Kamenetski\u{\i}, I.~M.}, + TITLE = {Re\v{s}enie geometriceskoi zada\v{c}i {L}.~{L}yusternika}, + JOURNAL = {Uspekhi matematicheskikh nauk}, + YEAR = {1947}, + volume = {2}, + number = {2}, + pages = {199--202}, + note = {\href{http://web.mat.bham.ac.uk/C.J.Sangwin/Publications/kamenetskii1947.pdf}{(Solution of a geometrical problem of {L}.~{L}yusternik)}}, +} + + +@INPROCEEDINGS{Keady2000, + AUTHOR = {Keady, G. and Scales, P.~J. and Fitz-Gerald, G.~F.}, + TITLE = {Envelopes generated by circular-arc coupler-bars in {J}ames {W}att's four-bar linkages}, + BOOKTITLE = {Proceedings of the Engineering Mathematics and Applications Conference}, + YEAR = {2000}, + pages = {171--174}, + month = {September}, + publisher = {RMIT, Melbourne} +} + +@ARTICLE{Kearsley1952, + AUTHOR = "Kearsley, M.~J.", + TITLE = "Curves of constant diameter", + JOURNAL = GAZ, + YEAR = "1952", + volume = "36", + number = "317", + pages = "176--179", + month = "September", +} + +@BOOK{Keay2000, + AUTHOR = {Keay, J.}, + TITLE = {The Great Arc}, + PUBLISHER = {Harper Collins Publisher, London}, + YEAR = {2000}, +} + +@BOOK{Kempe1877, + author = {Kempe, A.~B.}, + title = {How to draw a straight line: a lecture on linkages}, + publisher = {Macmillian, London}, + year = {1877}, +} +# https://synthetica.eng.uci.edu/mechanicaldesign101/Kempe-Straight-Line.pdf + +@ARTICLE{Kempe1875, + author = {Kempe, A.~B.}, + TITLE = "On a General Method of Producing Exact Rectilinear Motion by Linkwork", + JOURNAL = "Proceedings of the Royal Society of London", + YEAR = "1875", + volume = "23", + number = "163", + pages = "565--577", +} + +@ARTICLE{Kempe1876, + author = {Kempe, A.~B.}, + TITLE = {On a general method of describing plane curves of the $n$th degree by Linkwork}, + JOURNAL = {Proceedings of the London Mathematical Society}, + YEAR = {1876}, + volume = {7}, + pages = {213--216}, +} + +@article{KingHele2002, + title = {Erasmus Darwin's Improved Design for Steering Carriages--And Cars}, + author = {King-Hele, Desmond}, + journal = {Notes and Records of the Royal Society of London}, + volume = {56}, + number = {1}, + pages = {41--62}, + ISSN = {00359149}, + abstract = {Carriage journeys in England during the eighteenth century were notoriously dangerous. Rutted and pot-holed roads exacerbated the deficiencies in steering, springing and stability. In 1758 the young Dr Erasmus Darwin (1731-1802; F.R.S. 1761) was travelling about 10 000 miles a year in visits to patients from his house at Lichfield. To alleviate the danger and discomfort of his journey, he developed a design for improved carriage steering and stability, which he road-tested over 20 000 miles on two carriages. In 1765 Richard Lovell Edgeworth (1744-1817; F.R.S. 1781) heard about Darwin's design, urged the Society of Arts to enquire about it, and then visited Darwin himself. With the aid of manuscripts from the Archive of the Royal Society of Arts and elsewhere, I offer a reconstruction of Darwin's improved method of steering, which relies on four jointed rods, initially in the form of an isosceles trapezium. The mechanism was reinvented more than 50 years later, and came to be used widely in early modern cars.}, + year = {2002}, + publisher = {The Royal Society}, +} +# url = {http://www.jstor.org/stable/532121}, + +@BOOK{Klima2015, + author = {Klima, R. and Sigmon, N. and Stitzinger, E.}, + title = {Applied Abstract Algebra with {Maple} and {MATLAB}}, + publisher = {CRC Press}, + year = {2015}, + address = {London, UK}, + edition = {Third}, + isbn = {9781482248234}, +} + +@BOOK{Klein1932AAA, + author = {Klein, F.}, + title = {Elementary Mathematics from an Advanced Standpoint: Arithmetic, Algebra, Analysis}, + publisher = {MacMillian}, + year = {1932}, +} + +@BOOK{Klein1932G, + author = {Klein, F.}, + title = {Elementary Mathematics from an Advanced Standpoint: Geometry}, + publisher = {Dover}, + year = {1939}, +} + +@BOOK{Klein2016, + author = {Klein, F.}, + title = {Elementary Mathematics from a Higher Standpoint}, + publisher = {Springer}, + year = {2016}, + isbn = {978-3662495155}, +} + +@BOOK{Klein2013, + author = {Klein, P.~N.}, + title = {Coding the Matrix: Linear Algebra through Applications to Computer Science}, + publisher = {Newtonian Press}, + year = {2013}, +} + +@ARTICLE{Kleiner1989, + AUTHOR = {Kleiner, I.}, + TITLE = {Evolution of the Function Concept: A Brief Survey}, + JOURNAL = {The College Mathematics Journal}, + YEAR = {1989}, + volume = {20}, + number = {4}, + pages = {282--300}, +} + +@ARTICLE{Kleiner1991, + AUTHOR = {Kleiner, I.}, + TITLE = {Rigor and Proof in Mathematics: A Historical Perspective}, + JOURNAL = {Mathematics Magazine}, + YEAR = {1991}, + volume = {64}, + number = {5}, + pages = {291--314}, + dor = {10.2307/2690647}, +} + +@BOOK{KnuthACPII, + author = {Knuth, D.~E.}, + title = {The Art of Computer Programming}, + publisher = {Addison-Wesley}, + address = {Reading, Massachusetts}, + year = {1969}, + volume = {2}, +} + +@BOOK{KnuthNegBase, + author = {Knuth, D.~E.}, + title = {The Art of Computer Programming}, + publisher = {Addison-Wesley}, + address = {Reading, Massachusetts}, + year = {1969}, + volume = {2: Seminumerical Algorithms}, + note = {pp 171 and exercises on pp 176, 177 and 179.}, +} + +@BOOK{KnuthTeX, + AUTHOR = "Knuth, D.~E.", + TITLE = "{\TeX} and METAFONT: New directions in typesetting", + PUBLISHER = "American Mathematical Society", + YEAR = "1979", +} + +@ARTICLE{Knuth1998, + author = "Knuth, D.~E.", + title = {Teach Calculus with Big {O}}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {1998}, + volume = {45}, + number = {6}, + pages = {687-688}, + month = {June}, +} +## http://micromath.wordpress.com/2008/04/14/donald-knuth-calculus-via-o-notation/ +## http://www-cs-faculty.stanford.edu/~knuth/ocalc.tex + +@BOOK{Koch2005, + author = {Koch, T.}, + title = {Cartographies of Disease: Maps, Mapping, and Medicine}, + publisher = {Environmental Systems Research Institute Inc.}, + year = {2005}, +} + +@ARTICLE{Kovacs2017, + author = {Kov\'{a}cs, Z. and Kov\'{a}cs, B.}, + title = {A compilation of {LEGO} Technic parts to support learning experiments on linkages}, + journal = {arXiv}, + year = {2017}, + number = {1712.00440}, + source = {arXiv:1712.00440}, +} + +@BOOK{Kostovskii1986, + AUTHOR = {Kostovskii, A.}, + TITLE = {Geometrical Construction with Compasses Only}, + PUBLISHER = {Mir Publishers, Moscow}, + YEAR = {1986}, +} + +@BOOK{Krause1975, + AUTHOR = {Krause, E.~F.}, + TITLE = {Taxicab geometry: an adventure in non-{E}uclidean geometry}, + PUBLISHER = {Addison-Wesley}, + YEAR = {1975}, +} + +@BOOK{Kurtz2012, + author = {Kurtz, R. and Van Haaften, J.}, + title = {{Berenice Abbott}: Documenting Science}, + publisher = {Steidl}, + year = {2012}, +} + +@BOOK{Lang1983, + AUTHOR = {Lang, S.}, + TITLE = {Undergraduate Analysis}, + PUBLISHER = {Springer}, + YEAR = {1983}, +} + + +@BOOK{Lagrange1847, + AUTHOR = {Lagrange, J.~L.}, + TITLE = {Th\'{e}orie des Fonctions Analytiques}, + PUBLISHER = {Librarie de Bachelier, Paris}, + YEAR = {1847}, + edition = {3rd}, +} + +@BOOK{Lagrange1898, + AUTHOR = {Lagrange, J.~L.}, + TITLE = {Lectures on elementary mathematics}, + PUBLISHER = {The Open Court Publishing Company, Chicago}, + YEAR = {1898}, + note = {translated by Thomas J. McCormack} +} +# QA/35/L + +@ARTICLE{Lake2015, + author = {Lake, B.~M. and Salakhutdinov, R. and Tenenbaum, J.~B.}, + title = {Human-level concept learning through probabilistic program induction}, + journal = {Science}, + year = {2015}, + volume = {350}, + number = {6266}, + pages = {1332--1338}, + month = {December}, +} + +@ARTICLE{Lamport1982, + author = {Lamport, L. and Shostak, R. and Pease, M.}, + title = {The Byzantine Generals Problem}, + journal = {ACM Transactions on Programming Languages and Systems}, + year = {1982}, + volume = {4}, + number = {3}, + pages = {382-401}, + month = {July}, +} + +@ARTICLE{Lanchet2007, + AUTHOR = {Lachand-Robert, T. and Oudet, \'{E}}, + TITLE = {Bodies of constant width in arbitrary dimension}, + JOURNAL = {Mathematische Nachrichten}, + YEAR = {2007}, + volume = {280}, + number = {7}, + pages = {740--750}, +} + +@ARTICLE{Landen1759, + author = {Landen, J. and Simpson, T.}, + title = {A new Method of computing the Sums of certain Series}, + journal = {The Philosophical transactions of the Royal Society of London}, + year = {1759}, + volume = {51}, + pages = {553--565}, + doi = {doi:10.1098/rstl.1759.0056} +} +# "Read Feb, 28, 1760." +# See also "Mathematical Memoirs" 1780, pg 67. +# See also "Mathematical Lucubrations", + +@book{Landen1755, + author = {Landen, J.}, + title = {Mathematical Lucubrations}, + year = {1755}, + publisher = {J. Nourse, London}, +} + +@book{Landen1780, + author = {Landen, J.}, + title = {Mathematical memoirs respecting a variety of subjects; with an appendix containing tables of theorems for the calculation of fluents ...}, + year = {1780}, + publisher = {J. Nourse, London}, +} + +@ARTICLE{Lehmer1933, + AUTHOR = "Lehmer, D.~H.", + TITLE = "A photo-electric number sieve", + JOURNAL = "American Mathematical Monthly", + YEAR = "1933", + volume = "40", + pages = "401--406", +} + +@BOOK{Leibniz1966, + AUTHOR = {Leibniz, G.}, + TITLE = {Logical papers: a selection}, + PUBLISHER = {Oxford University Press}, + address = {Oxford, UK}, + YEAR = {1966}, +} + +@ARTICLE{Leversha2003, + AUTHOR = {Leversha, G.}, + TITLE = {A proof of the exact value of $\pi$, by {Reddivari Sarva Jagannadha Reddy}}, + JOURNAL = GAZ, + YEAR = {2003}, + volume = {87}, + number = {509}, + pages = {368--369}, + month = {July}, +} +# Stable URL: http://www.jstor.org/stable/3621084 + +@BOOK{Levi2009, + AUTHOR = {Levi, M.}, + TITLE = {The Mathematical Mechanic: using physical reasoning to solve problems}, + PUBLISHER = {Princeton University Press}, + address = {Princeton, New Jersey}, + YEAR = {2009}, +} + +@BOOK{Levi2012, + AUTHOR = {Levi, M.}, + TITLE = {Why Cats Land on Their Feed and 76 Other Physical Paradoxes and Puzzles}, + PUBLISHER = {Princeton University Press}, + address = {Princeton, New Jersey}, + YEAR = {2012}, +} + +@BOOK{Leybourn1694, + AUTHOR = "Leybourn, W.", + TITLE = "Pleasure with Profit: consisting of recreations of diverse kinds", + PUBLISHER = "Richard Baldwin and John Dunton, London", + YEAR = "1694", +} + +@BOOK{Liebeck2000, + author = {Liebeck, M.}, + title = {A Concise Introduction to Pure Mathematics}, + publisher = {Chapman Hall}, + year = {2000}, + edition = {second}, +} + +@BOOK{Lindgren1963, + author = {Lindgren, H.}, + title = {Recreational problems in geometric dissections and how to solve them}, + publisher = {Dover}, + year = {1972}, +} + + +@BOOK{LittlewoodMisc, + author = {Littlewood, J.~E.}, + title = {Littlewood's miscellany}, + publisher = {Cambridge University Press}, + year = {1986}, +} + +@ARTICLE{Llave2015, + author = {de la Llave, R.}, + title = {Computing Some Integrals by Computing Derivatives}, + journal = {The American Mathematical Monthly}, + year = {2015}, + volume = {122}, + number = {9}, + pages = {888-889}, + month = {November}, + doi = {10.4169/amer.math.monthly.122.9.888}, +} + +@BOOK{Lockwood1967, + author = {Lockwood, E.~H.}, + title = {A book of curves}, + publisher = {Cambridge University Press}, + year = {1967}, +} + +@BOOK{Loomis1968, + author = {Loomis, E.}, + title = {The Pythagorean Proposition}, + publisher = {National Council of Teachers of Mathematics}, + year = {1968}, + address = {Washington}, +} +# Loomis, E., (1968) {\em The Pythagorean Proposition}, {National Council of Teachers of Mathematics}, {Washington}. + + +@ARTICLE{Lorentz1963, + AUTHOR = {Lorentz, E.}, + TITLE = {Deterministic Nonperiodic Flow}, + JOURNAL = {Journal of Atmospheric Sciences}, + YEAR = {1963}, + volume = {20}, + number = {2}, + pages = {130--141}, + month = {March}, +} + +@BOOK{Lorentz1983, + author = {Lorentz, G.~C. and Jetter, K. and Riemenschneider, S.~D.}, + title = {{B}irkhoff interpolation}, + publisher = {Addison-Wesley}, + year = {1983}, + volume = {19}, + series = {Encyclopedia of mathematics and its applications}, +} + +@ARTICLE{Lowell54, + author = {Lowell, L. I.}, + title = {Comments on the Polar Planimeter}, + journal = AMM, + year = {1954}, + volume = {61}, + number = {7}, + pages = {467-469}, + month = {August-September}, +} + +@ARTICLE{Lowry1939, + AUTHOR = {Lowry, H.~V.}, + TITLE = {{\S} 1358.~{T}he solution of a quartic equation}, + JOURNAL = GAZ, + YEAR = {1939}, + volume = {23}, + number = {253}, + pages = {80--90}, +} + + +@Article{Lucas2005, + author = {Lucas, S/}, + title = {Integral proofs that \(355/113 > \pi\)}, + journal = {Australian Mathematical Society Gazette}, + year = {2005}, + OPTvolume = {32}, + OPTnumber = {4}, + OPTpages = {263--266}, +} + + +@BOOK{Ludlam1786, + AUTHOR = {Ludlam, W.}, + TITLE = {An Introduction and Notes on Mr {B}ird's Method of Dividing Astronomical Instruments}, + PUBLISHER = {London}, + YEAR = {1786}, +} + + +@article{Luzin1998a, + title = {The Evolution of Function: Part {I}}, + author = {Shenitzer, A. and Luzin, N.}, + journal = {The American Mathematical Monthly}, + volume = {105}, + number = {1}, + pages = {59--67}, + url = {http://www.jstor.org/stable/2589528}, + ISSN = {00029890}, + abstract = {What follows is the first part of a translation by Abe Shenitzer (in two parts) of an article by N. Luzin that appeared in (in the 1930s) in the first edition of The Great Soviet Encyclopedia, Vol. 59, pp 314-334. The article describes the evolution of the function concept.}, + year = {1998}, + publisher = {Mathematical Association of America}, +} + +@article{Luzin1998b, + title = {The Evolution of Function: Part {II}}, + author = {Luzin, N.}, + journal = {The American Mathematical Monthly}, + volume = {105}, + number = {3}, + pages = {263--270}, + url = {http://www.jstor.org/stable/2589085}, + ISSN = {00029890}, + abstract = {What follows is the second part of a translation by Abe Shenitzer (in two parts) of an article by N. Luzin in the first edition of The Great Soviet Encyclopedia, Vol. 59, pp. 314-334. The article describes the evolution of the function concept.}, + year = {1998}, + publisher = {Mathematical Association of America}, +} + +@ARTICLE{Lynds2003, + AUTHOR = {Lynds, P.}, + TITLE = {Time and Classical and Quantum Mechanics: Indeterminacy Versus Discontinuity}, + JOURNAL = {Foundations of Physics Letters}, + YEAR = {2003}, + volume = {16}, + number = {4}, + pages = {343--355}, +} + + +@BOOK{Lyusternik1964, + AUTHOR = {Lyusternik, L.~A.}, + TITLE = {Convex Figures and Polyhedra}, + PUBLISHER = {Dover}, + YEAR = {1964}, +} + + +@BOOK{MacHuisdean, + author = {MacHuisdean, H.}, + title = {The {G}reat {L}aw}, + publisher = {The Erlestoke Press, Erlestoke, Wiltshire}, + year = {1937}, +} + +@ARTICLE{Maclaurin1771, + AUTHOR = "Maclaurin, C.", + TITLE = "Algebra", + JOURNAL = "Encyclop{\ae}dia Britannica", + YEAR = "1771", + volume = "1", + pages = "79--118", +} + +@BOOK{MaltheSorenssen2015a, + author = {Malthe-S{\o}renssen}, + title = {Elementary mechanics using Python: a modern course combining analytical and numerical techniques}, + publisher = {Springer}, + year = {2015}, +} + +@BOOK{MaltheSorenssen2015b, + author = {Malthe-S{\o}renssen}, + title = {Elementary mechanics using {MATLAB}: a modern course combining analytical and numerical techniques}, + publisher = {Springer}, + year = {2015}, +} + +@ARTICLE{Mansfield2017, + author = {Mansfield, D.~F. and Wildberger, N.~J.}, + title = {{P}limpton 322 is {B}abylonian exact sexagesimal trigonometry}, + journal = {Historia Mathematica}, + year = {2017}, + doi = {doi.org/10.1016/j.hm.2017.08.001}, +} + +@ARTICLE{Martini2008, + AUTHOR = {Martini, H. and Mustafaev}, + TITLE = {A new construction of curves of constant width}, + JOURNAL = {Computer Aided Geometric Design}, + YEAR = {2008}, + volume = {25}, + number = {9}, + pages = {751--755}, +} + +@BOOK{Martzloff, + author = "Martzloff, J.~C.", + title = "A History of Chinese Mathematics", + publisher = "Springer", + year = "1997", +} + +@BOOK{Maslanka1990, + AUTHOR = {Maslanka, C.}, + TITLE = {The Guardian Book of Puzzles}, + PUBLISHER = {Fourth Estate Limited, London}, + YEAR = {1990}, +} + +@BOOK{Maslanka1992, + AUTHOR = {Maslanka, C.}, + TITLE = {Mind Olympics}, + PUBLISHER = {Breakspear Press, Witney, Oxfordshire}, + YEAR = {1992}, +} + +@ARTICLE{Masser2017, + author = {Masser, D.}, + title = {Integration in Elementary Terns}, + journal = {Newsletter of the London Mathematical Society}, + year = {2017}, + number = {473}, + pages = {30--36}, + month = {November}, +} + +@ARTICLE{Maxwell1849, + author = {Maxwell, J.~C.}, + title = {On the Theory of Rolling Curves}, + journal = {Transactions of the Royal Society of Edinburgh}, + year = {1849}, + volume = {16}, + number = {5}, + pages = {519--540}, + doi = {10.1017/S008045680002247X}, +} + +@ARTICLE{Maxwell1865, + author = {Maxwell, J.~C.}, + title = {A Dynamical Theory of the Electromagnetic Field}, + year = {1865}, + journal = {Philosophical Transactions of the Royal Society of London}, + volume = {155}, + pages = {459--512}, + doi = {10.1098/rstl.1865.0008}, +} + +@BOOK{Maxwell1959, + author = {Maxwell, E.~A.}, + title = {Fallacies in Mathematics}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + year = {1959}, +} +# https://books.google.co.uk/books?id=zNvvoFEzP8IC&lpg=PP1&ots=wafSqvdpi0&dq=Maxwell%20%22fallacies%20in%20mathematics%22&lr&pg=PP1#v=onepage&q=Maxwell%20%22fallacies%20in%20mathematics%22&f=true + +@BOOK{Maxwell1954, + author = {Maxwell, E.~A.}, + title = {An Analytical Calculus for Schools and Universities}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + year = {1954}, +} + +@ARTICLE{Maxwell1969, + author = {Maxwell, E.~A.}, + title = {Obituary: {Clement Vavasour Durell}}, + journal = {The Mathematical Gazette}, + year = {1969}, + volume = {53}, + number = {385}, + pages = {312--313}, + month = {October}, +} +# http://www.jstor.org/stable/3614969 + +@ARTICLE{McAndrew2010, + AUTHOR = {McAndrew, A.}, + TITLE = {An elementary, limit-free calculus for polynomials}, + JOURNAL = GAZ, + YEAR = {2010}, + volume = {94}, + number = {529}, + pages = {67--83}, +} + +@ARTICLE{Macbeth2004, + author = {MacBeth, D.}, + title = {Vi\`{e}te, Descartes, and the Emergence of Modern Mathematics}, + journal = {Graduate Faculty Philosophy Journal}, + year = {2004}, + volume = {25}, + number = {2}, + pages = {87--117}, +} +# Viete + +@ARTICLE{Mead1961, + author = {Mead, D.~G.}, + title = {Integration}, + journal = {The American Mathematical Monthly}, + year = {1961}, + volume = {68}, + number = {2}, + pages = {152--156}, + month = {February}, + doi = {10.2307/2312485}, +} + +@BOOK{Meskens2017, + author = {Meskens, A. and Tytgat, P.}, + title = {Explopring Classical Greek Construction Problems with Interactive Geometry Software}, + publisher = {Birkhauser}, + year = {2017}, + series = {Compact Textbook in Mathematics}, +} + + +@BOOK{Mill1834, + author = {Mill, S.~J.}, + title = {System of Logic, Ratiocinative and Inductive}, + publisher = {Parker}, + year = {1843}, +} + +@ARTICLE{Minkowski1904, + AUTHOR = {Minkowski, H.}, + TITLE = {\"{U}ber die {K}\"{o}rper konstanter {B}reite}, + JOURNAL = {Recreational Mathematics, Moscow Mathematical Society}, + YEAR = {1904}, + volume = {25}, + number = {505--508}, + note = {Collected Works, (2) 277--279, 215--230}, +} + +@BOOK{Moon2007, + AUTHOR = {Moon, F.~C.}, + TITLE = {The machines of {L}eonardo {D}a {V}inci and {F}ranz {R}euleaux: Kinematics of Machines from the Renaissance to the 20th Century}, + PUBLISHER = {Springer}, + YEAR = {2007}, +} + +@BOOK{Murray1993, + author = {Murray, J.~D.}, + title = {Mathematical Biology}, + publisher = {Springer-Verlag}, + year = {1993}, + address = {London}, + edition = {Second}, +} + +@BOOK{Nain2015, + author = {Nain, P.~J.}, + title = {Inside Interesting Integrals}, + publisher = {Springer}, + year = {2015}, + series = {Undergraduate Lecture Notes in Physics}, + address = {Berlin}, + isbn = {978-1-4939-1276-6}, +} + +@article{Nalebuff1990, + Author = {Nalebuff,~B.}, + Journal = {The Journal of Economic Perspectives}, + Number = {1}, + Pages = {179--187}, + Title = {Puzzles: Slot machines, zomepirac, squash, and more}, + Url = {http://www.jstor.org/stable/1942839}, + Volume = {4}, + Year = {1990} +} + +@BOOK{Napier1990, + author = {Napier, J.}, + title = {Rabdology}, + year = "1990", + publisher = "Cambridge", + series = "{Charles Babbage} Institute Reprint Series for History of Computing", + volume = "15", + note = "Trans. William Frank Richardson", +} + + +@ARTICLE{Nash1977, + AUTHOR = {Nash, D.~H.}, + TITLE = {Rotary Engine Geometry}, + JOURNAL = {Mathematics Magazine}, + YEAR = {1977}, + volume = {50}, + number = {2}, + pages = {87--89}, + month = {March}, +} + +@BOOK{Neill1982, + author = {Neill, H. and Shuard, H.}, + title = {Teaching Calculus}, + publisher = {Blackie and sons, Glasgow}, + year = {1982}, +} + +@ARTICLE{Nelson1974, + author = {Nelson, R.~D.}, + title = {Napoleon Revisited}, + journal = {The Mathematical Gazette}, + year = {1974}, + volume = {58}, + number = {404}, + pages = {108--116}, + month = {June}, +} +# http://www.jstor.org/stable/3617796 + +@BOOK{NewtonPrincipia, + AUTHOR = {Newton, I.}, + TITLE = {Mathematical Principles of Natural Philosophy}, + PUBLISHER = {University of California Press}, + YEAR = {1934}, +} + +# Mote's translation. +@BOOK{Newton1729, + AUTHOR = {Newton, I.}, + TITLE = {Mathematical Principles of Natural Philosophy}, + PUBLISHER = {University of California Press}, + YEAR = {1729}, +} + + +@BOOK{Needham1997, + AUTHOR = {Needham, T.}, + TITLE = {Visual Complex Analysis}, + PUBLISHER = {Oxford}, + address = {Oxford, UK}, + YEAR = {1997}, +} + +@ARTICLE{Nelson2001, + author = {Nelson, R.~B.}, + title = {Heron's Forumla via Proof Without Words}, + journal = {College Mathematics Journal}, + year = {2001}, + volume = {34}, + number = {4}, + pages = {290--292}, + month = {September}, +} + +@BOOK{Niven1956, + AUTHOR = {Niven, I.}, + TITLE = {Irrational Numbers}, + PUBLISHER = {The Mathematical Association of America. Distributed by John Wiley and Sons, Inc.}, + YEAR = {1956}, + volume = {11}, + series = {The Carus Mathematical Monographs}, +} +# http://www.ams.org/mathscinet-getitem?mr=0080123 + +@ARTICLE{Niven1967, + author = {Niven, I.}, + title = {Lattice points and polygonal area}, + journal = {The American Mathematical Monthly}, + year = {1967}, + volume = {74}, + pages = {1195--1200}, +} + + +@BOOK{Northrop1945, + AUTHOR = {Northrop, E.~P.}, + TITLE = {Riddles in Mathematics: A book of paradoxes}, + PUBLISHER = {The English Universities Press}, + address = {London, UK}, + YEAR = {1945}, +} + +@book{Obeirne1965, + Title = {Puzzles and Paradoxes}, + Author = {O'Beirne,~T.~H.}, + Publisher = {Oxford University Press}, + Year = {1965}, + ISBN = {978-0486246130} +} + +@ARTICLE{Odani2003, + AUTHOR = {Odani, K. and Murakami, T.}, + TITLE = {A Strange Property of Floating Bodies}, + JOURNAL = GAZ, + YEAR = {2003}, + volume = {87}, + number = {510}, + pages = {572--576}, + month = {November}, + keywords = {Buoyancy}, +} +#http://www.jstor.org/stable/3621314 + +@ARTICLE{Okuyama2003, + AUTHOR = {Okuyama, E. and Goho, K. and Mitsui, K.}, + TITLE = {New analytical method for V-block three-point method}, + JOURNAL = {Precision Engineering}, + YEAR = {2003}, + volume = {27}, + pages = {234--244}, +} + +@BOOK{Ording2019, + title = {99 Variations on a Proof}, + author = {Ording, P.}, + publisher = {Princeton University Press}, + address = {Princeton and Oxford}, + year = {2019}, + isbn = {9780691158839}, +} + +@BOOK{Oughtred1652, + title = {Clavis mathematica denu\`{o} limata. Cui accedit tractatus de resolutione æquationum qualitercunque adfectarum in numeris: et declaratio tum decimi elementi Euclidis de lateribus incommensurabilibus: tum decimi tertii \& decimi quarti elementi de quimque solidis regularibus}, + author = {Oughtred, W.}, + publisher = {Oxford}, + year = {1652}, + edition = {3rd}, +} + +@BOOK{Oughtred1633, + author = "Oughtred, W.", + title = "Mathematical Recreations", + publisher = "T.~Cotes", + address = "London", + year = "1633", +} + +@INBOOK{Oughtred1634, + AUTHOR = {Oughtred, W.}, + TITLE = {The Circles of Proportion and the Horizontal Instrument}, + CHAPTER = {To the English gentrie, and all others studious of the mathematicks}, + PUBLISHER = {Augustine Mathewes, London}, + YEAR = {1634}, +} + +@ARTICLE{Parks1992, + AUTHOR = {Parks, P.~C.}, + TITLE = {A. M. Lyapunov's stability theory�100 years on}, + JOURNAL = {IMA journal of mathematical control and information}, + YEAR = {1992}, + volume = {9}, + number = {4}, + pages = {275--303}, +} + +@ARTICLE{Paterson2009, + AUTHOR = {Paterson, M. and Zwick, U}, + TITLE = {Overhang}, + JOURNAL = {American Mathematical Monthly}, + YEAR = {2009}, + volume = {116}, + number = {1}, + pages = {19--44}, +} + +@ARTICLE{Paterson2009b, + AUTHOR = {Paterson, M. and Peres, Y. and Thorup, M. and Winkler, P. and Zwick, U}, + TITLE = {Maximum Overhang}, + JOURNAL = {American Mathematical Monthly}, + YEAR = {2009}, + volume = {116}, + number = {9}, + pages = {765--787}, +} +# doi:10.4169/000298909X474855 + +@INCOLLECTION{Pedersen1987, + AUTHOR = "Pedersen, O.", + TITLE = "The {P}rytz Planimeter", + BOOKTITLE = "From Ancient Omens to Statistical Mechanics, Essays on the Exact Sciences", + PUBLISHER = "University Library, Copenhagen", + YEAR = "1987", + editor = "Berggren, J.~L. and Goldstein, B.~R.", + volume = "39", + series = "Acta Historica Scientiarum Natutalium et Medicinalium", + pages = "259--270", +} + +@ARTICLE{Peterson2013, + author = {Peterson, D.~C. and Martin-Gill, C. and Guyette, F.~X. Tobias, A.~Z. and McCarthy, C.~E. and Harrington, S.~T. and Delbridge, T.~R. and Yealy, D.~M.}, + title = {Outcomes of Medical Emergencies on Commercial Airline Flights}, + journal = {New England and Journal of Medicine}, + year = {2013}, + volume = {368}, + pages = {2075--2083}, + month = {May}, + doi = {10.1056/NEJMoa1212052}, +} + + +@BOOK{Pell1650, + author = {Pell, J.}, + title = {An idea of Mathematicks}, + pages = {33--46}, + publisher = {Printed by William Du-Gard, and are to bee [sic] sold by Rob. Littleberrie}, + year = {1650}, + address = {London}, +} +# http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_id=xri:eebo:citation:11799763 + +@article{Pick1899, + Title = {Geometrisches Zur Zahlentheorie}, + Author = {Pick, G.}, + Journal = {Sitzenber. Lotos (Prague)}, + Volume = {19}, + Pages = {311--319}, + Year = {1899} +} + +@ARTICLE{Playfair1778, + author = {Playfair, J. and Maskelyne, N.}, + title = {On the Arithmetic of Impossible Quantities}, + journal = {Philopsophical Transactions of the Royal Society of London}, + year = {1778}, + volume = {68}, + pages = {318--343}, + month = {January}, + doi = {10.1098/rstl.1778.0016}, +} + +@BOOK{Popper2002, + author = {Popper, K.}, + title = {Conjectures and Refutations: The Growth of Scientific Knowledge}, + publisher = {Routledge}, + year = {2002}, + edition = {2nd}, +} + +@article{Puritz1973, + author = {Puritz, C. W.}, + title = {293. Area and volume of a sphere}, + journal = {The Mathematical Gazette}, + year = {1973}, + volume = {57}, + number = {401}, + pages = {206--207}, + DOI = {10.1017/S0025557200198341}, +} + + +@ARTICLE{Rabinowitz1997, + author = {Rabinowitz, S.}, + title = {A Polynomial Curve of ConstantWidth}, + journal = {Missouri Journal of Mathematical Sciences}, + year = {1997}, + volume = {9}, + pages = {23--27}, +} + +@ARTICLE{Rav1999, + author = {Rav, Y.}, + title = {Why do We Prove Theorems?}, + journal = {Philosophia Mathematica}, + year = {1999}, + volume = {7}, + number = {3}, + pages = {5--41}, +} + + +@book{Reuleaux1876, + title={The Kinematics of Machinery: Outlines of a Theory of Machines}, + author={Reuleaux, F.}, + publisher={Macmillian and co, London}, + year={1876} +} + +@book{Reuleaux1904, + title={The constructor: a handbook of machine design}, + author={Reuleaux, F.}, + publisher={The Engineering Magazine, New York}, + edition={English translation of the fourth German edition, H.~H.~Suplee}, + year={1904}, +} + +@BOOK{Reason1966, + AUTHOR = {Reason, R.~E.}, + TITLE = {Report on the measurement of roundness}, + PUBLISHER = {Rank Taylor Hobson, Leicester, England}, + YEAR = {1966}, +} + +@BOOK{Recorde1557, + AUTHOR = {Recorde, R.}, + TITLE = {The Whetstone of Witte}, + PUBLISHER = {London by I. Kyngston}, + YEAR = {1557}, +} + +@BOOK{Recorde1543, + AUTHOR = {Recorde, R.}, + TITLE = {The ground of artes teachyng the worke and practise of arithmetike.}, + PUBLISHER = {London by R.~Wolfe}, + YEAR = {1543}, +} + + +@ARTICLE{Renteln2005, + AUTHOR = {Renteln, P. and Dundes, A.}, + TITLE = {Foolproof: A Sampling of Mathematical Folk Humor}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {2005}, + volume = {52}, + number = {1}, + pages = {24--34}, + month = {January}, +} +#http://www.ams.org/notices/200501/fea-dundes.pdf + + +@ARTICLE{Reshetov2014, + author = {Reshetov, A.}, + title = {A Unistable Polyhedron with 14 Faces}, + journal = {International Journal of Computational Geometry and Applications}, + year = {2014}, + volume = {24}, + number = {1}, + pages = {39--60}, + month = {March}, +} +# doi = DOI: 10.1142/S0218195914500022 + +@BOOK{Richeson2012, + AUTHOR = {Richeson, D.~S.}, + TITLE = {Euler's Gem: The Polyhedron Formula and the Birth of Topology}, + PUBLISHER = {Princeton University Press}, + YEAR = {2012}, +} + +@ARTICLE{Richardson2017, + author = {Richardson, J. and Bachman, R.~M.}, + title = {A New Take on an Old Square}, + journal = {The Mathematics Teacher}, + year = {2017}, + volume = {110}, + number = {9}, + pages = {668--673}, + month = {May}, + doi = {10.5951/mathteacher.110.9.0668}, +} +# http://www.jstor.org/stable/10.5951/mathteacher.110.9.0668 + +@UNPUBLISHED{Rickey2002, + author = {Rickey, V.~F.}, + title = {A Reader’s Guide to {Euler’s} Introductio}, + year = {2002}, +} +# http://fredrickey.info/ + +@ARTICLE{Risch1969, + AUTHOR = {Risch, R.~H.}, + TITLE = {The Problem of Integration in Finite Terms}, + JOURNAL = {Transactions of the American Mathematical Society}, + YEAR = {1969}, + volume = {139}, + pages = {167--189}, + month = {May}, +} + +@ARTICLE{Rix2015, + author = {Rix, C.}, + title = {Don't Switch! Why Mathematicians' Answer to the {Monty Hall} Problem is Wrong}, + journal = {Mathematics Today}, + year = {2015}, + volume = {51}, + number = {4}, + pages = {182--185}, + month = {August}, +} + + +@BOOK{Robinson1950, + AUTHOR = {Robinson, R.}, + TITLE = {Definition}, + PUBLISHER = {Oxford University Press}, + YEAR = {1950}, + doi = {10.1093/acprof:oso/9780198241607.001.0001}, +} +# 160/ROB + +@BOOK{Robinson1996, + AUTHOR = {Robinson, A.}, + TITLE = {Non-standard analysis}, + PUBLISHER = {Princeton University Press}, + YEAR = {1996}, + edition = {revised}, +} +# isbn = {0-691-04490-2}, + +@ARTICLE{Robinson1960, + AUTHOR = {Robinson, G.~B.}, + TITLE = {Rockers and Rollers}, + JOURNAL = {Mathematics Magazine}, + YEAR = {1960}, + volume = {33}, + pages = {139--144}, +} + +@ARTICLE{Robson2001, + AUTHOR = {Robson, E.}, + TITLE = {Neither {S}herlock {H}olmes nor {B}abylon: A Reassessment of {P}limpton 322}, + JOURNAL = {Historia Mathematica}, + YEAR = {2001}, + volume = {28}, + number = {3}, + pages = {167--206}, +} +# See Mansfield2017 + +@BOOK{Robson2008, + AUTHOR = {Robson, E.}, + TITLE = {Mathematics in Ancient Iraq}, + PUBLISHER = {Princeton University Press}, + YEAR = {2008}, +} + +@ARTICLE{Rogers1986, + AUTHOR = {Rogers, W.~P.}, + TITLE = {Report of the Presidential Commission on the Space Shuttle {C}hallenger Accident }, + JOURNAL = {United States Government Printing Office, Washington DC}, + YEAR = {1986}, +} + + +@BOOK{Rohr, + author = {Rohr, R.~R.~J.}, + title = {Sundials: History, Theory and Practice}, + publisher = {Dover}, + year = {1970}, +} + +@BOOK{Rolt1929, + AUTHOR = {Rolt, F.~H.}, + TITLE = {Gauges and fine measures}, + PUBLISHER = {MacMillian and Co.~Ltd, St Martin's street London}, + YEAR = {1929}, + volume = {I}, +} + + +@BOOK{RouseBall, + author = {Rouse Ball, W.~W.}, + title = {Mathematical Recreations and Essays}, + publisher = {MacMillian}, + year = {1960}, + edition = {11th}, +} + +@BOOK{Row1966, + AUTHOR = {Row, T.~S.}, + TITLE = {Geometric Exercises in Paper Folding}, + PUBLISHER = {Dover}, + YEAR = {1966}, +} + +@BOOK{Sadler1996, + author = {Sadler, A.~J. and Thorning, D.~W.~S.}, + title = {Understanding Mechanics}, + publisher = {Oxford University Press}, + year = {1996}, + edition = {2nd}, +} + + +@BOOK{Sandifer2007, + author = {Sandifer, E.~C.}, + year = {2007}, + title = {How {E}uler Did It: {V}enn Diagrams}, + publisher = {Mathematical Association of America}, + address = {Washington D.C., USA}, + series = {The {MAA} Tercentenary {Euler} Celebration}, + edition = {2nd}, +} + +@ARTICLE{Sastry2002, + author = {Sastry, K.~R.~S.}, + title = {Brahmagupta quadrilaterals}, + journal = {Forum Geometricorum}, + year = {2002}, + volume = {2}, + pages = {167--173}, +} + +@ARTICLE{Savage1994, + author = {Savage, R.~P.}, + title = {The Paradox of Nontransitive Dice}, + journal = {The American Mathematical Monthly}, + year = {1994}, + volume = {101}, + number = {5}, + pages = {429--436}, + month = {May}, +} +# http://www.jstor.org/stable/2974903 + +@ARTICLE{Schaumberger1974, + AUTHOR = {Schaumberger, N.}, + TITLE = {A Classroom Theorem on Trigonometric Irrationalities}, + JOURNAL = {The Two-Year College Mathematics Journal}, + YEAR = {1974}, + volume = {5}, + number = {1}, + pages = {73--76}, +} + +@BOOK{Schulze1913, + author = {Schulze, A. and Sevenoak, F.}, + title = {Plane Geometry}, + publisher = {MacMillan}, + year = {1913}, + edition = {Revised}, +} +# https://hdl.handle.net/2027/hvd.32044097046684 + + +@BOOK{Schwamb1904, + AUTHOR = {Schwamb, P. and Merrill, A.~L.}, + TITLE = {Elements of Mechanism}, + PUBLISHER = {Lindsay Publications, Bradley}, + YEAR = {1984}, + note = {First published 1904}, +} + +@ARTICLE{Segel1972, + AUTHOR = {Segel, L.~A.}, + TITLE = {Simplification and Scaling}, + JOURNAL = {SCIAM Reviews}, + YEAR = {1972}, + volume = {14}, + pages = {547--571}, +} + +@article{Selvin1975, + Title = {A problem in probability (letter to the editor)}, + Author = {Selvin,~J.}, + Month = {February}, + Year = {1975}, + Journal = {American Statistician}, + Number = {29}, + Volume = {1}, + Pages = {67} +} + +@BOOK{Segerman2016, + author = {Segerman, H.}, + title = {Visualizing Mathematics with 3D Printing}, + publisher = {Johns Hopkins University Press}, + address = {Baltimore, Maryland}, + year = {2016}, + isbn = {978-1421420356}, +} + +@ARTICLE{Shen1994, + author = {Shen, A.}, + title = {Entrance Examinations to the Mekh-mat}, + journal = {The Mathematical Intelligencer}, + year = {1994}, + volume = {16}, + number = {4}, + pages = {6--10}, +} +#See also Khovanova2011.pdf + +@PHDTHESIS{Shibli1932, + author = {Shibli, J.}, + title = {Recent developments in the teaching of geometry}, + school = {Columbia University}, + year = {1932}, + type = {PhD}, +} + +@ARTICLE{Shirali2012, + AUTHOR = {Shirali, S.~A.}, + TITLE = {A party trick involving the triangular numbers}, + JOURNAL = GAZ, + YEAR = {2012}, + volume = {96}, + number = {536}, + pages = {261--263}, + month = {July}, +} + +@BOOK{Sigler2003, + author = {Sigler, L.~E.}, + title = {{Fibinacci's} Liber Abaci: a translation into Modenr English of {Leonardo Pisano's} Book of Calculation}, + publisher = {Springer}, + year = {2003}, + series = {Sources and Studies in the History of Mathematics and Physical Sciences}, +} + +@TECHREPORT{Siklos2010a, + author = {Siklos, S.~T.~C.}, + title = {Advanced Problems in Core Mathematics}, + institution = {Cambridge University}, + year = {2010}, +} + +@TECHREPORT{Siklos2010b, + author = {Siklos, S.~T.~C.}, + title = {Advanced Problems in Core Mathematics: 43 problems complete with full solutions and discussion}, + institution = {Cambridge University}, + year = {2010}, +} + +@BOOK{Simmons2007, + AUTHOR = {Simmons, G.~F.}, + TITLE = {Calculus Gems: Brief Lives and Memorable Mathematics}, + PUBLISHER = {The Mathematical Association of America}, + YEAR = {2007}, +} + +@ARTICLE{Sleeman2017, + author = {Sleeman, R. and Aitken, C. and Wilson, A.}, + title = {Cocaine on cash. Does quantity vary by location?}, + journal = {Significance}, + year = {2017}, + volume = {14}, + number = {6}, + pages = {18--23}, + month = {December}, + doi = {10.1111/j.1740-9713.2017.01088.x}, +} + +@BOOK{SmithDE, + author = {Smith, D.~E.}, + title = {A source book in mathematics}, + publisher = {McGraw-Hill}, + year = {1929}, +} + +@BOOK{Smith_G_2002, + AUTHOR = {Smith, G.~T.}, + TITLE = {Industrial Metrology: surfaces and roundness}, + PUBLISHER = {Springer}, + YEAR = {2002}, +} + +@BOOK{Snape1991, + AUTHOR = {Snape, C. and Scott, H.}, + TITLE = {How Puzzling}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1991}, +} + +@BOOK{Snow1849, + AUTHOR = {Snow, J.}, + TITLE = {On the Mode of Communication of Cholera}, + YEAR = {1849}, + PUBLISHER = {John Churchill}, + address = {London}, +} + +@BOOK{Snow1855, + AUTHOR = {Snow, J.}, + TITLE = {On the Mode of Communication of Cholera}, + YEAR = {1855}, + PUBLISHER = {John Churchill}, + address = {London}, + edition = {2nd}, +} + +@MISC{Snow1903, + author = {Snow, L.~T.}, + title = {Planimeter}, + howpublished = {United States Patent No.~718166}, + month = {Jan 13}, + year = {1903}, +} + +@BOOK{Spivak1967, + author = {Spivak, M.}, + title = {Calculus}, + publisher = {Addison Wesley}, + address = {London, UK}, + year = {1976}, + edition = {World Student Edition}, +} + + +@ARTICLE{Stewart1966, + AUTHOR = {Stewart, A.~T.}, + TITLE = {Two Circle Roller}, + JOURNAL = AJP, + YEAR = {1966}, + volume = {34}, + number = {2}, + pages = {166--167}, + month = {February}, +} + +@BOOK{Stewart2007, + author = {Stewart, J.}, + title = {Essential Calculus: Early Trancendentals}, + publisher = {Thomson}, + year = {2007}, + edition = {International Student Edition}, +} + +@BOOK{Stewart2013, + author = {Stewart, J.}, + title = {Essential Calculus: Early Trancendentals}, + publisher = {Brooks Cole}, + year = {2013}, + edition = {2nd International Metric Version}, +} + +@BOOK{Steven2006, + author = {Steven, J.}, + title = {The Ghost Map: The Story of London's Most Terrifying Epidemic – and How it Changed Science, Cities and the Modern World}, + publisher = {Riverhead Books}, + year = {2006}, + edition = {World Student Edition}, +} + +@ARTICLE{Stone1942, + AUTHOR = {Stone, A.~H. and Tukey, J.~W.}, + TITLE = {Generalized ``sandwich" theorems}, + JOURNAL = {Duke Mathematics Journal}, + YEAR = {1942}, + volume = {9}, + number = {2}, + pages = {356--359}, +} +# doi:10.1215/S0012-7094-42-00925-6 + + +@BOOK{StewartGalois, + author = {Stewart, I.}, + title = {Galois Theory}, + publisher = {Chapman and Hall}, + year = {1989}, + edition = {Second}, +} + +@article{Stedall2000, + title = {{Ariadne's Thread: The Life and Times of Oughtred's Clavis}}, + author = {Stedall, J.~A.}, + journal = {Annals of Science}, + volume = {57}, + number = {1}, + pages = {27--60}, + year = {2000}, + publisher = {Taylor \& Francis} +} + +@book{Stedall2002, + title = {{A discourse concerning algebra: English algebra to 1685}}, + author = {Stedall, J.~A.}, + year = {2002}, + publisher = {Oxford University Press}, + address = {Oxford, UK}, +} + +@book{Stedall2003, + title = {{The Greate Invention of Algebra: Thomas Harriot's Treatise on Equations }}, + author = {Stedall, J.~A.}, + year = {2003}, + publisher = {Oxford University Press}, + address = {Oxford, UK}, +} + +@BOOK{Steinhaus1969, + AUTHOR = {Steinhaus, H.}, + TITLE = {Mathematical Snapshots}, + PUBLISHER = {Oxford University Press}, + address = {Oxford, UK}, + YEAR = {1969}, +} + +@ARTICLE{Stewart2012, + author = {Stewart, S.~M.}, + title = {On the trajectories of projectiles depicted in early ballistic woodcuts}, + journal = {European Journal of Physics}, + year = {2012}, + volume = {33}, + number = {1}, + pages = {149--166}, +} + +@BOOK{Stillwell2002, + author = {Stillwell, J.}, + title = {Mathematics and its History}, + publisher = {Springer}, + address = {New York}, + year = {2002}, + edition = {2nd}, +} + + +@BOOK{Stirrup, + author = {Stirrup, T.}, + title = {Horometria, or the compleat diallist}, + publisher = {William Leybourn}, + year = {1652}, +} + +@BOOK{Stroud2013, + author = {Stroud, K.~A. and Booth, D.~J.}, + title = {Engineering Mathematics}, + publisher = {Palgrave}, + year = {2013}, + address = {Basingstoke, UK}, + edition = {7th}, +} + + +@BOOK{Struik1969, + AUTHOR = {Struik, D.~J.}, + TITLE = {A source book in Mathematics 1200--1800}, + PUBLISHER = {Harvard College}, + YEAR = {1969}, +} + +@article{Sullivan1987, + title = {71.23 The Sums of Powers of Integers}, + author = {Sullivan, D.}, + journal = GAZ, + volume = {71}, + number = {456}, + pages = {144--146}, + url = {http://www.jstor.org/stable/3616508}, + ISSN = {00255572}, + year = {1987}, + publisher = {The Mathematical Association}, +} + + +@ARTICLE{Sullivan2010, + AUTHOR = {Sullivan, J.~M. and Wetzel, J.~E.}, + TITLE = {An ancient ellipse locus}, + JOURNAL = {The American Mathematical Monthly}, + YEAR = {2010}, + month = {February}, +} + +@BOOK{Swann1989, + author = {Swann, H. and Johnson, J.}, + title = {Prof. E. McSquared's Grade A calculus primer}, + publisher = {Janson Publications}, + year = {1989}, + edition = {Expanded intergalactic version!}, +} + +@article{Swetz1972, + Author = {Swetz,~F.}, + Journal = {Mathematics Teacher}, + Pages = {423--430}, + Title = {The Amazing {C}hiu {C}hang {S}uan {S}hu}, + Volume = {65}, + number = {5}, + Year = {1972} +} + + +@BOOK{Swetz2012, + Author = {Swetz,~F.}, + TITLE = {Mathematical Expeditions: Exploring Word Problems across the Ages}, + PUBLISHER = {The Johns Hopkins University Press}, + YEAR = {2012}, + isbn = {978-1421404387}, +} + +@BOOK{Swift1726, + AUTHOR = {Swift, J.}, + TITLE = {Gulliver's Travels}, + PUBLISHER = {Motte, B.}, + YEAR = {1726}, +} + + +@ARTICLE{Sylvester1875, + AUTHOR = "Sylvester, J.~J.", + TITLE = "On recent discoveries in mechanical conversion of motion", + JOURNAL = "Proceedings of the Royal Institution of Great Britain", + YEAR = "1875", + volume = "7", + pages = "179--198", +} + +@ARTICLE{Sylvester1875b, + AUTHOR = "Sylvester, J.~J.", + TITLE = {The Plagiograph and the Skew Pantigraph}, + JOURNAL = {Nature}, + YEAR = {1875}, + volume = {12}, + pages = {214-216}, +} + + +@ARTICLE{Tall1982, + AUTHOR = {Tall, D.}, + TITLE = {The Blancmange Function Continuous Everywhere but Differentiable Nowhere}, + JOURNAL = {The Mathematical Gazette}, + YEAR = {1982}, + volume = {66}, + number = {435}, + pages = {11-22}, + month = {March}, +} + + +@INBOOK{Tamina2007, + AUTHOR = {Tamina, D.}, + editor = {Shell-Gellasch, A.}, + TITLE = {Hands on History: A Resource for Teaching Mathematics }, + CHAPTER = {Historical Mechanisms for Drawing Curves}, + PUBLISHER = {American Mathematical Society}, + YEAR = {2007}, +} + +@MANUAL{TMAU2017, + title = {Test of Mathematics for University Admission: Notes on Logic and Proof}, + author = {???}, + organization = {Cambridge Assessment Admissions Testing}, + year = {2017}, +} +# http://www.admissionstestingservice.org/images/405848-test-of-mathematics-for-university-admission-notes-on-logic-and-proof-enhanced-test-specification-.pdf + + +@ARTICLE{Tanswell2015, + author = {Tanswell, F.}, + title = {A Problem with the Dependence of Informal Proofs on Formal Proofs}, + journal = {Philosophia Mathematica}, + year = {2015}, + volume = {23}, + number = {4}, + pages = {295--310}, + doi = {10.1093/philmat/nkv008}, +} + +@BOOK{Tao2006, + author = {Tao, T.}, + title = {Solving Mathematical Problems: A Personal Perspective}, + publisher = {Oxford University Press}, + year = {2006}, +} + +@BOOK{Taylor, + author = {Taylor, E.~G.~R.}, + title = {The mathematical practitioners of Tudor and Stuart England}, + publisher = {Cambridge University Press for the Institute of Navigation}, + year = {1954}, +} + +@BOOK{Thomas1974, + AUTHOR = {Thomas, G.~G.}, + TITLE = {Engineering Metrology}, + PUBLISHER = {Butterworths}, + YEAR = {1974}, +} + +@ARTICLE{Thiele2003, + author = {Thiele, R.}, + title = {{Hilbert's} Twenty-Fourth Problem}, + journal = {The American Mathematical Monthly}, + year = {2003}, + volume = {110}, + number = {1}, + pages = {1--23}, + month = {January}, + doi = {10.2307/3072340}, +} + +@ARTICLE{Tong2004, + AUTHOR = {Tong, J.}, + TITLE = {$b^2-4ac$ and $b^2-3ac$}, + JOURNAL = GAZ, + YEAR = {2004}, + volume = {88}, + number = {513}, + pages = {511--513}, + month = {November}, +} + +@ARTICLE{Townie2013, + AUTHOR = {Townie, A.}, + TITLE = {Urban Maths: The Mirascope}, + JOURNAL = {Mathematics Today}, + YEAR = {2013}, + volume = {49}, + number = {3}, + pages = {138--139}, + month = {June}, +} + +@book{Townsend1994, + Title = {World's Greatest Puzzles}, + Author = {Townsend,~C.~B.}, + Publisher = {Sterling Juvenile}, + Year = {1994}, + ISBN = {978-0806986654} +} + +@ARTICLE{Trainin2007, + AUTHOR = {Trainin, J.}, + TITLE = {An elementary proof of {Pick's} theorem}, + JOURNAL = GAZ, + YEAR = {2007}, + volume = {91}, + number = {522}, + pages = {536–540}, + month = {November}, +} + +@BOOK{Truesdell, + AUTHOR = {Truesdell, C.}, + TITLE = {Essays in the History of Mechanics}, + PUBLISHER = {Springer}, + YEAR = {1968}, +} + +@article{Turing1950, + title = {Computing Machinery and Intelligence}, + author = {Turing, A.~M.}, + journal = {Mind}, + volume = {59}, + number = {236}, + series = {New Series}, + year = {1950}, + pages = {433--460}, + url = {http://www.jstor.org/stable/2251299}, + ISSN = {00264423}, + language = {English}, +} + +@Article{Turing1953, + Title = {{S}ome calculations of the {R}iemann zeta-function}, + Author = {Turing, A.~M.}, + Journal = {Proceedings of the London Mathathematical Society}, + Pages = {99--117}, + Volume = {3}, + Year = {1953}, +} + +@BOOK{Urban2008, + author = {Urban, P. and Martin, D. and Haese, R. and Haese, S. and Haese, M. and Humphries, M.}, + title = {Mathematics for the international student: Mathematics HL (Core)}, + publisher = {Haese and Harris Publications}, + year = {2008}, + edition = {Second}, + isbn = {9781876543112}, +} + +@BOOK{vanSchooten1646, + AUTHOR = {Franciscus van Schooten}, + TITLE = {De organica conicarum sectionum in plano descriptione}, + PUBLISHER = {Lugd. Batavor.: Ex Officina Elzeviriorum}, + YEAR = {1646}, +} +# ML Spec.Coll r QA 33.S3 +# http://books.google.co.uk/books?id=fZg_AAAAcAAJ&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=true + +@ARTICLE{vanMaanen1992, + AUTHOR = {Jan van Maanen}, + TITLE = {Seventeenth Century Instruments for Drawing Conic Sections}, + JOURNAL = GAZ, + YEAR = {1992}, + volume = {76}, + number = {476}, + pages = {222--230}, + month = {July}, +} +# http://www.jstor.org/pss/3619131 + +@BOOK{Velleman2006, + AUTHOR = {Velleman, D.~J.}, + TITLE = {How to Prove It: A Structured Approach}, + PUBLISHER = {Cambridge University Press}, + YEAR = {2006}, +} + +@article{vosSavant, + Title = {``{A}sk {M}arilyn'' column}, + Author = {Marilyn vos Savant}, + Journal = {Parade Magazine}, + Page = {16}, + Year = {1990} +} + +@BOOK{Viete1636, + AUTHOR = {Viete, F.}, + TITLE = {Algebre de Viete, d'une methode nouvelle, claire, et facile }, + PUBLISHER = {L.~Boulenger, Paris}, + YEAR = {1636}, +} +# http://catalogue.nla.gov.au/Record/2381109 + +@BOOK{Wall1969, + AUTHOR = {Wall, H.~S.}, + TITLE = {Creative Mathematics}, + PUBLISHER = {University of Texas Press}, + YEAR = {1969}, + isbn = {0-292-71039-9}, +} + +@BOOK{Wallis2004, + AUTHOR = {Wallis, J.}, + TITLE = {The Arithmetic of Infinitesimals}, + PUBLISHER = {Springer}, + YEAR = {2004}, +} + +@ARTICLE{Walley2018, + author = {Walley, S.~M.}, + title = {Aristotle, projectiles and guns}, + year = {2018}, + source = {https://arxiv.org/abs/1804.00716}, +} + +@ARTICLE{Watkins1953, + author = {Watkins, G.~M.}, + title = {The Vertical Winding Engines of {D}urham}, + journal = {Transactions of the Newcomen Society}, + year = {1953}, + volume = {29}, + pages = {205--219}, + annote = {Plate XXXVII and Plate XXXVIII}, +} + + +@BOOK{Waugh, + author = {Waugh, A.~E.}, + title = {Sundials: Their Theory and Construction}, + publisher = {Dover}, + year = {1973}, +} + +@BOOK{Wells2012, + AUTHOR = {Wells, D.}, + TITLE = {Games and Mathematics: Subtle Connections}, + PUBLISHER = {Cambridge University Press}, + YEAR = {2012}, +} + +@BOOK{Wiener1912, + author = {Wiener, H. and Treutlein, P.}, + title = {Verzeichnis von H. Wieners und P. Treutleins Sammlungen mathematischer modelle F\{"u}r Hochschulen, H\"{o}here Lehranstalten und Technische Fachschulen}, + publisher = {Verlag von B.~G.Teubner}, + year = {1912}, + address = {Leipzig und Berlin}, +} +# See also these references. +# https://archive.org/details/dergeometrische00treugoog +# (historical overview, theoretical bach ground and examples) +# https://archive.org/details/lehrbuchderelem01treugoog +# https://ia801406.us.archive.org/26/items/lehrbuchderelem02henrgoog/lehrbuchderelem02henrgoog.pdf +# https://archive.org/details/lehrbuchderelem00treugoog + + + +@BOOK{Whewell1819, + AUTHOR = {Whewell, W.}, + TITLE = {An Elementary Treatise on Mechanics: Designed for the use of Students in the University }, + PUBLISHER = {Cambridge}, + YEAR = {1819}, +} + +@ARTICLE{White2016, + author = {White, H. and March, P. and Lawrence, J. and Vera, J. and Sylvester, A. and Brady, D. and Bailey, P.}, + title = {Measurement of Impulsive Thrust from a Closed Radio-Frequency Cavity in Vacuum}, + journal = {Journal of Propulsion and Power}, + year = {2016}, + pages = {1--12}, + doi = {10.2514/1.B36120}, +} + +@ARTICLE{Whiteside1961a, + AUTHOR = {Whiteside, D.~T.}, + TITLE = {Henry Briggs: The Binomial Theorem Anticipated}, + JOURNAL = GAZ, + YEAR = {1961}, + volume = {45}, + number = {351}, + pages = {9--12}, + month = {February}, +} +#http://www.jstor.org/stable/3614760 + +@ARTICLE{Whiteside1961b, + AUTHOR = {Whiteside, D.~T.}, + TITLE = {Newton's Discovery of the General Binomial Theorem}, + JOURNAL = GAZ, + YEAR = {1961}, + volume = {45}, + number = {353}, + pages = {175--180}, + month = {October}, +} +#http://www.jstor.org/stable/3612767 + +@BOOK{Wilkins1680, + AUTHOR = {Wilkins, J.}, + TITLE = {Mathematical magick: or, the wonders that may be performed by mechanical geometry }, + PUBLISHER = {Gellibrand, London}, + YEAR = {1680}, +} + + +@ARTICLE{Williams1964, + AUTHOR = "Williams, C.~P.", + TITLE = "On Formulae for the $n$th Prime Number", + JOURNAL = GAZ, + YEAR = "1964", + volume = "48", + number = "366", + pages = "413--415", + month = "December", +} + + +@BOOK{Willers1947, + AUTHOR = "Willers, Fr.~A.", + editor = "Beyer, R.~T.", + TITLE = "Practical Analysis: Graphical and Numerical Methods", + PUBLISHER = "Dover, New York", + YEAR = "1947", +} + +@BOOK{Willers1951, + AUTHOR = "Willers, Fr.~A.", + TITLE = "Mathematische Maschinen und Instrumente", + PUBLISHER = "Akademie-Verlag", + YEAR = "1951", + edition = "2nd", +} + +@BOOK{Winkler2007, + AUTHOR = {Winkler, P.}, + TITLE = {Mathematical Mind-benders}, + PUBLISHER = {A.~K.~Peters}, + YEAR = {2007}, + isbn = {978-1568813363}, +} + +@BOOK{Wittgenstein1956, + AUTHOR = {Wittgenstein, L.}, + TITLE = {Remarks on the Foundations of Mathematics}, + PUBLISHER = {Basil Blackwell, Oxford}, + YEAR = {1956}, + edition = {Third}, +} + +@BOOK{Wright1833, + author = {Wright, J.~M.~F.}, + title = {A Collection of Cambridge Mathematical Examination Papers: Papers in the branches of the mixed mathematics}, + publisher = {W.~P.Grant}, + year = {1833}, + address = {Cambridge, UK}, +} +# Volume 1: Barcode: 30150017219319 +# Volume 1: http://hdl.handle.net/2027/njp.32101068071032 +# Volume 2: Barcode: 30150017219665 + + +@BOOK{Yaglom1961, + AUTHOR = {Yaglom, I.~M. and Boltyanskii, V.~G.}, + TITLE = {Convex Figures}, + PUBLISHER = {Holt, Rienhart and Winston}, + YEAR = {1961}, +} + +@BOOK{Yates1949, + author = {Yates, R.~C.}, + title = {Geometrical Tools: a mathematical sketch and model book}, + publisher = {Educational Publishers, Incorporated Saint Louis}, + year = {1949} +} +# https://archive.org/details/YatesToolsMathematicalSketchModel1941 + +@ARTICLE{Yates1938a, + author = {Yates, R.~C.}, + TITLE = {An Ellipsograph}, + JOURNAL = {National Mathematics Magazine}, + YEAR = {1938}, + volume = {12}, + number = {5}, + pages = {213--215}, + month = {Feb}, +} + +@ARTICLE{Yates1938, + author = {Yates, R.~C.}, + TITLE = {A Linkage for Describing Curves Parallel to the Ellipse}, + JOURNAL = {The American Mathematical Monthly}, + YEAR = {1938}, + volume = {45}, + number = {9}, + pages = {607--608}, +} + +@ARTICLE{Youschkevitch1976, + AUTHOR = {Youschkevitch, A.~P.}, + TITLE = {The concept of function up to the middle of the 19th century}, + JOURNAL = {Archive for the History of the Exact Sciences}, + YEAR = {1976}, + volume = {16}, + pages = {37--85}, +} + +@ARTICLE{Yuster1984, + author = {Yuster, T.}, + title = {The Reduced Row Echelon Form of a Matrix is Unique: A Simple Proof}, + journal = {Mathematics Magazine}, + year = {1984}, + volume = {57}, + number = {2}, + pages = {93--94}, + month = {March}, + doi = {10.2307/2689590}, +} + + +@ARTICLE{Yzeren1993, + AUTHOR = {van Yzern, J.}, + TITLE = {A simple proof of {Pascal}'s hexagon theorem}, + JOURNAL = {American Mathematical Monthly}, + YEAR = {1993}, + volume = {100}, + number = {10}, + pages = {930--931}, + month = {December}, +} + +@BOOK{Zeitz2007, + AUTHOR = {Zeitz, P.}, + TITLE = {The Art and Craft of Problem Solving}, + PUBLISHER = {Wiley}, + YEAR = {2007}, + edition = {Second}, +} diff --git a/CaseStudies/2019/References/bu1.aux b/CaseStudies/2019/References/bu1.aux new file mode 100644 index 00000000..92ea6e6d --- /dev/null +++ b/CaseStudies/2019/References/bu1.aux @@ -0,0 +1,8 @@ +\bibstyle{unsrt} +\citation{2015STACKReport} +\citation{2013CAA} +\citation{Goldenberg_2008} +\bibdata{sangwin,education,PUS,cate} +\bibcite{2015STACKReport}{1} +\bibcite{2013CAA}{2} +\bibcite{Goldenberg_2008}{3} diff --git a/CaseStudies/2019/References/bu1.bbl b/CaseStudies/2019/References/bu1.bbl new file mode 100644 index 00000000..046bd95d --- /dev/null +++ b/CaseStudies/2019/References/bu1.bbl @@ -0,0 +1,18 @@ +\begin{thebibliography}{1} + +\bibitem{2015STACKReport} +C.~J. Sangwin. +\newblock Who uses {STACK}? a report on the use of the {STACK CAA} system. +\newblock Technical report, Loughborough University, Loughborough, UK, 2015. + +\bibitem{2013CAA} +C.~J. Sangwin. +\newblock {\em Computer Aided Assessment of Mathematics}. +\newblock Oxford University Press, Oxford, UK, 2013. + +\bibitem{Goldenberg_2008} +P.~Goldenberg and J.~Mason. +\newblock {Shedding light on and with example spaces.} +\newblock {\em Educational Studies in Mathematics}, 65(2):183–194, 2008. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu1.blg b/CaseStudies/2019/References/bu1.blg new file mode 100644 index 00000000..41b27973 --- /dev/null +++ b/CaseStudies/2019/References/bu1.blg @@ -0,0 +1,6 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu1.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib diff --git a/CaseStudies/2019/References/bu2.aux b/CaseStudies/2019/References/bu2.aux new file mode 100644 index 00000000..a2f79298 --- /dev/null +++ b/CaseStudies/2019/References/bu2.aux @@ -0,0 +1,12 @@ +\bibstyle{unsrt} +\citation{Kinnear2018STACKConf} +\citation{Renkl_2002} +\citation{Roediger_2011} +\citation{Goldenberg_2008} +\citation{Mullet_2014} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Kinnear2018STACKConf}{1} +\bibcite{Renkl_2002}{2} +\bibcite{Roediger_2011}{3} +\bibcite{Goldenberg_2008}{4} +\bibcite{Mullet_2014}{5} diff --git a/CaseStudies/2019/References/bu2.bbl b/CaseStudies/2019/References/bu2.bbl new file mode 100644 index 00000000..be5355c6 --- /dev/null +++ b/CaseStudies/2019/References/bu2.bbl @@ -0,0 +1,31 @@ +\begin{thebibliography}{1} + +\bibitem{Kinnear2018STACKConf} +George Kinnear. +\newblock Delivering an online course using {STACK}. +\newblock In {\em Proceedings of the STACK Conference}, 2018. + +\bibitem{Renkl_2002} +A.~Renkl, R.~K. Atkinson, U.~H. Maier, and R.~Staley. +\newblock {From Example Study to Problem Solving: Smooth Transitions Help + Learning.} +\newblock {\em The Journal of Experimental Education}, 70(4):293--315, 2002. + +\bibitem{Roediger_2011} +H.~L. Roediger and A.~C. Butler. +\newblock {The critical role of retrieval practice in longterm retention.} +\newblock {\em Trends in Cognitive Sciences}, 15(1):20--27, 2011. + +\bibitem{Goldenberg_2008} +P.~Goldenberg and J.~Mason. +\newblock {Shedding light on and with example spaces.} +\newblock {\em Educational Studies in Mathematics}, 65(2):183–194, 2008. + +\bibitem{Mullet_2014} +H.~G. Mullet, A.~C. Butler, B.~Verdin, R.~Borries, and E.~J. Marsh. +\newblock {Delaying feedback promotes transfer of knowledge despite student + preferences to receive feedback immediately.} +\newblock {\em Journal of Applied Research in Memory and Cognition}, + 3(3):222--229, 2014. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu2.blg b/CaseStudies/2019/References/bu2.blg new file mode 100644 index 00000000..e3b2dd62 --- /dev/null +++ b/CaseStudies/2019/References/bu2.blg @@ -0,0 +1,6 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu2.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib diff --git a/CaseStudies/2019/References/bu3.aux b/CaseStudies/2019/References/bu3.aux new file mode 100644 index 00000000..62c1a2e7 --- /dev/null +++ b/CaseStudies/2019/References/bu3.aux @@ -0,0 +1,4 @@ +\bibstyle{unsrt} +\citation{Coletta2010} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Coletta2010}{1} diff --git a/CaseStudies/2019/References/bu3.bbl b/CaseStudies/2019/References/bu3.bbl new file mode 100644 index 00000000..a808bb98 --- /dev/null +++ b/CaseStudies/2019/References/bu3.bbl @@ -0,0 +1,9 @@ +\begin{thebibliography}{1} + +\bibitem{Coletta2010} +V.~P. Coletta. +\newblock {\em Physics Fundamentals}. +\newblock Physics Curriculum and Instruction Inc., Lakeville, Minessota, 2nd + edition, 2010. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu3.blg b/CaseStudies/2019/References/bu3.blg new file mode 100644 index 00000000..ba3c3a6a --- /dev/null +++ b/CaseStudies/2019/References/bu3.blg @@ -0,0 +1,6 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu3.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib diff --git a/CaseStudies/2019/References/bu4.aux b/CaseStudies/2019/References/bu4.aux new file mode 100644 index 00000000..0813cc34 --- /dev/null +++ b/CaseStudies/2019/References/bu4.aux @@ -0,0 +1,14 @@ +\bibstyle{unsrt} +\citation{Kallweit_2019} +\citation{Hattie_2009} +\citation{Hattie_2007} +\citation{Nicol_2006} +\citation{Bruder_2015} +\citation{Schaub_2018} +\citation{Zech_1978} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Kallweit_2019}{1} +\bibcite{Hattie_2009}{2} +\bibcite{Hattie_2007}{3} +\bibcite{Nicol_2006}{4} +\bibcite{Bruder_2015}{5} diff --git a/CaseStudies/2019/References/bu4.bbl b/CaseStudies/2019/References/bu4.bbl new file mode 100644 index 00000000..aba01622 --- /dev/null +++ b/CaseStudies/2019/References/bu4.bbl @@ -0,0 +1,44 @@ +\begin{thebibliography}{1} + +\bibitem{Kallweit_2019} +M.~Kallweit and E.~Glasmachers. +\newblock Adaptive selbstlernaufgaben mit stack. +\newblock 2019. + +\bibitem{Hattie_2009} +J.~Hattie. +\newblock {\em Visible learning: A synthesis of over 800 meta \-analyses + relating to achievement.} +\newblock Routledge, 2009. + +\bibitem{Hattie_2007} +J.~Hattie and H.~Timperley. +\newblock The power of feedback. +\newblock {\em Review of Educational Research}, 77(1):91--112, 2007. + +\bibitem{Nicol_2006} +D.J. Nicol and D.~Macfarlane-Dick. +\newblock Formative assessment and self\-regulated learning: a model and seven + principles of good feedback practice. +\newblock {\em Studies in Higher Education,}, 31(2):199--218, 2006. + +\bibitem{Bruder_2015} +R.~Bruder, N.~Feldt~Caesar, A.~Pallack, G.~Pinkernell, and A.~Wynands. +\newblock Mathematisches grundwissen und grundkönnen in der sekundarstufe ii. +\newblock {\em W. Blum et al. (Hrsg.), Bildungsstandards aktuell: Mathematik in + der Sekundarstufe II}, pages 108--124, 2015. + +\bibitem{Schaub_2018} +M.~Schaub. +\newblock Einsatz des elementarisierenden testens im ein- und ausgangstest des + online vorkurses vemint. +\newblock {\em Beiträge zum Mathematikunterricht 2018.}, pages 1567--1570, + 2018. + +\bibitem{Zech_1978} +F.~Zech. +\newblock {\em Grundkurs Mathematikdidaktik. Theoretische und praktische + Anleitungen für das Lehren und Lernen von Mathematik.} +\newblock 1978. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu4.blg b/CaseStudies/2019/References/bu4.blg new file mode 100644 index 00000000..376a1f42 --- /dev/null +++ b/CaseStudies/2019/References/bu4.blg @@ -0,0 +1,9 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu4.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib +Warning--empty journal in Kallweit_2019 +Warning--empty publisher in Zech_1978 +(There were 2 warnings) diff --git a/CaseStudies/2019/References/bu5.aux b/CaseStudies/2019/References/bu5.aux new file mode 100644 index 00000000..f3ab2ae0 --- /dev/null +++ b/CaseStudies/2019/References/bu5.aux @@ -0,0 +1,6 @@ +\bibstyle{unsrt} +\citation{Nakamura_2017} +\citation{Nielsen_1993} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Nakamura_2017}{1} +\bibcite{Nielsen_1993}{2} diff --git a/CaseStudies/2019/References/bu5.bbl b/CaseStudies/2019/References/bu5.bbl new file mode 100644 index 00000000..767c5b9e --- /dev/null +++ b/CaseStudies/2019/References/bu5.bbl @@ -0,0 +1,14 @@ +\begin{thebibliography}{1} + +\bibitem{Nakamura_2017} +Y.~Nakamura and T.~Nakahara. +\newblock A new mathematics input interface with flick operation for mobile + devices. +\newblock 15(2), 2017. + +\bibitem{Nielsen_1993} +J.~Nielsen. +\newblock {\em Usability Engineering}. +\newblock Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1993. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu5.blg b/CaseStudies/2019/References/bu5.blg new file mode 100644 index 00000000..0a970cb5 --- /dev/null +++ b/CaseStudies/2019/References/bu5.blg @@ -0,0 +1,8 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu5.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib +Warning--empty journal in Nakamura_2017 +(There was 1 warning) diff --git a/CaseStudies/2019/References/bu6.aux b/CaseStudies/2019/References/bu6.aux new file mode 100644 index 00000000..8628273f --- /dev/null +++ b/CaseStudies/2019/References/bu6.aux @@ -0,0 +1,16 @@ +\bibstyle{unsrt} +\citation{cosh} +\citation{Derr_2017} +\citation{Derr_2018} +\citation{2017MCQ} +\citation{sefi} +\citation{Weigel_2019} +\citation{Weigel_2017} +\bibdata{sangwin,education,PUS,cate} +\bibcite{cosh}{1} +\bibcite{Derr_2017}{2} +\bibcite{Derr_2018}{3} +\bibcite{2017MCQ}{4} +\bibcite{sefi}{5} +\bibcite{Weigel_2019}{6} +\bibcite{Weigel_2017}{7} diff --git a/CaseStudies/2019/References/bu6.bbl b/CaseStudies/2019/References/bu6.bbl new file mode 100644 index 00000000..d928a9cd --- /dev/null +++ b/CaseStudies/2019/References/bu6.bbl @@ -0,0 +1,43 @@ +\begin{thebibliography}{1} + +\bibitem{cosh} +COSH Cooperation~Schule Hochschule. +\newblock Mindestanforderungskatalog mathematik. +\newblock 2014. + +\bibitem{Derr_2017} +K.~Derr. +\newblock Identifying consistent variables in a heterogeneous data set. +\newblock {\em Electronic Journal of e-Learning EJEL}, 15(1):82--93, 2017. + +\bibitem{Derr_2018} +K.~Derr, R.~Hübl, and M.~Z. Ahmed. +\newblock Prior knowledge in mathematics and study success in engineering. + informational value of learner data collected from a web-based pre-course. +\newblock {\em European Journal of Engineering Education}, 10(3):1--16, 2018. + +\bibitem{2017MCQ} +C.~J. Sangwin and I.~Jones. +\newblock Asymmetry in student achievement on multiple choice and constructed + response items in reversible mathematics processes. +\newblock {\em Educational Studies in Mathematics}, 94:205--222, 2017. + +\bibitem{sefi} +B.~Alpers. +\newblock A framework for mathematics curricula in engineering education. +\newblock 2013. + +\bibitem{Weigel_2019} +M.~Weigel, K.~Derr, R.~Hübl, and T.~Podgayetskaya. +\newblock Stack-aufgaben im formativen eassessment: Einsatzmöglichkeiten des + feedbacks. +\newblock Zenodo, 2019. + +\bibitem{Weigel_2017} +M.~Weigel, K.~Derr, R.~Hübl, E.~Mechelke-Schwede, and T.~Podgayetskaya. +\newblock Inhaltliche und technische aspekte des automatisierten feedback. + einsatz des fragetyps stack im formativen eassessment. +\newblock {\em Beiträge zum Mathematikunterricht 2017}, pages 1185--1192, + 2017. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu6.blg b/CaseStudies/2019/References/bu6.blg new file mode 100644 index 00000000..96fb772b --- /dev/null +++ b/CaseStudies/2019/References/bu6.blg @@ -0,0 +1,10 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu6.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib +Warning--empty journal in cosh +Warning--empty journal in sefi +Warning--empty booktitle in Weigel_2019 +(There were 3 warnings) diff --git a/CaseStudies/2019/References/bu7.aux b/CaseStudies/2019/References/bu7.aux new file mode 100644 index 00000000..b21686b7 --- /dev/null +++ b/CaseStudies/2019/References/bu7.aux @@ -0,0 +1,4 @@ +\bibstyle{unsrt} +\citation{Lowe_2019} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Lowe_2019}{1} diff --git a/CaseStudies/2019/References/bu7.bbl b/CaseStudies/2019/References/bu7.bbl new file mode 100644 index 00000000..6f69c382 --- /dev/null +++ b/CaseStudies/2019/References/bu7.bbl @@ -0,0 +1,10 @@ +\begin{thebibliography}{1} + +\bibitem{Lowe_2019} +T.~W. Lowe and B.~M. Mestel. +\newblock {Using STACK to support student learning at masters level: a case + study.} +\newblock {\em Teaching Mathematics and its Applications: An International + Journal of the IMA}, 2019. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu7.blg b/CaseStudies/2019/References/bu7.blg new file mode 100644 index 00000000..b7863601 --- /dev/null +++ b/CaseStudies/2019/References/bu7.blg @@ -0,0 +1,6 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu7.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib diff --git a/CaseStudies/2019/References/bu8.aux b/CaseStudies/2019/References/bu8.aux new file mode 100644 index 00000000..ff3645a5 --- /dev/null +++ b/CaseStudies/2019/References/bu8.aux @@ -0,0 +1,18 @@ +\bibstyle{unsrt} +\citation{Rasila2007} +\citation{Rasila2010} +\citation{Harjula2008} +\citation{2013CAA} +\citation{Majander2011} +\citation{Rasila2015} +\citation{2018Mastery} +\citation{Rasila2016b} +\bibdata{sangwin,education,PUS,cate} +\bibcite{Rasila2007}{1} +\bibcite{Rasila2010}{2} +\bibcite{Harjula2008}{3} +\bibcite{2013CAA}{4} +\bibcite{Majander2011}{5} +\bibcite{Rasila2015}{6} +\bibcite{2018Mastery}{7} +\bibcite{Rasila2016b}{8} diff --git a/CaseStudies/2019/References/bu8.bbl b/CaseStudies/2019/References/bu8.bbl new file mode 100644 index 00000000..120bc881 --- /dev/null +++ b/CaseStudies/2019/References/bu8.bbl @@ -0,0 +1,54 @@ +\begin{thebibliography}{1} + +\bibitem{Rasila2007} +A.~Rasila, M.~Harjula, and K.~Zenger. +\newblock Automatic assessment of mathematics exercises: Experiences and future + prospects. +\newblock In {\em ReflekTori 2007: Symposium of Engineering Education}, pages + 70--80. Helsinki University of Technology, Finland, Teaching and Learning + Development Unit, {\tt http://www.dipoli.tkk.fi/ok}, 2007. + +\bibitem{Rasila2010} +A.~Rasila, L.~Havola, H.~Majander, and J.~Malinen. +\newblock Automatic assessment in engineering mathematics: evaluation of the + impact. +\newblock In {\em ReflekTori 2010: Symposium of Engineering Education}. Aalto + University, Finland, Teaching and Learning Development Unit, {\tt + http://www.dipoli.tkk.fi/ok}, 2010. + +\bibitem{Harjula2008} +M.~Harjula. +\newblock Mathematics exercise system with automatic assessment. +\newblock Master's thesis, Helsinki University of Technology, 2008. + +\bibitem{2013CAA} +C.~J. Sangwin. +\newblock {\em Computer Aided Assessment of Mathematics}. +\newblock Oxford University Press, Oxford, UK, 2013. + +\bibitem{Majander2011} +H.~Majander and A.~Rasila. +\newblock {\em Tutkimus suuntaamassa 2010-luvun matemaattisten aineiden + opetusta}, chapter Experiences of continuous formative assessment in + engineering mathematics, pages 197--214. +\newblock Tampereen yliopistopaino Oy - Juvenes Print, 2011. + +\bibitem{Rasila2015} +A.~Rasila, J.~Malinen, and H.~Tiitu. +\newblock Automatic assement and conceptual understanding. +\newblock {\em Teaching Mathematics and its Applications}, 34(3):149--159, + 2015. + +\bibitem{2018Mastery} +T.~Pelkola, A.~Rasila, and C.~J. Sangwin. +\newblock Investigating {Bloom's} learning for mastery in mathematics with + online assessment. +\newblock {\em Informatics in Education}, 17(2), 2018. + +\bibitem{Rasila2016b} +A.~Rasila. +\newblock E-assessment material bank abacus. +\newblock In {\em Proceedings of EDILEARN16, 8th Annual International + Conference on Education and New Learning Technologies}, July 2016. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu8.blg b/CaseStudies/2019/References/bu8.blg new file mode 100644 index 00000000..dd368b0a --- /dev/null +++ b/CaseStudies/2019/References/bu8.blg @@ -0,0 +1,8 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu8.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib +Warning--can't use both author and editor fields in Majander2011 +(There was 1 warning) diff --git a/CaseStudies/2019/References/bu9.aux b/CaseStudies/2019/References/bu9.aux new file mode 100644 index 00000000..6c925fea --- /dev/null +++ b/CaseStudies/2019/References/bu9.aux @@ -0,0 +1,10 @@ +\bibstyle{unsrt} +\citation{UUK2018} +\citation{2019-STACK-Edinburgh} +\citation{zerva_2019_2565969} +\citation{Lobb2016} +\bibdata{sangwin,education,PUS,cate} +\bibcite{UUK2018}{1} +\bibcite{2019-STACK-Edinburgh}{2} +\bibcite{zerva_2019_2565969}{3} +\bibcite{Lobb2016}{4} diff --git a/CaseStudies/2019/References/bu9.bbl b/CaseStudies/2019/References/bu9.bbl new file mode 100644 index 00000000..2bfb8d9e --- /dev/null +++ b/CaseStudies/2019/References/bu9.bbl @@ -0,0 +1,25 @@ +\begin{thebibliography}{1} + +\bibitem{UUK2018} +Patterns and trends in {UK} higher education 2018. +\newblock Universities UK, September 2018. +\newblock ISBN: 978-1-84036-409-5. + +\bibitem{2019-STACK-Edinburgh} +C.~J. Sangwin and K.~Zerva. +\newblock Developing online learning materials to support undergraduate + education at the university of edinburgh. +\newblock {\em Mathematics Today}, 2019. + +\bibitem{zerva_2019_2565969} +K.~Zerva. +\newblock {Developing STACK assessments in Edinburgh, 2017-2019}. +\newblock In {\em Contributions to the 1st International STACK conference 2018 + in F\"{u}rth, Germany}. Zenodo, 2019. + +\bibitem{Lobb2016} +R.~Lobb and J.~Harlow. +\newblock Coderunner: a tool for assessing computer programming skills. +\newblock {\em ACM Inroads}, 7(1):47--51, March 2016. + +\end{thebibliography} diff --git a/CaseStudies/2019/References/bu9.blg b/CaseStudies/2019/References/bu9.blg new file mode 100644 index 00000000..8f11c2aa --- /dev/null +++ b/CaseStudies/2019/References/bu9.blg @@ -0,0 +1,6 @@ +This is BibTeX, Version 0.99dThe top-level auxiliary file: bu9.aux +The style file: unsrt.bst +Database file #1: sangwin.bib +Database file #2: education.bib +Database file #3: PUS.bib +Database file #4: cate.bib diff --git a/CaseStudies/2019/References/cate.bib b/CaseStudies/2019/References/cate.bib new file mode 100644 index 00000000..ffc42115 --- /dev/null +++ b/CaseStudies/2019/References/cate.bib @@ -0,0 +1,196 @@ +### Common journal names +@string{EdStud = {Educational Studies in Mathematics}} +@string{JMB = {Journal of Mathematical Behaviour}} +@string{LaI = {Learning and Instruction}} +@string{GAZ = {The Mathematical Gazette}} +@string{JRME = {Journal for Research in Mathematics Education}} +@string{TMA = {Teaching Mathematics and its Applications}} +### Cited works + +@ARTICLE{Renkl_2002, + author = {Renkl, A. and Atkinson, R. K. and Maier, U. H. and Staley, R.}, + title = {{From Example Study to Problem Solving: Smooth Transitions Help Learning.}}, + year = {2002}, + JOURNAL = {The Journal of Experimental Education}, + volume = {70}, + number = {4}, + pages = {293--315}, +} + +@ARTICLE{Roediger_2011, + author = {Roediger, H. L. and Butler, A. C.}, + title = {{The critical role of retrieval practice in longterm retention.}}, + year = {2011}, + JOURNAL = {Trends in Cognitive Sciences}, + volume = {15}, + number = {1}, + issn = {1364-6613}, + pages = {20-27}, + url = { http://www.sciencedirect.com/science/article/pii/S1364661310002081?via%3Dihub } +} + +@ARTICLE{Goldenberg_2008, + author = {Goldenberg, P. and Mason, J.}, + title = {{Shedding light on and with example spaces.}}, + year = {2008}, + JOURNAL = {Educational Studies in Mathematics}, + volume = {65}, + number = {2}, + issn = {0013-1954}, + pages = {183–194}, + url = {http://link.springer.com/10.1007/s10649-008-9143-3} +} + +@ARTICLE{Mullet_2014, + author = {Mullet, H. G. and Butler, A. C. and Verdin, B. and Borries, R. and Marsh, E.~J.}, + title = {{Delaying feedback promotes transfer of knowledge despite student preferences to receive feedback immediately.}}, + year = {2014}, + JOURNAL = {Journal of Applied Research in Memory and Cognition}, + volume = {3}, + number = {3}, + pages = {222-229}, + doi = {10.1016/j.jarmac.2014.05.001} +} + +@ARTICLE{Lowe_2019, + author = {Lowe, T.~W. and Mestel, B.~M.}, + title = {{Using STACK to support student learning at masters level: a case study.}}, + year = {2019}, + JOURNAL = {Teaching Mathematics and its Applications: An International Journal of the IMA}, + doi = {10.1093/teamat/hrz001} +} + +@book{Nielsen_1993, + author = {Nielsen, J.}, + title = {Usability Engineering}, + year = {1993}, + isbn = {0125184050}, + publisher = {Morgan Kaufmann Publishers Inc.}, + address = {San Francisco, CA, USA} +} + + +@ARTICLE{cosh, + author = {COSH - Cooperation Schule Hochschule}, + title = {Mindestanforderungskatalog Mathematik}, + year = {2014}, + version = {2} +} + +@ARTICLE{Derr_2017, + author = {Derr, K.}, + title = {Identifying Consistent Variables in a Heterogeneous Data Set}, + journal ={Electronic Journal of e-Learning EJEL}, + volume = {15}, + number = {1}, + pages = {82-93}, + year = {2017} +} + +@ARTICLE{Derr_2018, + author = {Derr, K. and Hübl, R. and Ahmed, M.~Z.}, + title = {Prior knowledge in mathematics and study success in engineering. Informational value of learner data collected from a web-based pre-course}, + journal ={European Journal of Engineering Education}, + volume = {10}, + number = {3}, + pages = {1-16}, + year = {2018} +} + +@ARTICLE{sefi, + author = {Alpers, B.}, + title = {A Framework for Mathematics Curricula in Engineering Education}, + publisher ={SEFI}, + year = {2013} +} + +@inproceedings{Weigel_2019, + author = {Weigel, M. and Derr, K. and Hübl, R. and Podgayetskaya, T.}, + title = {STACK-Aufgaben im formativen eAssessment: Einsatzmöglichkeiten des Feedbacks}, + publisher = {Zenodo}, + year = {2019}, + doi = {10.5281/zenodo.2553834}, + url = {https://doi.org/10.5281/zenodo.2553834} +} + +@ARTICLE{Weigel_2017, + author = {Weigel, M. and Derr, K. and Hübl, R. and Mechelke-Schwede, E. and Podgayetskaya, T.}, + title = {Inhaltliche und technische Aspekte des automatisierten Feedback. Einsatz des Fragetyps STACK im formativen eAssessment.}, + journal ={Beiträge zum Mathematikunterricht 2017}, + pages = {1185-1192}, + year = {2017} +} + +@ARTICLE{Nakamura_2017, + author = {Nakamura, Y. and Nakahara, T.}, + title = {A New Mathematics Input Interface with Flick Operation for Mobile Devices}, + publisher = {MSOR Connections}, + year = {2017}, + volume = {15}, + number = {2}, + url = {https://journals.gre.ac.uk/index.php/msor/article/view/413/pdf} +} + +@ARTICLE{Kallweit_2019, + author = {Kallweit, M. and Glasmachers, E.}, + title = {Adaptive Selbstlernaufgaben mit STACK}, + publisher = {Zenodo}, + year = {2019}, + doi = {10.5281/zenodo.2590188} +} + +@BOOK{Hattie_2009, + author = {Hattie, J.}, + title = {Visible learning: A synthesis of over 800 meta \-analyses relating to achievement.}, + publisher = {Routledge}, + year = {2009} +} + +@ARTICLE{Hattie_2007, + author = {Hattie, J. and Timperley, H.}, + title = {The Power of Feedback.}, + journal = {Review of Educational Research}, + volume = {77}, + number = {1}, + pages = {91-112}, + doi = {10.3102/003465430298487}, + year = {2007} +} + +@ARTICLE{Nicol_2006, + author = {Nicol, D.J. and Macfarlane-Dick, D.}, + title = {Formative assessment and self\-regulated learning: a model and seven principles of good feedback practice.}, + journal = {Studies in Higher Education,}, + volume = {31}, + number = {2}, + pages = {199-218}, + year = {2006} +} + +@ARTICLE{Bruder_2015, + author = {Bruder, R. and Feldt Caesar, N. and Pallack, A. and Pinkernell, G. and Wynands, A.}, + title = {Mathematisches Grundwissen und Grundkönnen in der Sekundarstufe II.}, + journal = {W. Blum et al. (Hrsg.), Bildungsstandards aktuell: Mathematik in der Sekundarstufe II}, + pages = {108-124}, + year = {2015} +} + +@BOOK{Feldt_2017, + author = {Feldt-Caesar, N.}, + title = {Konzeptualisierung und Diagnose von mathematischem Grundwissen und Grundkönnen.}, + year = {2017} +} + +@ARTICLE{Schaub_2018, + author = {Schaub, M.}, + title = {Einsatz des Elementarisierenden Testens im Ein- und Ausgangstest des online Vorkurses VEMINT.}, + journal = {Beiträge zum Mathematikunterricht 2018.}, + pages = {1567-1570}, + year = {2018} +} + +@BOOK{Zech_1978, + author = {Zech, F.}, + title = {Grundkurs Mathematikdidaktik. Theoretische und praktische Anleitungen für das Lehren und Lernen von Mathematik.}, + year = {1978} +} \ No newline at end of file diff --git a/CaseStudies/2019/References/education.bib b/CaseStudies/2019/References/education.bib new file mode 100644 index 00000000..a2256cda --- /dev/null +++ b/CaseStudies/2019/References/education.bib @@ -0,0 +1,9524 @@ +### Common journal names +@string{EdStud = {Educational Studies in Mathematics}} +@string{JMB = {Journal of Mathematical Behaviour}} +@string{LaI = {Learning and Instruction}} +@string{GAZ = {The Mathematical Gazette}} +@string{JRME = {Journal for Research in Mathematics Education}} +@string{TMA = {Teaching Mathematics and its Applications}} +### Cited works + +@ARTICLE{Aberdein2005, + author = {Aberdein, A.}, + title = {The Uses of Argument in Mathematics}, + journal = {Argumentation}, + year = {2005}, + volume = {19}, + number = {3}, + pages = {287--301}, + doi = {10.1007/s10503-005-4417-8}, +} + +@INPROCEEDINGS{Aberdein2006, + author = {Aberdein, A.}, + title = {Managing Informal Mathematical Knowledge: Techniques from Informal Logic}, + journal = {Lecture Notes in Computer Science}, + year = {2006}, + volume = {4108}, + pages = {208--221}, + doi = {10.1007/11812289_17}, +} + +Ainley2002, + author = {Ainley, J. and Pratt, D.}, + title = {Purpose and utility in pedagogical task design}, + booktitle = {Proceedings of the Twenty Sixth Annual Conference of the International Group for the Psychology of Mathematics Education}, + year = {2002}, + volume = {2}, + pages = {17--24}, +} + + +@BOOK{Adams2013, + author = {Adams, R.~A. and Essex, C.}, + title = {Calculus: A Complete Course}, + publisher = {Prentice Hall}, + year = {2013}, + address = {Toronto, Canada}, + edition = {8th}, +} + +@ARTICLE{Adesina2014, + author = {Adesina, A. and Stone, R. and Batmaz, f. and Jones, I.}, + title = {Touch Arithmetic: A process-based Computer-Aided Assessment approach for capture of problem solving steps in the context of elementary mathematics}, + journal = {Computers \& Education}, + year = {2014}, + volume = {78}, + pages = {333-343}, +} + +@INBOOK{Ager1989, + AUTHOR = {Ager, T.~A. and Dooley, S.}, + TITLE = {Computers and Mathematics}, + CHAPTER = {Representation of Inference in Computer Algebra Systems with Application to Intelligent Tutoring}, + pages = {215--227}, + PUBLISHER = {Springer-Verlag}, + YEAR = {1989}, +} + +@INPROCEEDINGS{Ainley2002, + author = {Ainley, J. and Pratt, D.}, + title = {Purpose and utility in pedagogical task design}, + booktitle = {Proceedings of the Twenty Sixth Annual Conference of the International Group for the Psychology of Mathematics Education}, + year = {2002}, + volume = {2}, + pages = {17--24}, +} + +@ARTICLE{Ainsworth2016, + author = {Ainsworth, C.}, + title = {Consistency of imagery}, + journal = {Mathematics Teaching}, + year = {2016}, + volume = {253}, + pages = {15--21}, + month = {September}, +} + +@BOOK{Akker2006, + editor = {Van Den Akker, J. and Gravemeijer, K. and McKenney, S. and Nieveen, N.}, + title = {Educational Design Research}, + publisher = {Routledge, Oxford}, + year = {2006}, +} + +@ARTICLE{AlaMutka2005, + AUTHOR = {Ala-Mutka, K.}, + TITLE = {A Survey of Automated Assessment Approaches for Programming Assignments}, + JOURNAL = {Computer Science Education}, + YEAR = {2005}, + volume = {15}, + number = {2}, + pages = {83--102}, + doi = {10.1080/08993400500150747}, +} + +@article{Alajmi2012, + author = {Alajmi, A.}, + title = {How do elementary textbooks address fractions? A review of mathematics textbooks in the {USA}, {Japan}, and {Kuwait}}, + year = {2012}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {79}, + number = {2}, + pages = {239--261}, + doi = {10.1007/s10649-011-9342-1}, + publisher = {Springer, Netherlands}, +} + +@ARTICLE{AlJumeily2001, + AUTHOR = {Al-Jumeily, D. and Strickland, P.}, + TITLE = {An Intelligent Tutoring System for Algebraic Manipulation}, + JOURNAL = {The International Journal of Computer Algebra in Mathematics Education}, + YEAR = {2001}, + volume = {8}, + number = {3}, +} + +@INBOOK{Alcock2001, + AUTHOR = {Alcock, L. and Simpson, A.}, + editor = {Holton, D. and Artigue, M. and Kirchgraber, U. and Hillel, J. and Niss M. and Schoenfeld, A.}, + TITLE = {The Teaching and Learning of Mathematics at University Level}, + CHAPTER = {The Warwick Analysis Project: Practice and Theory}, + pages = {99--111}, + PUBLISHER = {Kluwer}, + YEAR = {2001}, + volume = {7}, + series = {New ICMI Study Series}, + doi = {10.1007/0-306-47231-7\_10} +} +## DOI 10.1007/0-306-47231-7_10 + +@INBOOK{Alcock2009, + AUTHOR = {Alcock, L. and Simpson, A.}, + TITLE = {Ideas from mathematics education: An introduction for mathematicians}, + PUBLISHER = {MSOR Network}, + YEAR = {2009}, +} +# http://www.mathstore.ac.uk/headocs/AlcockBook_Book.pdf + +@ARTICLE{Alcock2010, + AUTHOR = {Alcock, L.}, + TITLE = {Mathematicians' perspectives on the teaching and learning of proof}, + JOURNAL = {Research in Collegiate Mathematics Education}, + YEAR = {2010}, + volume = {VII}, + pages = {63--92}, +} +#https://dspace.lboro.ac.uk/dspace-jspui/handle/2134/8946 + +@ARTICLE{Alcock2011, + author = {Alcock, L. and Wilkinson, N.}, + title = {e-Proofs: Design of a Resource to Support Proof Comprehension in Mathematics}, + journal = {Educational Designer}, + year = {2011}, + volume = {1}, + number = {4}, + pages = {1--19}, +} + +@article{Alcock2017, + title = {Interactions between defining, explaining and classifying: the case of increasing and decreasing sequences}, + year = {2017}, + journal = {Educational Studies in Mathematics}, + author = {Alcock, L. and Simpson, A.}, + number = {1}, + month = {1}, + pages = {5--19}, + volume = {94}, + url = {http://link.springer.com/10.1007/s10649-016-9709-4}, + doi = {10.1007/s10649-016-9709-4}, +} + +@ARTICLE{Alcock2018LMSN, + author = {Alcock, L.}, + title = {Tilting the Classroom}, + journal = {Newsletter of the London Mathematical Society}, + year = {2018}, + number = {474}, + pages = {22--27}, + month = {January}, +} + + +@TECHREPORT{Allen2013, + AUTHOR = {Allen, I.E. and Seeman, J.}, + TITLE = {Changing Course: Ten Years of Tracking Online Education in the United States}, + INSTITUTION = {Babson Survey Research Group and Quahog Research Group}, + YEAR = {2013}, + address = {Massachusetts, USA} +} + +@article{Almog2012, + author = {Almog, N. and Ilany, B.}, + year = {2012}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {81}, + number = {3}, + pages = {347--364}, + doi = {10.1007/s10649-012-9404-z}, + publisher = {Springer, Netherlands}, +} + +@TECHREPORT{Alpers2013, + Author = {Alpers, B.}, + TITLE = {\href{http://sefi.htw-aalen.de/}{A Framework for Mathematics Curricula in Engineering Education}: A Report of the Mathematics Working Group}, + INSTITUTION = {SEFI Mathematics Working Group}, + address = {Brussels, Belgium}, + YEAR = {2013}, + note = {ISBN 978-2-87352-007-6}, +} + +@ARTICLE{Anderson1972, + author = {Anderson, R.~C.}, + title = {How to Construct Achievement Tests to Assess Comprehension}, + journal = {Review of Educational Research}, + year = {1972}, + volume = {42}, + number = {2}, + pages = {145--170}, +} +# http://www.jstor.org.ezproxy.is.ed.ac.uk/stable/1170014 + +@BOOK{Anderson1986, + AUTHOR = {Anderson, J.~R.}, + TITLE = {The Architecture of Cognition}, + PUBLISHER = {Harvard University Press}, + YEAR = {1986}, +} + +@ARTICLE{Anderson1995, + author = {Anderson, J.~R. and Corbett, A.~T. and Koedinger, K.~R. and Pelletier, R.}, + title = {Cognitive Tutors: Lessons Learned}, + journal = {Journal of the Learning Sciences}, + volume = {4}, + number = {2}, + pages = {167--207}, + year = {1995}, + doi = {10.1207/s15327809jls0402\_2}, +} +# URL = {http://www.tandfonline.com/doi/abs/10.1207/s15327809jls0402_2}, +# eprint = {http://www.tandfonline.com/doi/pdf/10.1207/s15327809jls0402_2} + + +@ARTICLE{Anderson1989, + author = {Anderson, J.}, + title = {Sex-Related Differences on Objective Tests among Undergraduates}, + journal = {Educational Studies in Mathematics}, + year = {1989}, + volume = {20}, + number = {2}, + pages = {165--177}, + month = {May}, +} + +@ARTICLE{Arnold2015, + author = {Arnold, I.~J.~M.}, + title = {Cheating at online formative tests: Does it pay off?}, + journal = {Internet and Higher Education}, + year = {2015}, + volume = {29}, + pages = {98--106}, + month = {April}, + doi = {10.1016/j.iheduc.2016.02.001}, +} + +@ARTICLE{Appleby1997, + AUTHOR = {Appleby, J. and Samuels, P.~C. and Jones, T.~T.}, + TITLE = {{DIAGNOSYS} -- a knowledge-based diagnostic test of basic mathematical skills}, + JOURNAL = {Computers in Education}, + YEAR = {1997}, + volume = {28}, + pages = {113--131}, +} + +@TECHREPORT{Aquin2012, + author = {d'Aquin, M.}, + title = {Linked Data for Open and Distance Learning}, + institution = {Commonwealth of Learning}, + year = {2012}, +} + +@TECHREPORT{Artigue2006, + AUTHOR = {Artigue, M.}, + TITLE = {Methodological tools for Comparison of learning theories in technology enhanced learning in mathematics}, + INSTITUTION = {Kaleidoscope}, + YEAR = {2006}, + number = {D20.4.1}, +} +#http://hal.archives-ouvertes.fr/docs/00/19/01/14/PDF/Artigue-Kaleidoscope-2006.pdf + +@conference{Artigue2007, + title={{Digital technologies: A window on theoretical issues in mathematics education}}, + author={Artigue, M.}, + booktitle={Proceedings of CERME}, + volume={5}, + pages={68--82}, + year={2007} +} + +@INPROCEEDINGS{Ashton2004, + AUTHOR = {Ashton, H.~S. and Beevers, C.~E. and Schofield, D.~K. and Youngson, M.~A.}, + TITLE = {Informative Reports -- Experiences from the Pass-IT Project}, + BOOKTITLE = {Proceedings of the 8th International CAA Conference}, + YEAR = {2004}, +} + +@ARTICLE{Ashton2005, + AUTHOR = {Ashton, H.~S. and Beevers, C.~E. and Korabinski, A.~A. and Youngson, M.~A.}, + TITLE = {Investigating the Medium Effect in School Chemistry and College Computing National Examinations}, + JOURNAL = {British Journal of Educational Technology}, + YEAR = {2005}, + volume = {36}, + number = {5}, + pages = {771--787}, + doi = {10.1111/j.1467-8535.2005.00501.x}, +} + +@ARTICLE{Ashton2006, + AUTHOR = {Ashton, H.~S. and Beevers, C.~E. and Korabinski, A.~A. and Youngson, M.~A.}, + TITLE = {Incorporating partial credit in computer-aided assessment of Mathematics in secondary education}, + JOURNAL = {British Journal of Educational Technology}, + YEAR = {2006}, + volume = {27}, + number = {1}, + pages = {93--119}, +} + +@INPROCEEDINGS{Ashton2008, + AUTHOR = {Ashton, H.~S. and Beevers, C.~E. and Thomas, R.}, + TITLE = {Can e-Assessment Become Mainstream?}, + BOOKTITLE = {Proceedings of the CAA conference}, + YEAR = {2008}, +} + + +@ARTICLE{Ashton2009, + AUTHOR = {Ashton, H.~S. and Khaled, O.}, + TITLE = {SCHOLAR � Intermediate Mathematics}, + JOURNAL = {Scottish Mathematical Council Journal}, + YEAR = {2009}, + volume = {39}, + pages = {45--49}, +} + +@ARTICLE{Aslaksen1996, + author = {Aslaksen, H.}, + title = {Multiple-valued complex functions and computer algebra}, + journal = {ACM SIGSAM Bulletin}, + year = {1996}, + volume = {30}, + number = {2}, + pages = {12--20}, +} + + +@INBOOK{Aslaksen1999, + author = {Aslaksen, H.}, + title = {Computer Algebra Systems: A Practical Guide}, + chapter = {Can your computer do complex analysis?}, + pages = {73--78}, + publisher = {Wiley}, + year = {1999}, +} + +@TECHREPORT{ASTM-E29-08, + title = {Standard Practice for Using Significant Digits in Test Data to Determine Conformance with Specifications}, + institution = {American Society for Testing and Materials}, + year = {2008}, + number = {{E29-08}}, + address = {West Conshohocken, USA}, + doi = {10.1520/E0029} +} +# http://www.astm.org/cgi-bin/resolver.cgi?E29 + +@ARTICLE{Attali2015, + author = {Attali, Y.}, + title = {Effects of multiple-try feedback and question type during mathematics problem solving on performance in similar problems}, + journal = {Computers and Education}, + year = {2015}, + volume = {86}, + pages = {260--267}, + doi = {10.1016/j.compedu.2015.08.011}, +} + +@ARTICLE{Attali2017, + author = {Attali, Y. and van der Kleij, F.}, + title = {Effects of feedback elaboration and feedback timing during computer-based practice in mathematics problem solving}, + journal = {Computers and Education}, + year = {2017}, + volume = {110}, + pages = {154--169}, + doi = {10.1016/j.compedu.2017.03.012}, +} + +@ARTICLE{Attridge2013, + author = {Attridge, N. and Inglis, M.}, + title = {Advanced Mathematical Study and the Development of Conditional Reasoning Skills}, + journal = {PLoS ONE}, + year = {2013}, + volume = {8}, + number = {7}, + pages = {1--8}, + month = {July}, + note = {}, + abstract = {}, + keywords = {}, + doi = {10.1371/journal.pone.0069399}, +} + +@BOOK{Ausubel1968, + AUTHOR = {Ausubel, D.~P. and Novak, J.~D. and Hanesian, H.}, + TITLE = {Educational psychology: A cognitive view}, + PUBLISHER = {Holt, Rinehart and Winston, New York}, + YEAR = {1968}, +} + +@ARTICLE{Avigad2006, + AUTHOR = {Avigad, J.}, + TITLE = {Mathematical method and proof}, + JOURNAL = {Synthese}, + YEAR = {2006}, + volume = {153}, + number = {1}, + pages = {105--159}, + doi = {10.1007/s11229-005-4064-5}, +} + +@ARTICLE{Avigad2009, + AUTHOR = {Avigad, J. and Dean, E. and Mumma, J.}, + TITLE = {A formal system for Euclid's Elements}, + JOURNAL = {The Review of Symbolic Logic}, + YEAR = {2009}, + volume = {2}, + number = {4}, + pages = {700--768}, + doi = {10.1017/S1755020309990098}, +} + +@article{Avigad2018, + author = {Avigad, J.}, + title = {Opinion: The Mechanization of Mathematics}, + journal = {Notices of the American Mathematical Society}, + year = {2018}, + month = {June}, + volume = {65}, + number = {6}, + pages = {681--690}, + publisher = {American Mathematical Society ({AMS})}, + doi = {10.1090/noti1688}, +} +# url = {https://doi.org/10.1090/noti1688}, + +@article{Avigad2019, + author = {Avigad, J.}, + title = {Opinion: The Mechanization of Mathematics}, + journal = {Notices of the American Mathematical Society}, + year = {2018}, + month = {June}, + volume = {65}, + number = {6}, + pages = {681--690}, + publisher = {American Mathematical Society ({AMS})}, + doi = {10.1090/noti1688}, +} + +@INBOOK{Avigad2019b, + author = {Avigad, J.}, + title = {Proof Technology in Mathematics Research and Teaching}, + chapter = {Learning Logic and Proof with an Interactive Theorem Prover}, + publisher = {Springer International}, + year = {2019}, + series = {Mathematics education in the digital era}, +} + +@BOOK{Avvisati2015, + AUTHOR = {Avvisati, F.}, + TITLE = {Students, Computers and Learning: making the connection}, + PUBLISHER = {OECD Publishing}, + YEAR = {2015}, + doi = {10.1787/9789264239555-en}, +} + +@BOOK{Baader1998, + AUTHOR = {Baader, F. and Nipkow, T.}, + TITLE = {Term Rewriting and All That}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1998}, +} +# http://www4.in.tum.de/~nipkow/TRaAT/ +# QA 267/B + +@ARTICLE{Back2010, + author = {Back, R.~J. and Mannila, L. and Wallin, S.}, + title = {`It takes me longer, but {I} understand better' -- student feedback on structured derivations}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2010}, + volume = {41}, + number = {5}, + pages = {575--593}, + doi = {10.1080/00207391003605221}, +} + +@ARTICLE{Back2010b, + author = {Back, R.~J.}, + title = {Structured derivations: a unified proof style for teaching mathematics}, + journal = {Formal Aspects of Computing}, + year = {2010}, + volume = {22}, + number = {5}, + pages = {629--661}, + doi = {10.1007/s00165-009-0136-5}, +} +# Back, R. J. (2016). Structured derivations: a unified proof style for teaching mathematics, Formal Aspects of Computing, 22(5) p629-661 doi:10.1007/s00165-009-0136-5. +# See also Leron1983, Lamport1995, Lamport2012 + +@BOOK{Back2016, + author = {Back, R.~J.}, + title = {Teaching Mathematics in the Digital Age with Structured Derivations}, + publisher = {Four Ferries Publishing}, + address = {Turku, Finland}, + year = {2016}, +} + + +@BOOK{Backhouse1976, + author = {Backhouse, J.~K. and Houldsworth, S.~P.~T.}, + title = {Pure Mathematics: a first course}, + publisher = {Longman}, + address = {London, UK}, + year = {1976}, + edition = {5th}, +} + +@BOOK{Backhouse1991, + author = {Backhouse, J.~K. and Houldsworth, S.~P.~T.}, + title = {Essential Pure Mathematics}, + publisher = {Longman}, + address = {London, UK}, + year = {1991}, +} + +@PHDTHESIS{Badger2013, + author = {Badger, M.}, + title = {Problem-solving in undergraduate mathematics and computer aided assessment}, + school = {University of Birmingham}, + year = {2013}, + type = {PhD}, +} +# http://etheses.bham.ac.uk/4694/ +# uk.bl.ethos.583200 + +@BOOK{Ball1973, + author = {Ball, D.~G.}, + title = {An introduction to Real Analysis}, + publisher = {Pergamon Press}, + year = {1973}, +} + +@ARTICLE{Ball2008, + author = {Ball, D.~L. and Thames, M.~H. and Phelps, G.}, + title = {Content Knowledge for Teaching: What Makes It Special?}, + journal = {Journal of Teacher Education}, + year = {2008}, + volume = {59}, + number = {5}, + pages = {389--407}, + doi = {10.1177/0022487108324554}, +} + +@BOOK{Barnard99, + author = {Barnard, T.}, + title = {A Pocket Map of Algebraic Manipulation}, + publisher = {The Mathematical Association}, + year = {1999}, +} + +@INPROCEEDINGS{Barbas2016, + author = {Barbas, H. and Schramm, T. }, + title = {The {Hamburg} Online Math test {MINTFIT} for prospective students of {STEM} degree programmes}, + booktitle = {Proceedings of SEFI, Tampere, Finland}, + year = {2016}, +} + +@ARTICLE{Barendregt2001, + AUTHOR = {Barendregt, H. and Cohen, A.~M.}, + TITLE = {Electronic communication of mathematics and the interaction of computer algebra systems and proof assistants}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {2001}, + volume = {31}, + number = {1/2}, + pages = {3--22}, +} + +@ARTICLE{Barnes2000, + AUTHOR = {Barnes, M. and Clarke, D. and Stephens, M.}, + TITLE = {Assessment: the engine of systemic curricular reform?}, + JOURNAL = {Journal of Curriculum Studies}, + YEAR = {2000}, + volume = {32}, + number = {5}, + pages = {623--650}, +} +### http://www.swetswise.com/eAccess/viewFulltext.do?articleID=30827896 + +@INBOOK{BarrowGreen2001, + author = {Barrow-Green, J.}, + title = {Teaching and Learning in Nineteenth-Century {Cambridge} {(History of the University of Cambridge)}}, + chapter = {The advantage of proceeding from an author of some scientific reputation: {Isaac Todhunter} and his Mathematics Textbooks}, + pages = {177--203}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + volume = {4}, + series = {History of the University of Cambridge Texts and Studies}, + year = {2001}, +} +# editor = {Smith, J. and Stray, C.}, +# ISBN 0851157831 +# http://books.google.co.uk/books?id=P0X7F4mLTpkC&dq=Wood+algebra+Lund+1841&source=gbs_navlinks_s + +@ARTICLE{BartoliniBussi2010, + AUTHOR = {Bartolini Bussi, M.~G. and Taimina, D. and Isoda, M.}, + TITLE = {Concrete models and dynamic instruments as early technology tools in classrooms at the dawn of ICMI: from Felix Klein to present applications in mathematics classrooms in different parts of the world}, + JOURNAL = {ZDM: The International Journal of Mathematics Education}, + YEAR = {2010}, + volume = {42}, + number = {1}, + pages = {19--31}, + month = {November}, +} +# http://link.springer.com/journal/11858/42/1/page/1 + +@TECHREPORT{Barry1992, + author = {Barry, M.~D.~J. and Steele, N.~C.}, + title = {A Core Curriculum in Mathematics for the European Engineer}, + institution = {Soci\'{e}t\'{e} Europ\'{e}enne pour la Formation des Ingenieurs (SEFI)}, + year = {1992}, + number = {92.1}, + isbn = {2-87352-001-9}, + address = {Plymouth, UK}, +} +# See also http://www.tandfonline.com/doi/abs/10.1080/0020739930240207?journalCode=tmes20 + +@UNPUBLISHED{Bass2013, + AUTHOR = {Bass, H.}, + TITLE = {A Vignette of Doing Mathematics: A Meta-cognitive Tour of the Production of Some Elementary Mathematics}, + NOTE = {Private communication}, + year = {2013}, +} +# Email from John Mason, Sept 2013. + +@ARTICLE{Bassett2015, + author = {Bassett, J. and Cleveland, A. and Acorn, D. and Nix, M. and Snyder, T.}, + title = {Are they paying attention? Students' lack of motivation and attention potentially threaten the utility of course evaluations}, + journal = {Assessment \& Evaluation in Higher Education}, + year = {2015}, + doi = {10.1080/02602938.2015.1119801}, +} + +@INPROCEEDINGS{Barton2011, + AUTHOR = {Barton, S. and Foster, B. and Levesley, J. and McCabe, M.}, + TITLE = {Barriers in integrating e-assessment into mathematics teaching and learning for first and second year students}, + BOOKTITLE = {Proceedings of the CETL-MSOR conference}, + YEAR = {2011}, +} + +@BOOK{Barton2018, + author = {Barton, C.}, + title = {How I Wish I'd Taught Maths: Lessons learned from research, conversations with experts, and 12 years of mistakes}, + publisher = {John Catt Educational}, + year = {2018}, + isbn = {978-1911382492}, +} + +@TECHREPORT{Beavers1969, + author = {Beavers, M. and Bradford, J. and Cox, W. and Collins, E. and Larsen, D. and Herber, E. }, + title = {A Second Course in Algebra and Trigonometry With Computer Programming, Revised Edition.}, + institution = {U.S. Department of Health. Education and Welfare Office of Education}, + year = {1969}, + type = {A Publication of the Colorado Schools Computing Science Curriculum Development Project}, + source = {ERIC ED041746}, +} + +@ARTICLE{Becher1980, + AUTHOR = {Becher, H.~W.}, + TITLE = {Woodhouse, {Babbage}, {Peacock}, and modern Algebra}, + JOURNAL = {Historia Mathematica}, + YEAR = {1980}, + volume = {7}, + number = {4}, + pages = {389--400}, + month = {November}, + doi = {10.1016/0315-0860(80)90003-8}, +} + +@BOOK{Becker, + editor = {Becker, J.~P. and Shimada, S.}, + title = {The open-ended approach: a new proposal for teaching mathematics}, + publisher = {National Council of Teachers of Mathematics}, + year = {1997}, +} + +@INBOOK{Beeson1989, + AUTHOR = {Beeson, M.}, + editor = {Kaltofen, E. and Watt, S.~M.}, + TITLE = {Computers and Mathematics}, + CHAPTER = {Logic and computation in Mathpert: An expert system for learning mathematics}, + pages = {202--214}, + PUBLISHER = {Springer-Verlag}, + YEAR = {1989}, +} + +#http://www.springerlink.com/content/978-3-540-55727-2/?MUD=MP&sort=p_OnlineDate&sortorder=desc&o=20 +@INPROCEEDINGS{Beeson1992, + AUTHOR = {Beeson, M.}, + TITLE = {Mathpert: Computer support for learning algebra, trig, and calculus}, + BOOKTITLE = {Logic Programming and Automated Reasoning: Proceedings of the International Conference LPAR '92 St. Petersburg, Russia, July 15--20}, + YEAR = {1992}, + pages = {454--456}, + volume = {624}, + publisher = {Springer}, +} + +@INPROCEEDINGS{Beeson1994, + AUTHOR = {Beeson, M.}, + TITLE = {Computerizing Mathematics: Logic and Computation}, + BOOKTITLE = {The Universal Turing Machine: a Half-century Survey}, + PUBLISHER = {Springer-Verlag}, + YEAR = {1994}, + pages = {173--206} +} + +@ARTICLE{Beeson1995, + AUTHOR = {Beeson, M.}, + TITLE = {Using nonstandard analysis to ensure the correctness of symbolic computations}, + JOURNAL = {International journal of foundations of computer science}, + YEAR = {1995}, + volume = {6}, + number = {3}, + pages = {299--338}, +} +## QA 76.A1I69 +## http://www.michaelbeeson.com/research/papers/pubs.html + +@INCOLLECTION{Beeson1998, + AUTHOR = {Beeson, M.}, + TITLE = {Design Principles of Mathpert: Software to support education in algebra and calculus}, + booktitle = {Computer-Human Interaction in Symbolic Computation}, + publisher = {Springer-Verlag}, + address = {Vienna, Austria}, + year = {1998}, + editor = {Kajler, N.}, + series = {Texts \& Monographs in Symbolic Computation}, + pages = {89--115}, + doi = {10.1007/978-3-7091-6461-7}, +} +## http://www.michaelbeeson.com/research/papers/pubs.html +## http://www.michaelbeeson.com/research/papers/hisc.pdf + +@INCOLLECTION{Beeson2004, + AUTHOR = {Beeson, M.}, + title = {The Mechanization of Mathematics}, + editor = {Teuscher, C.}, + booktitle = {{Alan Turing}: Life and Legacy of a Great Thinker}, + PUBLISHER = {Springer}, + address = {Berlin, Germany}, + YEAR = {2004}, + doi = {10.1007/978-3-662-05642-4}, + pages = {77--134}, +} + +@ARTICLE{Beeson2006, + AUTHOR = {Beeson, M.}, + TITLE = {Mathematical induction in Otter-lambda}, + JOURNAL = {Journal of Automated Reasoning}, + YEAR = {2006}, + volume = {36}, + number = {4}, + pages = {311-344}, +} + +@BOOK{Beevers1991, + author = {Beevers, C.~E. and Cherry, B.~S.~G. and Foster, M.~G. and McGuire, G.~R.~M.}, + TITLE = {Software Tools for Computer Aided Learning in Mathematics}, + PUBLISHER = {Avebury Technical}, + YEAR = {1991}, +} + +@article{Beevers1992, + author = {Beevers, C.~E., and Foster, M.~G., and McGuire, G.~R., and Renshaw, J.~H.}, + title = {Some problems of mathematical CAL}, + journal = {Computers and Education}, + volume = {18}, + number = {1-3}, + year = {1992}, + issn = {0360-1315}, + pages = {119--125}, + doi = {10.1016/0360-1315(92)90044-6}, + publisher = {Elsevier Science Ltd.}, + address = {Oxford, UK}, +} + +@article{Beevers1995, + author = {Beevers, C.~E. and McGuire, G.~R. and Stirling, G. and Wild, D.~G.}, + title = {Mathematical Ability Assessed by Computer}, + journal = {Journal for Computers and Education}, + volume = {25}, + year = {1995}, + issn = {0360-1315}, + pages = {123--132}, +} + +@INBOOK{Beevers02, + author = {Beevers, C. and Paterson, J.}, + title = {Assessment in Mathematics}, + booktitle= {Effective learning and teaching in mathematics and its applications}, + chapter = {4}, + pages = {49--61}, + publisher = {Kogan Page Ltd, London}, + year = {2002}, +} + +@ARTICLE{Beevers95, + author = {Beevers, C.~E. and McGuire, G.~R. and Stirling, G. and Wild, D.~G.}, + title = {Mathematical Ability Assessed by Computer}, + journal = {Computers \& Education}, + year = {1995}, + volume = {25}, + number = {3}, + pages = {123--132}, +} + +@TECHREPORT{Begle1972, + author = {Begle, E.~G.}, + title = {Teacher Knowledge and Student Achievement in Algebra}, + institution = {Leland Stanford Junior University}, + year = {1972}, + type = {School Mathematics Study Group Reports}, + number = {9}, +} +# http://eric.ed.gov/?id=ED064175 + + +@ARTICLE{Bellhauser2016, + author = {Bellh\"{a}user, H. and L\"{o}sch, R. and Winter, C. and Schmitz, B.}, + title = {Applying a web-based training to foster self-regulated learning -- Effects of an intervention for large numbers of participants}, + journal = {Internet and Higher Education}, + year = {2016}, + volume = {31}, + pages = {87--100}, + month = {October}, + doi = {10.1016/j.iheduc.2016.07.002}, +} + +@ARTICLE{Bennett1997, + AUTHOR = {Bennett, R.~E. and Steffen, M. and Singley, M.~K. and Morley, M. and Jacquemin, D.}, + TITLE = {Evaluating an automatically scorable, open-ended response time for measuring mathematics reasoning in computer-adaptive tests}, + JOURNAL = {Journal of Educational Measurement}, + YEAR = {1997}, + volume = {34}, + number = {2}, + pages = {162--176}, +} +# http://www.jstor.org/stable/1435351 + +@ARTICLE{Bennett2002, + AUTHOR = {Bennett, R.~E.}, + TITLE = {Inexorable and Inevitable: The Continuing Story of Technology and Assessment}, + JOURNAL = {The Journal of Technology, Learning, and Assessment}, + YEAR = {2002}, + volume = {1}, + number = {1}, + pages = {1--24}, +} +# https://ejournals.bc.edu/ojs/index.php/jtla/article/download/1667/1513 + +@TECHREPORT{Bennett2003, + AUTHOR = {Bennett, R.~E.}, + TITLE = {Online Assessment and the Comparability of Score Meaning}, + institution = {Educational Testing Services}, + year = {2003}, + type = {Research Reports}, + number = {RM-03-05}, + address = {Princeton, NJ}, +} + +@ARTICLE{Bennett2011, + AUTHOR = {Bennett, R.~E.}, + TITLE = {Formative Assessment, a Critical Review}, + JOURNAL = {Assessment in Education: Principles, Policy \& Practice}, + YEAR = {2011}, + volume = {18}, + number = {1}, + pages = {5--25}, + doi = {10.1080/0969594X.2010.513678}, +} + +@BOOK{Benkler2007, + AUTHOR = {Benkler, Y.}, + TITLE = {The Wealth of Networks: How Social Production Transforms Markets and Freedom}, + PUBLISHER = {Yale University Press }, + YEAR = {2007}, +} +# http://cyber.law.harvard.edu/wealth_of_networks/Download_PDFs_of_the_book + +@UNPUBLISHED{Benson2011, + author = {Benson, I.}, + title = {The Primary Mathematics}, + year = {2011}, +} + +@INPROCEEDINGS{Bernardo2009, + author = {Bernardo, G. and Carmen, B.}, + title = {The Ambiguity of the Sign $\sqrt{}$}, + booktitle = {Proceedings of {CERME6}, {Lyon, France}}, + year = {2009}, + volume = {Working Group 4}, + pages = {509--518}, +} +# http://www.inrp.fr/editions/cerme6 + +@BOOK{Bertot2004, + author = {Bertot, Y. and Cast\'{e}ran, P.}, + title = {Interactive Theorem Proving and Program Development. Coq'Art: The Calculus of Inductive Constructions}, + publisher = {Springer}, + year = {2004}, + series = {Texts in Theoretical Computer Science}, + address = {Berlin Heidelberg}, + isbn = {3-540-20854-2}, +} + +@INBOOK{Bescherer2011, + AUTHOR = {Bescherer, C. and Herding, D. and Kortenkamp, U. and M\"{u}ller, W. and Zimmermann, M.}, + TITLE = {Intelligent and Adaptive Learning Systems: Technology Enhanced Support for Learners and Teachers}, + CHAPTER = {E-Learning Tools with Intelligent Assessment and Feedback}, + pages = {151--163}, + PUBLISHER = {IGI Global}, + YEAR = {2011}, +} + +@ARTICLE{Biggs2001, + author = {Biggs, J. and Kember, D. and Leung, D.~Y.~P.}, + title = {The revised two-factor Study Process Questionnaire: R-SPQ-2F}, + journal = {British Journal of Educational Psychology}, + year = {2001}, + volume = {71}, + pages = {133-149}, +} + +@BOOK{Biggs2011, + author = {Biggs, J. and Tang, C.}, + title = {Teaching for Quality Learning at University}, + publisher = {Open University Press}, + year = {2011}, + edition = {4th}, + isbn = {978-0335242757}, +} + +@BOOK{Binmore1977, + author = {Binmore, K.~G.}, + title = {Mathematical Analysis: a straightforward approach}, + publisher = {Cambridge University Press}, + year = {1977}, +} + +@ARTICLE{Bishop1969, + author = {Bishop, A.~J. and Knapp, T.~R. and McIntyre, D.~I.}, + title = {A comparison of the results of open-ended and multiple-choice versions of a mathematics test}, + journal = {International Journal of Educational Science}, + year = {1969}, + volume = {3}, + number = {2}, + pages = {147--154}, + month = {October}, +} +# http://eric.ed.gov/?id=EJ012751 + +@ARTICLE{Bisra2018, + author = {Bisra, K. and Liu, Q. and Nesbit, J.~C. and Salimi, F. and Winne, P.~H.}, + title = {Inducing Self-Explanation: a Meta-Analysis}, + journal = {Educational Psychology Review}, + year = {2018}, + volume = {30}, + number = {3}, + pages = {703--725}, + month = {September}, + doi = {10.1007/s10648-018-9434-x}, +} + +@TECHREPORT{Black1987, + AUTHOR = {Black, P.~J.}, + TITLE = {National Curriculum Task Group on Assessment and Testing: A Report}, + INSTITUTION = {Department of Education and Science and the Welsh Office}, + YEAR = {1987}, +} + +@ARTICLE{Black1998, + AUTHOR = {Black, P. and Wiliam, D.}, + TITLE = {Inside the black box: raising standards through classroom assessment}, + JOURNAL = {Phi Delta Kappan}, + YEAR = {1998}, + volume = {80}, + number = {2}, + pages = {139--148}, +} +#http://www.amazon.com/Inside-black-box-standards-assessment/dp/B00098CIQM%3FSubscriptionId%3D1NNRF7QZ418V218YP1R2%26tag%3Dbookfindercom0e%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00098CIQM + +@ARTICLE{Black2003, + author = {Black, P.~J. and William, D.}, + title = {``In praise of educational research": Formative assessment}, + JOURNAL = {British Educational Research Journal}, + YEAR = {2003}, + volume = {29}, + number = {5}, + pages = {623--638}, + doi = {10.1080/0141192032000133721}, +} + +@BOOK{Black2003b, + author = {Black, P. and Harrison, C. and Lee, C. and Marshall, B. and William, D.}, + title = {Assessment for Learning: putting it into practice}, + publisher = {Open University Press}, + year = {2003}, + address = {Maidenhead, U. K.}, +} + +@ARTICLE{Black2011, + AUTHOR = {Black, P. and Burkhardt, H. and Daro, P. and Lappan, G. and Pead, D. and Stephens, M.}, + TITLE = {High-stakes Examinations that Support Student Learning}, + JOURNAL = {Educational Designer}, + YEAR = {2011}, +} +# http://www.mathshell.org/papers/pdf/ISDDE_PARCC_Feb11.pdf +# Forthcoming. + + +@TECHREPORT{Black2000, + author = {Black, N. and Bond, J. and Bond, S. and Boulton, M. and Derbyshire, J. and Fitzpatrick, R. and Gore, S. and Grant, A. and Grimshaw, J. and Haines, A. and Jarvis, M. and King, M. and Kinmonth, A. and Langhorne, P. and Lilford, R. and Mant, D. and Nicholl, J. and Nunn, A. and Orford, J. and Petticrew, M. and Roland, M. and Rouse, R. and Russell, I. and Sandercock, P. and Scott, J. and Shepperd, S. and Sibbald, B. and Spiegelhalter, D. and Szcezepura, A. and Thompson, S. and Thornicroft, G. and Tyrer, P. and Wade, D.}, + title = {A Framework for Development and Evaluation of RCTs for Complex Interventions to Improve Health}, + institution = {Medical Research Council}, + year = {2000}, + address = {London, UK}, +} + +@TECHREPORT{Blackett2018, + author = {Blackett}, + title = {Computational Modelling: Technological Futures}, + institution = {Government Office for Science}, + year = {2018}, + address = {London, UK}, +} +# https://www.gov.uk/government/publications/computational-modelling-blackett-review + +@MASTERSTHESIS{Blafield2009, + AUTHOR = {Bl{\aa}field, L.}, + TITLE = {Matematiikan verkko-opetus osana perusopetuksen kehitt\"{a}mist\"{a} Teknillisess\"{a} korkeakoulussa}, + SCHOOL = {University of Helsinki}, + YEAR = {2009}, +} + +@BOOK{Bloom1956, + author = {Bloom, B.~S. and Engelhart, M.~D. and Furst, E.~J. and Hill, W.~H. and Krathwohl, D.~R.}, + title = {Taxonomy of educational objectives: cognitive domain}, + publisher = {McKay}, + address = {New York}, + year = {1956}, +} + +@ARTICLE{Bloom1984, + author = {Bloom, B.~S.}, + title = {The 2 Sigma Problem}, + journal = {Educational Researcher}, + year = {1984}, + volume = {13}, + number = {6}, + pages = {4--16}, +} + +@article{Blum1991, + author = {Blum, W. and Niss, M.}, + doi = {10.1007/BF00302716}, + journal = {Educational Studies in Mathematics}, + month = {February}, + number = {1}, + pages = {37--68}, + title = {Applied mathematical problem solving, modelling, applications, and links to other subjects -- State, trends and issues in mathematics instruction}, + url = {http://www.springerlink.com/index/10.1007/BF00302716}, + volume = {22}, + year = {1991} +} + +@article{Blum1991b, + author = {Blum, W. and Kirsch, A.}, + title = {Preformal Proving: Examples and Reflections}, + journal = {Educational Studies in Mathematics}, + volume = {22}, + number = {2}, + pages = {183--203}, + year = {1991}, +} +# url = {http://www.jstor.org/stable/3482408}, + +@BOOK{Boaler2009, + AUTHOR = {Boaler, J.}, + TITLE = {The elephant in the classroom: helping children learn and love maths}, + PUBLISHER = {Souvenir Press}, + YEAR = {2009}, +} + +@MASTERSTHESIS{Bogner2016, + author = {Bogner, S.}, + title = {Suggestions for a Simplified Learning Platform for Teaching Mathematics}, + school = {Johannes Kepler Universit\"{a}t Linz}, + year = {2016}, + type = {MSc} +} + +@article{Boesen2010, + author = {Boesen, J. and Lithner, J. and Palm, T.}, + title = {The relation between types of assessment tasks and the mathematical reasoning students use}, + year = {2010}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {75}, + number = {1}, + pages = {89--105}, + doi = {10.1007/s10649-010-9242-9}, + publisher = {Springer Netherlands}, +} + +@ARTICLE{Boliver2013, + AUTHOR = {Boliver, V.}, + TITLE = {How Fair is Access to More Prestigious {UK} Universities}, + JOURNAL = {British Journal of Sociology}, + YEAR = {2013}, + volume = {64}, + number = {2}, + pages = {344--364}, +} + +@BOOK{Bonnycastle1836, + author = {Bonnycastle, J.~F.}, + title = {An introduction to algebra}, + publisher = {Longman}, + address = {London, UK}, + year = {1836}, + edition = {16th}, +} +# http://books.google.co.uk/books?id=jXkBAAAAQAAJ&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false + +@article{Borodin1985, + author = "Borodin, A. and Fagin, R. and Hopcroft, J.~E. and Tompa, M.", + title = "Decreasing the nesting depth of expressions involving square roots", + journal = "Journal of Symbolic Computation", + volume = "1", + number = "2", + pages = "169--188", + year = "1985", + issn = "0747-7171", + url = "http://www.sciencedirect.com/science/article/B6WM7-4S56JYD-4/2/9bb2b26abf34c835da6111e3d3a89b4b", + doi = "10.1016/S0747-7171(85)80013-4", +} + +@INBOOK{Borovik2016, + author = {Borovik, A.~V.}, + title = {Mathematical Cultures: The London Meetings 2012-14}, + chapter = {Calling a spade a spade: Mathematics in the new pattern of division of labour}, + publisher = {Springer, 2016. . The latest pre-publication version: goo.gl/TT6ncO}, + year = {2016}, + note = {ISBN 978-3-319-28580-1}, +} +#goo.gl/TT6ncO + +@BOOK{Bostock1990, + author = {Bostock, L. and Chandler, S.}, + title = {Core maths for {A}-level}, + publisher = {Stanley Thornton Ltd}, + year = {1990}, +} + +@ARTICLE{Bouhineau2005, + AUTHOR = {Bouhineau, D. and Bronner, A. and Chaachoua, H. and Mezerette, S. and Nicaud, J.~F.}, + TITLE = {{Computer Assisted Assessment in Elementary Algebra: Experiences and points of view from the APLUSIX project}}, + JOURNAL = {Maths {CAA S}eries}, + YEAR = {2005}, + month = {November}, + organisation = {Maths, Stats \& OR Network}, + url = {http://mathstore.ac.uk/repository/mathscaa-nov2005.pdf}, + urldate = {29~July 2008}, +} + +@INPROCEEDINGS{Bouhineau2005b, + AUTHOR = {Bouhineau, D. and Nicaud, J.~F. and Chaachoua, H. and Bittar, M. and Bronner, A.}, + TITLE = {{Two years of use of the APLUSIX system}}, + BOOKTITLE = {Proceedings of the 8th IFIP World Conference on Computers in Education (Cape Town, South Africa)}, + YEAR = {2005}, + url = {http://hal.archives-ouvertes.fr/docs/00/19/02/86/PDF/APLUSIXWCE2005.pdf}, + urldate = {29~July 2008}, +} + +@ARTICLE{Boute2013, + author = {Boute, R.~T.}, + title = {How to Calculate Proofs: Bridging the Cultural Divide}, + journal = {Notices of the AMS}, + year = {2013}, + volume = {60}, + number = {2}, + pages = {173--191}, + month = {February}, +} +# http://www.ams.org/notices/201302/rnoti-p173.pdf + +@ARTICLE{Bower1995, + author = {Bower, J.~L. and Christensen, C.~M.}, + title = {Disruptive Technologies: Catching the Wave}, + journal = {Harvard Business Review}, + year = {1995}, + volume = {73}, + number = {1}, + pages = {43--53}, +} + +@ARTICLE{Boring2016, + AUTHOR = "Boring, A. and Ottoboni, K. and Stark, P.~B.", + TITLE = "Student Evaluations of Teaching (Mostly) Do Not Measure Teaching Effectiveness", + JOURNAL = "Science Open Research", + YEAR = "2016", + doi = "10.14293/S2199-1006.1.SOR-EDU.AETBZC.v1", +} + +@BOOK{Borwein2004, + author = {Borwein, J.~M. and Bailey, D.~H. and Girgensohn, R.}, + title = {Experimentation in Mathematics: Computational Paths to Discovery}, + publisher = {A K Peters/CRC Press}, + year = {2004}, + address = {Natick, Massachusetts}, +} + +@ARTICLE{Branfield1969, + AUTHOR = "Branfield, J.~R.", + TITLE = "An Investigation", + JOURNAL = GAZ, + YEAR = "1969", + volume = "53", + number = "385", + pages = "240--247", + month = "October", +} + +@ARTICLE{Braga2014, + author = {Braga, M. and Paccagnellab, M. and Pellizzari, M.}, + title = {Evaluating students’ evaluations of professors}, + journal = {Economics of Education Review}, + year = {2014}, + volume = {41}, + pages = {71--88}, + doi = {10.1016/j.econedurev.2014.04.002}, +} +# See Carrell2010, Spooren2013, Boring2016, Bassett2015 + +@ARTICLE{Braun2017, + author = {Braun, B. and Bremser, P. and Duval, A.~M. and Lockwood, E. and White, D.}, + title = {What Does Active Learning Mean For Mathematicians?}, + journal = {Notices of the {AMS}}, + year = {2017}, + volume = {64}, + number = {2}, + pages = {124--129}, + month = {February}, + doi = {10.1090/noti1472}, +} + +@BOOK{Brewster1939, + author = {Brewster, G.~W.}, + title = {Algebra}, + publisher = {Butler \& Tanner Ltd., Frome and London}, + year = {1939}, +} + +@ARTICLE{Bridgeman1992, + author = {Bridgeman, B.}, + title = {A Comparison of Quantitative Questions in Open-Ended and Multiple-Choice Formats}, + journal = {Journal of Educational Measurement}, + year = {1992}, + volume = {29}, + number = {3}, + pages = {253--271}, +} + +@ARTICLE{Bridgeman1993, + author = {Bridgeman, B. and Rock, D.~A.}, + title = {Relationships among Multiple-Choice and Open-Ended Analytical Questions}, + journal = {Journal of Educational Measurement}, + year = {1993}, + volume = {30}, + number = {4}, + pages = {313--329}, +} + +@article{Brock1980, + title = {Squared Paper in the Nineteenth Century: Instrument of Science and Engineering, and Symbol of Reform in Mathematical Education}, + author = {Brock, W.~H. and Price, M.~H.}, + journal = {Educational Studies in Mathematics}, + volume = {11}, + number = {4}, + pages = {365--381}, + year = {1980}, +} +# url = {http://www.jstor.org/stable/3482287}, +# ISSN = {00131954}, +# abstract = {The paper traces the gradual adoption of squared paper from its exclusive use as a research tool in the early 19th century to its universal use for a variety of purposes in mathematical education by the end of the first decade of this century. Three underlying causal factors are explored - the growth of new educational philosophies; the development of science teaching and the associated need for mathematics correlation; and the growing demands of engineering and technical education. Whilst the focus on squared paper is a narrow one, it is argued that its adoption in education generally was symptomatic of a much wider transformation of mathematical curricula in response to various demands which, significantly, arose outside the academic mathematical community.}, + + +@ARTICLE{Brown1974, + author = {Brown, M.}, + title = {Some thoughts on the use of computer symbols in mathematics}, + journal = GAZ, + year = {1974}, + volume = {58}, + number = {404}, + pages = {78--79}, + month = {June}, +} + +@article{Brown1969, + title = {Rational Exponential Expressions and a Conjecture Concerning $\pi$ and $e$}, + author = {Brown, W.~S.}, + journal = {American Mathematical Monthly}, + volume = {76}, + number = {1}, + pages = {28--34}, + year = {1969}, + publisher = {Mathematical Association of America}, +} +# http://www.jstor.org/stable/2316782 + +@BOOK{Brown1995, + author = {Brown, J. and Burns, S. and Duffin, J. and Etchells, T. and French, D. and Goldstein, R. and Morgan, C. and Morris, G. and Pozzi, S. and Williams, J. and Windbourne, P.}, + title = {Algebra at {A-level}: how the curriculum might change with computer algebra systems}, + publisher = {Association of Teachers of Mathematics}, + year = {1995}, + address = {Derby, UK}, + isbn = {0-900095-96-2}, +} + +@article{Brown2018, + author = {Brown, K. and Lally, V.}, + title = {Rhetorical relationships with students: A higher education case study of perceptions of online assessment in mathematics}, + journal = {Research in Comparative and International Education}, + volume = {13}, + number = {1}, + year = {2018}, + pages = {7--26}, + doi = {10.1177/1745499918761938} +} + +@BOOK{Brousseau1997, + AUTHOR = {Brousseau, G.}, + TITLE = {Theory of Didactical Situations in Mathematics: didactiques des math\'{e}matiques, 1970--1990}, + PUBLISHER = {Kluwer}, + YEAR = {1997}, + note = {N. Balacheff, M. Cooper, R. Sutherland, and V. Warfield (Trans.)}, +} + +@ARTICLE{Brooks2004, + author = {Brooks, V.}, + title = {Double marking revisited}, + journal = {British Journal of Educational Studies}, + year = {2004}, + volume = {52}, + number = {1}, + pages = {29--46}, + doi = {10.1111/j.1467-8527.2004.00253.x}, +} + +@ARTICLE{Buchberger1990, + AUTHOR = {Buchberger, B.}, + TITLE = {Should Students Learn Integration Rules?}, + JOURNAL = {ACM SIGSAM Bulletin}, + YEAR = {1990}, + volume = {24}, + number = {1}, + pages = {10--17}, + month = {January}, +} + +@ARTICLE{Buchberger2002, + author = {Buchberger, B.}, + title = {Computer Algebra: The End of Mathematics?}, + journal = {ACM SIGSAM Bulletin}, + year = {2002}, + volume = {36}, + number = {1}, + pages = {3--9}, +} +## See file SIGSAM-139-A.pdf + +@article{Buchberger2006b, + author = "Buchberger, B. and Cr\v{a}ciun, A. and Jebelean, T. and Kov\'{a}cs, L. and Kutsia, T. and Nakagawa, K. and Piroi, F. and Popov, N. and Robu, J. and Rosenkranz, M. and Windsteiger, W.", + title = "Theorema: Towards computer-aided mathematical theory exploration", + journal = "Journal of Applied Logic", + volume = "4", + number = "4", + pages = "470--504", + year = "2006", + issn = "1570-8683", + doi = "10.1016/j.jal.2005.10.006", + url = "http://www.sciencedirect.com/science/article/pii/S1570868305000716", +} + +@ARTICLE{Bundy1981, + author = {Bundy, A. and Welham, B.}, + title = {Using meta-level inference for selective application of multiple rewrite rules in algebraic manipulation}, + journal = {Artificial Intelligence}, + year = {1981}, + volume = {16}, + number = {2}, + pages = {189-212}, + doi = {10.1016/0004-3702(81)90010-2}, +} +#Also available as DAI Research Paper 121 +#http://www.sciencedirect.com/science/article/pii/0004370281900102 +#http://www.research.ed.ac.uk/portal/files/5718401/DAI_Research_Paper_No._121.pdf + +@ARTICLE{Bundy1982, + author = {Bundy, A.}, + journal = {Computer Algebra - Lecture Notes in Computer Science}, + TITLE = {Solving Symbolic Equations with PRESS}, + YEAR = {1982}, + volume = {144}, + doi = {10.1007/3-540-11607-9_13}, + pages = {109--116}, +} + +@BOOK{Bundy1983, + author = {Bundy, A.}, + TITLE = {The Computer Modelling of Mathematical Reasoning}, + PUBLISHER = {Academic Press}, + address = {London, UK}, + YEAR = {1983}, +} + +@ARTICLE{Bundy1984, + author = {Bundy, A.}, + journal = {ACM Transactions on Mathematical Software}, + TITLE = {A generalized interval package and its use for semantic checking}, + YEAR = {1984}, + volume = {10}, + number = {4}, + doi = {10.1145/2701.2702}, + pages = {397--409}, +} + +@Inbook{Bundy1988, + author = "Bundy, A.", + title = "The use of explicit plans to guide inductive proofs", + bookTitle = "9th International Conference on Automated Deduction: Argonne, Illinois, USA, May 23--26, 1988 Proceedings", + year = "1988", + publisher = "Springer Berlin Heidelberg", + address = "Berlin, Heidelberg", + pages = "111--120", + abstract = "We propose the use of explicit proof plans to guide the search for a proof in automatic theorem proving. By representing proof plans as the specifications of LCF-like tactics, [Gordon et al 79], and by recording these specifications in a sorted meta-logic, we are able to reason about the conjectures to be proved and the methods available to prove them. In this way we can build proof plans of wide generality, formally account for and predict their successes and failures, apply them flexibly, recover from their failures, and learn them from example proofs.", + isbn = "978-3-540-39216-3", + doi = "10.1007/BFb0012826", + url = "https://doi.org/10.1007/BFb0012826" +} + +@INBOOK{Bundy1998, + author = {Bundy, A.}, + TITLE = {Automated Reasoning with Analytic Tableaux and Related Methods}, + PUBLISHER = {Springer, Berlin Heidelberg}, + YEAR = {1998}, + chapter = {A Science of Reasoning}, + pages = {10--17}, +} + +@ARTICLE{Bundy2011, + author = {Bundy, A.}, + title = {Automated theorem provers: a practical tool for the working mathematician?}, + journal = {Annals of Mathematics and Artificial Intelligence}, + year = {2011}, + volume = {61}, + number = {1}, + pages = {3--14}, + doi = {10.1007/s10472-011-9248-8}, +} + +@ARTICLE{Bundy2013, + author = {Bundy, A.}, + title = {The Interaction of Representation and Reasoning}, + journal = {Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences}, + year = {2013}, + volume = {469}, + number = {2157}, + doi = {10.1098/rspa.2013.0194}, +} + + +# For file see Robinson2001 +@incollection{Bundy2001, + AUTHOR = {Bundy, A.}, + title = "Chapter 13 - The Automation of Proof by Mathematical Induction", + editor = "Alan Robinson and Andrei Voronkov", + booktitle = "Handbook of Automated Reasoning", + publisher = "North-Holland", + edition = "", + address = "Amsterdam", + year = "2001", + pages = "845 - 911", + isbn = "978-0-444-50813-3", + doi = "10.1016/B978-044450813-3/50015-1", + url = "http://www.sciencedirect.com/science/article/pii/B9780444508133500151", +} + + +@INCOLLECTION{Burton1982, + AUTHOR = {Burton, R.~R.}, + TITLE = {Diagnosing bugs in a simple procedural skill}, + BOOKTITLE = {Intelligent Tutoring Systems}, + PUBLISHER = {Academic Press}, + YEAR = {1982}, + editor = {Sleeman, D. and Brown, J.~S}, + chapter = {8}, + pages = {157--183}, +} + +@INCOLLECTION{Burkhardt1987, + AUTHOR = {Burkhardt, H.}, + TITLE = {What You Test is What You Get}, + BOOKTITLE = {The Dynamics of Curriculum Change in Developments in School Mathematics Worldwide}, + PUBLISHER = {University of Chicago School Mathematics Project}, + YEAR = {1987}, + editor = {Wirszup, I. and Streit, R.}, +} + +@ARTICLE{Burkhardt2007, + AUTHOR = {Burkhardt, H. and Swan, M.}, + TITLE = {Problem solving in the United Kingdom}, + JOURNAL = {ZDM Mathematics Education}, + YEAR = {2007}, + volume = {39}, + month = {October}, + pages = {395--403}, + doi = {10.1007/s11858-007-0041-4}, +} + +@ARTICLE{Burkhardt2012, + AUTHOR = {Burkhardt, H. and Swan, M.}, + TITLE = {Designing Assessment of Performance in Mathematics}, + JOURNAL = {Educational Designer: Journal of the International Society for Design and Development in Education}, + YEAR = {2012}, + volume = {1}, + number = {5}, + pages = {1--41}, +} +# http://www.educationaldesigner.org/ed/volume2/issue5/article19/index.htm + +@ARTICLE{Burkhardt2012b, + AUTHOR = {Burkhardt, H.}, + TITLE = {Engineering Good Math Tests}, + JOURNAL = {Education Week }, + YEAR = {2012}, + volume = {32}, + number = {6}, + pages = {23} +} + +@BOOK{Burkill1962, + author = {Burkill, J.~C.}, + title = {A first course in Mathematical Analysis}, + publisher = {Cambridge University Press}, + year = {1962}, +} + +@article{Burn2005, + title= {The vice: Some historically inspired and proof-generated steps to limits of sequences}, + author= {Burn, B.}, + journal= {Educational Studies in Mathematics}, + volume= {60}, + number= {3}, + pages= {269--295}, + year= {2005}, + publisher= {Springer} +} + +@BOOK{Burn2009, + editor = {Burn, R.~P.}, + title = {Coming to know: the introduction of new concepts in undergraduate mathematics}, + publisher = {The University of Birmingham}, + year = {2009}, + address = {Birmingham, UK}, + isbn = {978-0-9555914-2-6}, +} + +@BOOK{Busbridge1963, + author = {Busbridge, I.~W. and Cartwright, M.~L. and Kastelman, H. and Langford, W.~J. and Penfold, A.~P. and Roseveare, R.~V.~H. and Tuckey, C.~O.}, + title = {The teaching of analysis in sixth forms: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd. London}, + year = {1963}, +} + +@ARTICLE{Butcher2010, + AUTHOR = {Butcher, P.~G. and Jordan, S.~E.}, + TITLE = {A comparison of human and computer marking of short free-text student responses}, + JOURNAL = {Computers and Education}, + YEAR = {2010}, + volume = {55}, + number = {2}, + pages = {489--499}, + month = {September}, + doi = {10.1016/j.compedu.2010.02.012}, +} + +@INPROCEEDINGS{Button2013, + AUTHOR = {Button, T. and Lee, S.}, + TITLE = {Further Pure Mathematics with Technology: A Post-16 Unit of Study that uses Technology in the Teaching, Learning and Assessment}, + BOOKTITLE = {Proceedings of 11th International Conference on Technology in Mathematics Teaching}, + YEAR = {2013}, +} + +@article {Calmet1997, + author = {Calmet, J. and Campbell, J.~A.}, + title = {A perspective on symbolic mathematical computing and artificial intelligence}, + journal = {Annals of Mathematics and Artificial Intelligence}, + keyword = {Computer Science}, + pages = {261--277}, + volume = {19}, + issue = {3}, + url = {10.1023/A:1018920108903}, + year = {1997}, +} + +@TECHREPORT{Caprile2015, + author = {Caprile, M. and Palm\'{e}n, R. and Sanz, P. and Dente, G.}, + title = {Labour Market Situation and Comparison of Practices Targeted at Young People in Different Member States}, + institution = {European Parliament Directorate General for Internal Policies, Policy Department A: Economic and Scientific Policy}, + year = {2015}, + number = {IP/A/EMPL/2014-13, PE 542.199}, +} + +@BOOK{Cardarelli1999, + author = {Cardarelli, F. }, + title = {Scientific Unit Conversion}, + publisher = {Springer-Verlag}, + year = {1999}, + address = {New York, USA}, + edition = {2nd}, +} +# QC94 car. + +@INPROCEEDINGS{Carette2004, + AUTHOR = {Carette, J.}, + TITLE = {Understanding Expression Simplification}, + BOOKTITLE = {Proceedings of ISSAC 2004}, + YEAR = {2004}, + editor = {Gutierrez, J.}, + pages = {72--79}, +} + +@BOOK{Carse1987, + author = {Carse, J.~P.}, + title = {Finite and infinite games}, + publisher = {Ballantine Books}, + year = {1987}, + edition = {1st}, +} + +@ARTICLE{Carlson98, + author = {Carlson, M.~P.}, + title = {A cross-sectional investigation of the development of the function concept}, + journal = {CBMS Issues in Mathematics Education}, + year = {1998}, + volume = {7}, + pages = {114--162}, +} + +@ARTICLE{Carlson2010, + author = {Carlson, M. and Oehrtman, M. and Engelke, N.}, + title = {The Precalculus Concept Assessment: A Tool for Assessing Students’ Reasoning Abilities and Understandings}, + journal = {Cognition and Instruction}, + year = {2010}, + volume = {28}, + number = {2}, + pages = {113--145}, +} + +@ARTICLE{Carrell2010, + AUTHOR = {Carrell, S.~E. and West, J.~E.}, + TITLE = {Does Professor Quality Matter? Evidence from Random Assignment of Students to Professors}, + JOURNAL = {Journal of Political Economy}, + YEAR = {2010}, + volume = {118}, + number = {3}, + pages = {409--432}, +} +# See Braga2014 + +@ARTICLE{Carter2013, + author = {Carter, A.~R.}, + title = {Evolution of the Significant Figure Rules}, + journal = {The Physics Teacher}, + year = {2013}, + volume = {51}, + pages = {340--343}, + month = {September}, + doi = {10.1119/1.4818368}, +} + +@MISC{CASIOWeb, + author = {Casio Electronics Co.~Ltd.}, + title = {Cassiopeia Computer Extender}, + howpublished = {{http://www.casio.com/} and {\tt http://www.casio.co.uk/}}, +} + +@ARTICLE{Caviness1970, + AUTHOR = {Caviness, B.~F.}, + TITLE = {On canonical forms and simplification}, + journal = {Journal of the ACM}, + volume = {17}, + number = {2}, + pages = {385--396}, + year = {1970}, + doi = {10.1145/321574.321591}, +} + +@ARTICLE{CaytonHodges2015, + author = {Cayton-Hodges, G.~A. and Feng, G. and Pan, X.}, + title = {Tablet-Based Math Assessment: What Can We Learn from Math Apps?}, + journal = {Educational Technology and Society}, + year = {2015}, + volume = {18}, + number = {2}, + pages = {3--20}, +} + +@ARTICLE{Cetin2015, + author = {Cetin, I. and Ozden, M.~Y.}, + title = {Development of computer programming attitude scale for university students}, + journal = {Computer Applications in Engineering Education}, + year = {2015}, + volume = {23}, + number = {5}, + pages = {667--672}, + doi = {10.1002/cae.21639}, +} + +@MASTERSTHESIS{CervalPena2008, + AUTHOR = {Cerval-Pe\~{n}a, E.~R.}, + TITLE = {Automated Computer-Aided Formative Assessment with Ordinary Differential Equations}, + SCHOOL = {University of Birmingham}, + YEAR = {2008}, +} + +@INPROCEEDINGS{Chaachoua2004, + AUTHOR = {Chaachoua, H. and Nicaud, J.~F. and Bronner, A. and Bouhineau, D.}, + TITLE = {{APLUSIX}, a learning environment for algebra, actual use and benefits}, + BOOKTITLE = {Proceedings of the International Congress on Mathematics Education (ICME-10, Copenhagen, Denmark)}, + YEAR = {2004}, + url = {http://www.itd.cnr.it/telma/docs/MeTAH/Chaachoua-ICME10.pdf}, + urldate = {29~July 2008}, +} + +@ARTICLE{Charness2012, + author = {Charness, G. and Gneezy, U. and Kuhn, M.~A.}, + title = {Experimental methods: Between-subject and within-subject design}, + journal = {Journal of Economic Behavior and Organization}, + year = {2012}, + volume = {81}, + number = {1}, + pages = {1--8}, + month = {January}, + doi = {10.1016/j.jebo.2011.08.009}, +} + +@BOOK{Chateauneuf1929, + author = {Ch\^{a}teauneuf, A.~O.}, + title = {Changes in the content of elementary algebra: since the beginning of the high school movement as revealed by the textbooks of the period}, + year = {1929}, + url = {https://books.google.co.uk/books?id=6e1BAAAAIAAJ}, + publisher = {University of Pennsylvania} +} +# Review http://www.jstor.org/stable/27951306 + +@BOOK{Chatterji2003, + AUTHOR = {Chatterji, M.}, + TITLE = {Designing and using tools for educational measurement}, + PUBLISHER = {Allyn and Bacon}, + YEAR = {2003}, +} + +@PHDTHESIS{Chaoui2011, + author = {Chaoui, N.~A.}, + title = {Finding Relationships Between Multiple-Choice Math Tests and Their Stem-Equivalent Constructed Responses}, + school = {CGU Theses \& Dissertations}, + year = {2011}, + type = {PhD}, + doi = {10.5642/cguetd/21}, +} +# http://scholarship.claremont.edu/cgu_etd/21 + +@ARTICLE{Choppin1980, + AUTHOR = {Choppin, B.}, + TITLE = {Is Education Getting Better?}, + JOURNAL = {British Educational Research Journal}, + YEAR = {1981}, + volume = {7}, + number = {1}, + pages = {1--15}, +} + +@BOOK{Cockroft1982, + AUTHOR = {Cockcroft, W.~H.}, + TITLE = {Mathematics Counts}, + PUBLISHER = {Her {M}ajesty's Stationery Office}, + YEAR = {1982}, +} + +@ARTICLE{Corbett1995, + author = {Corbett, A.~T. and Anderson, J.~R.}, + title = {Knowledge tracing: Modeling the acquisition of procedural knowledge}, + journal = {User modelling and user-adapted interaction}, + volume = {4}, + number = {4}, + pages = {253--278}, + year = {1995}, +} + + +@ARTICLE{Corless2002, + AUTHOR = {Corless, R.~M. and Jeffrey, D.~J. and Watt, S. and Bradford, R. and Davenport, J.}, + TITLE = {Reasoning about the elementary functions of complex analysis}, + JOURNAL = {Annals of Mathematics and Artificial Intelligence}, + YEAR = {2002}, + volume = {36}, + number = {2}, + pages = {303--318}, + month = {November}, + doi = {10.1023/A:1016007415899}, +} + + +@article{Corless1996, + title = {{On the LambertW function}}, + author = {Corless, R.~M. and Gonnet, G.~H. and Hare, D.~E.~G. and Jeffrey, D.~J. and Knuth, D.~E.}, + journal = {Advances in Computational mathematics}, + volume = {5}, + number = {1}, + pages = {329--359}, + year = {1996}, + publisher = {Springer} +} + +@INPROCEEDINGS{Crisan2014, + author = {Crisan, C.}, + title = {The case of the square root: Ambiguous treatment and pedagogical implications for prospective mathematics teachers}, + booktitle = {Proceedings of the 8th British Congress of Mathematics Education}, + year = {2014}, +} + +@ARTICLE{Crooks1996, + author = {Crooks, T.~J. and Kane, M.~T. and Cohen, A.~S.}, + title = {Threats to the Valid Use of Assessments}, + journal = {Assessment in Education: Principles, Policy and Practice}, + year = {1996}, + volume = {3}, + number = {3}, + pages = {265--286}, + doi = {10.1080/0969594960030302}, +} + +@ARTICLE{Chase2015, + author = {Chase, K. and Abrahamson, D.}, + title = {Reverse-scaffolding algebra: empirical evaluation of design architecture}, + journal = {ZDM Mathematics Education}, + year = {2015}, + volume = {47}, + pages = {1195–1209}, + doi = {10.1007/s11858-015-0710-7}, +} + +@BOOK{Chrystal1893v1, + author = {Chrystal, G.}, + title = {Algebra, an elementary text-book for the higher classes of secondary schools and for colleges: Part I}, + publisher = {Adam and Charles Black, London and Edinburgh}, + year = {1893}, + edition = {Third}, +} + +@BOOK{Chrystal1893v2, + author = {Chrystal, G.}, + title = {Algebra, an elementary text-book for the higher classes of secondary schools and for colleges: Part II}, + publisher = {Adam and Charles Black, London and Edinburgh}, + year = {1899}, + edition = {First}, +} + +@BOOK{Chrystal1904, + author = {Chrystal, G.}, + title = {Algebra, an elementary text-book for the higher classes of secondary schools and for colleges}, + publisher = {Adam and Charles Black, London and Edinburgh}, + year = {1904}, + edition = {Fifth}, +} +# https://archive.org/details/algebraanelemen03chrygoog + +@BOOK{Chrystal1898, + author = {Chrystal, G.}, + title = {Introduction to Algebra, for the use of secondary schools and technical colleges}, + publisher = {Adam and Charles Black, London and Edinburgh}, + year = {1898}, +} +#https://archive.org/stream/introductiontoa00chrygoog#page/n17/mode/2up + +@ARTICLE{Clement1981, + AUTHOR = {Clement, J. and Lochhead, J. and Monk, G.~S.}, + TITLE = {Translation difficulties in learning mathematics}, + JOURNAL = {American Mathematical Monthly}, + YEAR = {1981}, + volume = {88}, + number = {4}, + pages = {286--290}, + month = {April}, +} + +@TECHREPORT{Coe2008, + AUTHOR = {Coe, R. and Searle, J. and Barmby, P. and Jones, K. and Higgins, S.}, + TITLE = {Relative difficulty of examinations in different subjects}, + INSTITUTION = {Science Community Supporting Education, CEM Centre, Durham University}, + YEAR = {2008}, + month = {July}, + source = {\href{http://www.cemcentre.org/attachments/SCORE2008report.pdf}{\tt http://www.cemcentre.org/attachments/SCORE2008report.pdf}}, + address = {Durham, UK}, +} + +@MISC{Coe2013, + author = {Coe, R.}, + title = {Improving Education: A triumph of hope over experience}, + howpublished = {Inaugural Lecture of Professor {Robert Coe}}, + year = {2013}, + month = {June}, + source = {Centre for Evaluation and Monitoring, Durham University}, +} + +@ARTICLE{Conole2005, + AUTHOR = {Conole, G. and Warburton, B.}, + TITLE = {A review of computer-assisted assessment}, + JOURNAL = {Research in Learning Technology}, + YEAR = {2005}, + volume = {13}, + number = {1}, + pages = {17--31}, + month = {March}, +} + +@ARTICLE{Connors, + author = {Connors, M.~A. and Snook, K.}, + title = {The Effects of Hand Held {CAS} on Student Achievement in a First Year College Core Calculus Sequence}, + journal = {The International Journal of Computer Algebra in Mathematics Education}, + year = {2001}, + volume = {8}, + number = {2}, + pages = {99--114}, +} + +@BOOK{Cooper2000, + AUTHOR = {Cooper, B. and Dunne, M.}, + TITLE = {Assessing Children's Mathematical Knowledge: Social Class, Sex and Problem-Solving.}, + PUBLISHER = {Open University Press.}, + YEAR = {2000}, +} + +@BOOK{Coppin2009, + AUTHOR = {Coppin, C.~A. and Mahavier, W.~T. and May, E.~L. and Parker, E.~G.}, + TITLE = {The {M}oore Method, a pathway to Learner-Centered Instruction}, + PUBLISHER = {Mathematical Association of America}, + YEAR = {2009}, + volume = {75}, + series = {MAA Notes}, +} + +@ARTICLE{Cottrill96, + author = {Cottrill, J. and Dubinsky, E. and Nicholas, D. and Schwingendorf, K. and Thomas, K. and Vidakovic, D.}, + title = {Understanding the limit concept: Beginning with a coordinated process schema}, + journal = JMB, + year = {1996}, + volume = {15}, + pages = {167--192}, +} + +@ARTICLE{Corcoran2016, + author = {Corcoran, J.}, + title = {Logic teaching in the 21st century}, + journal = {Journal of Argumentation and Rhetoric}, + year = {2016}, + volume = {1}, + number = {1}, +} + +@ARTICLE{Courant, + author = {Courant, R.}, + title = {Reminiscences from {H}ilbert's {G}\"{o}ttingen}, + journal = {The Mathematical Intelligencer}, + year = {1981}, + volume = {3}, + number = {4}, + pages = {154--164}, +} + +@TECHREPORT{alcab2014, + author = {Craster, R. and Dunning, C. and Giblin, P. and Glaister, P. and Heslop, A. and Humble, S. and Pope, S. and Porkess, R. and Rogers, A. and Walker, L. and Wilson, H.}, + title = {Report of the {ALCAB} Panel on Mathematics and Further Mathematics}, + institution = {The {A Level} Content Advisory Board}, + year = {2014}, + month = {July}, +} + +@ARTICLE{Crawford94, + author = {Crawford, K. and Gordon, S. and Nicholas, J. and Prosser, M.}, + title = {Conceptions of mathematics and how it is learned: the perspectives of students entering university}, + journal = LaI, + year = {1994}, + volume = {4}, + number = {4}, + pages = {331--345}, +} + +@ARTICLE{Crawford98a, + author = {Crawford, K. and Gordon, S. and Nicholas, J. and Prosser, M.}, + title = {Qualitatively different experiences of learning mathematics at university}, + journal = LaI, + year = {1998}, + volume = {8}, + number = {5}, + pages = {455--468}, +} + +@ARTICLE{Crawford98b, + author = {Crawford, K. and Gordon, S. and Nicholas, J. and Prosser, M.}, + title = {University mathematics students conceptions of mathematics}, + journal = {Studies in Higher Education}, + year = {1998}, + volume = {23}, + pages = {87--94}, +} + +@TECHREPORT{Crick2015, + author = {Crick, T. and Davenport, J. and Hayes, A.}, + title = {Innovative pedagogical practices in the craft of Computing}, + institution = {Higher Education Academy}, + year = {2015}, +} +# https://www.heacademy.ac.uk/sites/default/files/crick_davenport_and_hayes.pdf + +@BOOK{CroftAR, + author = {Croft, A.}, + title = {An Algebra Refresher}, + publisher = {LTSN Maths, Stats \& {OR} Network}, + year = {2002}, + address = {The University of Birmingham, Birmingham, {B15 2TT}}, +} + +@BOOK{Croft1998, + author = {Croft, A. and Davison, R.}, + title = {Mathematics for Engineers: A modern interactive approach}, + publisher = {Addison Wesley}, + year = {1998}, + address = {Harlow, UK}, +} + +@ARTICLE{Crooks2014, + author = {Crooks, N.~M. and Alibali, M.~W.}, + title = {Defining and measuring conceptual knowledge in mathematics}, + journal = {Developmental Review}, + year = {2014}, + volume = {34}, + pages = {344-377}, +} + +@ARTICLE{Crouch2004, + author = {Crouch C. and Fagen, A.~P. and Callan, J.~P. and Mazur, E.}, + title = {Classroom demonstrations: Learning tools or entertainment?}, + journal = {American Journal of Physics }, + year = {2004}, + volume = {73}, + number = {6}, + pages = {835--838}, + month = {June}, + doi = {10.1119/1.1707018}, +} + +@ARTICLE{Crowe2000a, + author = {Crowe, D. and Zand, H.}, + title = {Computers and undergraduate mathematics: I: setting the scene}, + journal = {Computers and Education}, + year = {2000}, + volume = {35}, + number = {2}, + pages = {95--121}, + doi = {doi:10.1016/S0360-1315(00)00020-8}, +} + +@ARTICLE{Crowe2000b, + author = {Crowe, D. and Zand, H.}, + title = {Computers and undergraduate mathematics 3: Internet resources}, + journal = {Computers and Education}, + year = {2000}, + volume = {35}, + number = {2}, + pages = {123--147}, + doi = {doi:10.1016/S0360-1315(00)00021-X}, +} + +@ARTICLE{Crowe2001, + author = {Crowe, D. and Zand, H.}, + title = {Computers and undergraduate mathematics 2: on the desktop}, + journal = {Computers and Education}, + year = {2000}, + volume = {37}, + number = {3-4}, + pages = {317--344}, + doi = {doi:10.1016/S0360-1315(01)00057-4}, +} + +@ARTICLE{Cuevas2018, + author = {Cuevas, J. and Dawson, B.~L.}, + title = {A test of two alternative cognitive processing models: Learning styles and dual coding}, + journal = {Theory and Research in Education}, + year = {2018}, + volume = {16}, + number = {1}, + pages = {40--64}, + doi = {10.1177/1477878517731450}, +} + +@ARTICLE{Cuoco1996, + author = {Cuoco, A. and Goldenberg, E.~P. and Mark, J.}, + title = {Habits of Mind: An Organizing Principle for Mathematics Curricula}, + journal = {Journal of Mathematical Behaviour}, + year = {1996}, + volume = {15}, + pages = {375--402}, +} + +@TECHREPORT{Curzon2014, + author = {Curzon, P. and Dorling, M. and Ng, T. and Selby, C. and Woollard, J.}, + title = {Developing computational thinking in the classroom: a framework}, + institution = {Computing At School}, + year = {2014}, + type = {Working Group Report}, +} + + +@ARTICLE{Dahlberg1997, + author = {Dahlberg, R.~P. and Housman, R.~P.}, + title = {Facilitating learning events through example generation}, + journal = EdStud, + year = {1997}, + volume = {33}, + number = {3}, + pages = {283--299}, +} + +@ARTICLE{Dalby2018, + author = {Dalby, D. and Swan, M.}, + title = {Using digital technology to enhance formative assessment in mathematics classrooms}, + journal = {British Journal of Educational Technology}, + year = {2018}, + volume = {?}, + number = {?}, + pages = {?}, + doi = {10.1111/bjet.12606}, +} + +@ARTICLE{Darlington2014, + author = {Darlington, E.}, + title = {Contrasts in mathematical challenges in A-level Mathematics and Further Mathematics, and undergraduate mathematics examinations}, + journal = {Teaching Mathematics and its Applications}, + year = {2014}, + volume = {33}, + number = {4}, + pages = {213--229}, + doi = {doi:10.1093/teamat/hru021}, +} + +@ARTICLE{Darlington2015, + author = {Darlington, E.}, + title = {What benefits could extension papers and admissions tests have for university mathematics applicants?}, + journal = {Teaching Mathematics and its Applications}, + year = {2015}, + volume = {34}, + number = {4}, + pages = {179--193}, + doi = {doi:10.1093/teamat/hrv003}, +} + +@INBOOK{Davenport1986, + AUTHOR = {Davenport, J.}, + TITLE = {The Influence of Computers and Informatics on Mathematics and its Teaching}, + CHAPTER = {The Mathematics of Computer Algebra}, + pages = {76--84}, + PUBLISHER = {Cambridge University Press}, + YEAR = {1986}, +} + +@book{Davenport1993, + title = {Computer algebra: systems and algorithms for algebraic computation}, + author = {Davenport, J.~H. and Siret, Y. and Tournier, E.}, + year = {1993}, + publisher = {Academic Press Professional} +} + +@ARTICLE{Davenport2002a, + AUTHOR = {Davenport, J.~H.}, + TITLE = {Equality in Computer Algebra and Beyond}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {2002}, + volume = {34}, + pages = {259--270}, +} + +@INPROCEEDINGS{Davenport2010, + AUTHOR = {Davenport, J.~H. and Carette, J.}, + TITLE = {The sparsity challenges}, + BOOKTITLE = {Proceedings of the 11th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing (SYNASC 2009)}, + YEAR = {2009}, + editor = {Watt, S.}, + pages = {3--7}, + publisher = {IEEE Computer Society}, + note = {http://opus.bath.ac.uk/17324/}, +} + +@article{Davis1961, + title = {The Decision Problem for Exponential Diophantine Equations}, + author = {Davis, M. and Putnam, H. and Robinson, J.}, + journal = {The Annals of Mathematics}, + volume = {74}, + number = {3}, + series = {Second Series}, + pages = {425--436}, + url = {http://www.jstor.org/stable/1970289}, + year = {1961}, + publisher = {Annals of Mathematics}, +} + +@INPROCEEDINGS{DavisM2015, + author = {Davis, M. and Dhanbhoora, J. and Hunter, G. and Wiesyk, W.}, + title = {{CALCULENG}: Towards an Intelligent Environment for the Teaching and Learning of Calculus}, + booktitle = {Workshop Proceedings of the 11th International Conference on Intelligent Environments}, + year = {2015}, + pages = {138--149}, +} +# https://books.google.co.uk/books?hl=en&lr=&id=JjkxCgAAQBAJ&oi=fnd&pg=PA138&ots=Jf1ib-9Ngx&sig=14dO3kp-GAuUE-HJB4Y1tFpe-oo#v=onepage&q&f=false +# http://ebooks.iospress.com/volumearticle/39860 + +@ARTICLE{DavisKrajcik2005, + author = {Davis, E.~A. and Krajcik, J.~S.}, + title = {Designing Educative Curriculum Materials to Promote Teacher Learning}, + journal = {Educational Researcher}, + year = {2005}, + volume = {34}, + number = {3}, + pages = {3--14}, +} + +@ARTICLE{Dawson2016, + author = {Dawson, P. and Dawson, S.~L.}, + title = {Sharing successes and hiding failures: ‘reporting bias’ in learning and teaching research}, + journal = {Studies in Higher Education}, + year = {2016}, + doi = {10.1080/03075079.2016.1258052}, +} + +@BOOK{Day1820, + author = {Day, J.}, + title = {An Introduction to Algebra, being the first part of a course of Mathematics}, + publisher = {Howe and Spalding}, + address = {New-Haven, USA}, + year = {1820}, + edition = {2nd}, +} +# http://books.google.co.uk/books?id=YG86AAAAMAAJ +&printsec=frontcover&dq=Introduction+to+Algebra,+by+Jeremiah+Day&hl=en&sa=X&ei=oM3vUv-DFY2U0QXtsoGYBQ&ved=0CEAQ6AEwAQ#v=onepage&q=Introduction%20to%20Algebra%2C%20by%20Jeremiah%20Day&f=false + +@ARTICLE{Day2015, + author = {Day, S.~B. and Motz, B.~A. and Goldstone, R.~L.}, + title = {The Cognitive Costs of Context: The Effects of Concreteness and Immersiveness in Instructional Examples}, + journal = {Frontiers in Psychology}, + year = {2015}, + volume = {6}, + number = {1876}, + pages = {1--13}, + month = {Dec}, +} +#http://www.frontiersin.org/ + +@ARTICLE{DBRC2003, + author = {The Design-Based Research Collective}, + title = {Design-Based Research: An Emerging Paradigm for Educational Inquiry}, + journal = {Educational Researcher}, + year = {2003}, + volume = {32}, + number = {1}, + pages = {5--8}, +} + +@UNPUBLISHED{Dedic2007, + AUTHOR = {Dedic, H. and Rosenfield, S. and Ivanov, I.}, + TITLE = {Just Computer Aided Instruction Is Not Enough: Combining WeBWorK with In-Class Interactive Sessions Increases Achievement and Perseverance of Social Science Calculus Students}, + NOTE = {Preprint}, + year = {2007}, +} +#http://sun4.vaniercollege.qc.ca/PA-2005-008/Pedagogie_Collegiale_Article_Dedic_Rosenfield_Ivanov.pdf + +@ARTICLE{DeJean1999, + author = {De Jean, J. nd Upitis, R. and Young, J.}, + title = {The Story of Phoenix Quest: How girls respond to a prototype language and mathematics computer game}, + journal = {Gender and Education}, + year = {1999}, + volume = {11}, + number = {2}, + pages = {207--223}, + doi = {10.1080/09540259920708} +} + +@ARTICLE{Deming2015, + author = {Deming, D.~J. and Goldin, C. and Katz, L.~F. and Yuchtman, N.}, + title = {Can Online Learning Bend the Higher Education Cost Curve?}, + journal = {American Economic Review}, + year = {2015}, + volume = {105}, + number = {5}, + pages = {496--501}, + doi = {10.1257/aer.p20151024}, +} + + +@BOOK{DeMorgan1828, + author = {De Morgan, A.}, + title = {Elements of algebra; translated from the three first chapters of the algebra of {M}.~{Bourdon}}, + publisher = {Taylor}, + address = {London}, + year = {1828}, +} +# http://dbooks.bodleian.ox.ac.uk/books/PDFs/600003741.pdf + +@article{DeMorgan1835, + author = {De Morgan, A.}, + title = {Review: A Treatise on Algebra, by {George Peacock}}, + journal = {Quarterly Journal of Education}, + year = {1835}, + volume = {9}, + pages = {293--311}, +} + +@BOOK{DeMorgan1837b, + author = {De Morgan, A.}, + title = {Elements of trigonometry, and trigonometrical analysis, preliminary to the differential calculus: fit for those who have studied the principles of arithmetic and algebra, and six books of {Euclid}}, + publisher = {Taylor}, + address = {London, UK}, + year = {1837}, +} +# http://books.google.co.uk/books?id=qVs6AAAAMAAJ&oe=UTF-8&redir_esc=y + + +@BOOK{DeMorgan1837, + author = {De Morgan, A.}, + title = {Elements of algebra, preliminary to the differential calculus}, + publisher = {Taylor and Walton}, + address = {London, UK}, + year = {1837}, + edition = {2nd}, +} +# http://books.google.co.uk/books?id=ynW5I_toDTQC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false +# Note pg 88 is obscured, which is exactly the page I was interested in! + +@article{DeMorgan1838, + author = {De Morgan, A.}, + title = {Mathematical induction}, + journal = {The Penny Cyclopedia}, + year = {1838}, + volume = {XII}, + pages = {465--466}, + publisher = {The Society for the Diffusion of Useful Knowledge}, + address = {London, Charles Knight and Co.} +} +#https://www.maa.org/press/periodicals/convergence/mathematical-treasure-augustus-de-morgan-and-mathematical-induction + +@BOOK{DeMorgan1847, + author = {De Morgan, A.}, + title = {Arithmetical books from the invention of printing to the present time being brief notes of a large number of works drawn up from actual inspection}, + publisher = {Taylor and Walton}, + address = {28 Upper Gower Street, London}, + year = {1847}, +} + +@BOOK{DeMorgan1872, + author = {De Morgan, A.}, + title = {A Budget of Paradoxes}, + publisher = {Longmans, Green and Co.}, + year = {1872}, + address = {London, UK}, +} + +@ARTICLE{Devlin1997, + author = {Devlin, K.}, + title = {The Logical Structure of Computer-Aided Mathematical Reasoning}, + journal = {The American Mathematical Monthly}, + year = {1997}, + volume = {104}, + number = {7}, + pages = {632--646}, +} + +@BOOK{Devlin2011, + AUTHOR = {Devlin, K.}, + TITLE = {Mathematics Education for a New Era: Video Games as a Medium for Learning}, + PUBLISHER = {A K Peters/CRC Press}, + YEAR = {2011}, +} + +@ARTICLE{Devlin2013, + AUTHOR = {Devlin, K.}, + title = {The Music of Math Games}, + journal = {American Scientist}, + year = {2013}, + volume = {101}, + number = {2}, + pages = {87--91}, + month = {March}, +} + +@TECHREPORT{DFE-00171-2013, + author = {DfE}, + title = {Computing programmes of study: key stages 1 and 2}, + institution = {Department for Education}, + address = {London, UK}, + year = {2013}, + type = {National curriculum in England}, + number = {DFE-00171-2013}, +} + +@TECHREPORT{DFE-00191-2013, + author = {DfE}, + title = {Computing programmes of study: key stages 3 and 4}, + institution = {Department for Education}, + address = {London, UK}, + year = {2013}, + type = {National curriculum in England}, + number = {DFE-00191-2013}, +} + +@ARTICLE{Dietz2014, + author = {Dietz, G.}, + title = {What is So Negative About Negative Exponents?}, + journal = {Journal of Humanistic Mathematics}, + year = {2014}, + volume = {4}, + number = {1}, + pages = {124--135}, +} + +@UNPUBLISHED{Dijkstra1988, + author = {Dijkstra, E.~W.}, + title = {On the Cruelty of Really Teaching Computing Science}, + note = {EWD-1036}, + year = {1988}, +} +# http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1036.PDF + +@ARTICLE{diSessa2018, + author = {diSessa, A.~A.}, + title = {Computational Literacy and ``The Big Picture'' Concerning Computers in Mathematics Education}, + journal = {Mathematical Thinking and Learning}, + year = {2018}, + volume = {20}, + number = {1}, + pages = {3--31}, + year = {2018}, + doi = {10.1080/10986065.2018.1403544}, +} + +@MANUAL{Dodier2005, + TITLE = {Minimal Maxima}, + author = {Dodier, R.}, + month = {September}, + year = {2005}, + source = {\href{http://maxima.sourceforge.net/docs/tutorial/en/minimal-maxima.pdf}{http://maxima.sourceforge.net/docs/tutorial/en/minimal-maxima.pdf}}, +} + +@BOOK{Dorier2000, + editor = {Dorier, J.~L.}, + title = {On the Teaching of Linear Algebra}, + publisher = {Springer}, + year = {2000}, + volume = {23}, + series = {Mathematics Education Library}, + doi = {http://dx.doi.org/10.1007/0-306-47224-4}, +} + +@INPROCEEDINGS{Dorier2002, + author = {Dorier, J.~L.}, + title = {Teaching Linear Algebra at University}, + booktitle = {Proceedings of the ICM, Beijing 2002}, + year = {2002}, + volume = {3}, + pages = {875--884}, + doi = {arXiv:math/0305018}, +} + +@ARTICLE{Dorn2015, + author = {Dorn, B. and Tew, E.}, + title = {Empirical validation and application of the computing attitudes survey}, + journal = {Computer Science Education}, + year = {2015}, + volume = {25}, + number = {1}, + pages = {1--36}, + doi = {10.1080/08993408.2015.1014142}, +} + +@ARTICLE{Doumas2008, + author = {Doumas, L.~A.~A. and Hummel, J.~E. and Sandhofer, C.~M.}, + title = {A Theory of the Discovery and Predication of Relational Concepts}, + journal = {Psychological Review}, + year = {2008}, + volume = {115}, + number = {1}, + pages = {1--43}, +} + +@ARTICLE{Drijvers2002, + AUTHOR = {Drijvers, P.~H.~M.}, + TITLE = {Learning mathematics in a computer algebra environment: obstacles are opportunities}, + journal = {}, + year = {2002}, + volume = {34}, + number = {5}, + pages = {221--228}, + month = {October}, + doi = {10.1007/BF0265582}, +} + +@BOOK{Drijvers2003, + AUTHOR = {Drijvers, P.~H.~M.}, + TITLE = {Learning algebra in a computer algebra environment}, + PUBLISHER = {Freudenthal Institute}, + address = {Utrecht, Netherlands}, + YEAR = {2003}, +} + +@ARTICLE{Drijvers2014, + author = {Drijvers, P. and Doorman, M. and Kirschner, P. and Hoogveld, B. and Boon, P.}, + title = {The Effect of Online Tasks for Algebra on Student Achievement in Grade 8}, + journal = {Tech Know Learn}, + year = {2014}, + volume = {19}, + pages = {1--18}, + doi = {10.1007/s10758-014-9217-5}, +} + +@incollection{DubinskyAMT, + author = {Dubinsky, E.}, + title = {Reflective abstraction in advanced mathematical thinking}, + booktitle= {Advanced mathematical thinking}, + editor = {Tall, D.}, + chapter = {7}, + pages = {95--126}, + publisher = {Kluwer Academic Publishers}, + year = {1991}, +} + +@ARTICLE{Duckworth2007, + AUTHOR = {Duckworth, A.~L. and Peterson, C. and Matthews, M.~D. and Kelly, D.~R.}, + TITLE = {Grit: Perseverance and Passion for Long-Term Goals}, + JOURNAL = {Journal of Personality and Social Psychology}, + YEAR = {2007}, + volume = {92}, + number = {6}, + pages = {1087--1101}, + month = {June}, +} + +@ARTICLE{Duffin2000, + AUTHOR = {Duffin, J.}, + TITLE = {Invited review: we must not let the future be the prisoner of yesterday's ideas}, + JOURNAL = {Teaching Mathematics and its Applications}, + YEAR = {2000}, + volume = {19}, + number = {2}, + pages = {56--61}, +} + +@BOOK{Durell1930, + author = {Durell, C.~V.}, + title = {New Algebra for Schools (3 vols)}, + publisher = {Bell \& Sons}, + address = {London, UK}, + year = {1930}, +} + +@BOOK{Durell1930b, + author = {Durell, C.~V.}, + title = {Advanced Trigonometry}, + publisher = {Bell \& Sons}, + address = {London, UK}, + year = {1930}, +} + +@BOOK{Durell1968, + author = {Durell, C.~V. and Robson, A.}, + title = {Advanced Algebra (3 vols)}, + publisher = {Bell \& Sons}, + address = {London, UK}, + year = {1968}, +} + +@ARTICLE{Dunlosky2013, + author = {Dunlosky, J. and Rawson, K.~A. and Marsh, E.~J. and Natan, M.~J. and Willingham, D.~T.}, + title = {Improving Students' Learning With Effective Learning Techniques: Promising Directions From Cognitive and Educational Psychology}, + journal = {Psychological Science in the Public Interest}, + volume = {14}, + number = {1}, + pages = {4--58}, + year = {2013}, + publisher = {Sage Publications}, + doi = {10.1177/1529100612453266}, +} + +@ARTICLE{Dyckhoff1992, + author = {Dyckoff, R.}, + title = {Contraction-Free Sequent Calculi for Intuitionistic Logic}, + journal = {The Journal of Symbolic Logic}, + year = {1992}, + volume = {57}, + number = {3}, + pages = {795--807}, + month = {September}, + doi = {10.2307/2275431}, +} +#http://www.jstor.org.ezproxy.is.ed.ac.uk/stable/2275431 + +@ARTICLE{Edwards2010, + AUTHOR = {Edwards, A. and Alcock, L.}, + TITLE = {Using {R}asch Analysis to identify uncharacteristic responses to undergraduate assessment}, + JOURNAL = {Teaching Mathematics and its Applications}, + YEAR = {2010}, + volume = {29}, + number = {4}, + pages = {165--175}, +} + +@ARTICLE{Edwards2004, + author = {Edwards, B.~S. and Ward, M.~B.}, + title = {Surprises from Mathematics Education Research: Student (Mis)use of Mathematical Definitions}, + journal = {American Mathematical Monthly}, + year = {2004}, + volume = {111}, + number = {5}, + pages = {411--424}, +} + +@ARTICLE{Eisenberg1977, + author = {Eisenberg, T.}, + title = {Begle Revisited: Teacher Knowledge and Student Achievement in Algebra}, + journal = {Journal for Research in Mathematics Education}, + year = {1977}, + volume = {3}, + number = {8}, + pages = {216--222}, + month = {May}, +} +# http://www.jstor.org/stable/748523 + +@incollection{EisenbergAMT, + author = {Eisenberg, T.}, + title = {Functions and associated learning difficulties}, + booktitle= {Advanced mathematical thinking}, + editor = {Tall, D.}, + chapter = {9}, + pages = {140--152}, + publisher = {Kluwer Academic Publishers}, + year = {1991}, +} + +@incollection{Eisenberg1994, + author = {Eisenberg, T. and Dreyfus, T.}, + title = {On understanding how students learn to visualize function transformations}, + booktitle= {CBMS Issues in Mathematics Education}, + pages = {45--68}, + volume = {4}, + year = {1994}, +} + +@BOOK{Ellerton2012, + author = {Ellerton, N. and Clements, M.~A.}, + title = {Rewriting the History of School Mathematics in North America, 1607--1861}, + publisher = {Springer}, + year = {2012}, +} + +@ARTICLE{Entwistle2004, + author = {Entwistle, N.~J. and Peterson, E.~R.}, + title = {Conceptions of Learning and Knowledge in Higher Education: Relationships with Study Behaviour and Influences of Learning Environments}, + journal = {International Journal of Educational Research}, + year = {2004}, + volume = {41}, + number = {6}, + pages = {407--428}, + doi = {10.1016/j.ijer.2005.08.009}, +} + +@article{Epstein1979, + Author = {Epstein, H.~I. and Caviness, B.~F.}, + Title = {Structure Theorem for the Elementary Functions and its Application to the Identity Problem}, + Journal = {International Journal of Computer \& Information Sciences}, + Year = {1979}, + Volume = {8}, + Number = {1}, + Pages = {9--37}, +} + +@ARTICLE{Epstein2008, + AUTHOR = {Epstein, J.~M.}, + TITLE = {Why Model?}, + JOURNAL = {Journal of Artificial Societies and Social Simulation}, + YEAR = {2008}, + volume = {11}, + number = {4}, +} + +@ARTICLE{Epstein2013, + AUTHOR = {Epstein, J.~M.}, + TITLE = {The Calculus Concept Inventory---Measurement of the Effect of Teaching Methodology in Mathematics}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {2013}, + volume = {60}, + number = {8}, + pages = {1018--1026}, +} + +@ARTICLE{Ericsson1993, + AUTHOR = "Ericsson, K.~A. and Krampe, R. and Tesch-R{\"o}mer, C.", + TITLE = "The role of deliberate practice in the acquisition of expert performance", + JOURNAL = "Psychological Review", + YEAR = "1993", + volume = "100", + number = "3", + pages = "363--406", +} + +@book{Ericsson2006, + editor = {Ericsson, K.~A. and Hoffman, R.~R. and Kozbelt, A. and Williams, A.~M.}, + title = {The Cambridge handbook of expertise and expert performance}, + publisher = {Cambridge University Press}, + address = {Cambridge, England ; New York, N.Y.}, + year = {2006}, + isbn = {052184097X}, + lccn = {2006002825}, +} + +@TECHREPORT{EU2007, + author = {Figel, J.}, + title = {Key Competences for Lifelong Learning -- A European Framework}, + institution = {Luxembourg: Office for Official Publications of the European Communities}, + year = {2007}, +} +# http://www.britishcouncil.org/sites/britishcouncil.uk2/files/youth-in-action-keycomp-en.pdf + + +@ARTICLE{Evans2003, + author = {Evans, J.~S.~B.~T.}, + title = {In two minds: Dual process accounts of reasoning}, + journal = {TRENDS in Cognitive Sciences}, + year = {2003}, + volume = {7}, + number = {10}, + pages = {454--459}, + month = {October}, + doi = {10.1016/j.tics.2003.08.012}, +} + +@BOOK{Everhard2013, + author = {Everhart, T.~E. and Green, M.~L. and Beder, T.~S. and Berger, J.~O. and Caffarelli, L.~A. and Candes, E.~J. and Colella, P. and Eisenbud, D. and Jones, P.~W. and Kim, J. and Lecun, Y. and Liu, J. and Maldacena, J. and Morgan, J.~W. and Peres, P. and Tardos, E. and Wright, M.~H. and Wyatt, J.~B.}, + title = {The Mathematical Sciences in 2025}, + publisher = {The National Academies Press}, + year = {2013}, + address = {Washington, D.~C.}, + isbn = {978-0-309-28457-8}, + doi = {10.17226/15269}, +} + +@ARTICLE{Fan2013, + AUTHOR = {Fan, L.}, + TITLE = {Textbook research as scientific research: towards a common ground on issues and methods of research on mathematics textbooks}, + YEAR = {2013}, + journal = {ZDM Mathematics Education}, + volume = {45}, + pages = {765--777}, + doi = {10.1007/s11858-013-0530-6}, +} + +@INPROCEEDINGS{Faste2012, + author = {Faste, T. and Faste, H.}, + title = {DEMYSTIFYING “DESIGN RESEARCH”: DESIGN IS NOT RESEARCH, RESEARCH IS DESIGN}, + booktitle = {Proceedings of the IDSA Education Symposium}, + year = {2012}, + pages = {}, +} + +@ARTICLE{Fateman1996, + author = {Fateman, R.~J.}, + title = {Why computer algebra systems sometimes can't solve simple equations}, + journal = {ACM SIGSAM Bulletin}, + year = {1996}, + volume = {30}, + number = {2}, + pages = {8--11}, +} + +@UNPUBLISHED{Fateman1999, + author = {Fateman, R.~J.}, + title = {Parsing {TeX} into mathematics}, + year = {1999}, +} +# http://www.cs.berkeley.edu/~fateman/papers/parsing_tex.pdf + +@ARTICLE{Fateman2013, + author = {Fateman, R.~J.}, + title = {Interval Arithmetic, Extended Numbers and Computer Algebra Systems}, + journal = {???}, + year = {2013}, + volume = {??}, + number = {??}, + pages = {??}, +} + +@MISC{Fateman2014, + author = {Richard Fateman}, + title = {Partitioning of Algebraic Subexpressions in Computer Algebra Systems: Or, Don’t use matching so much. Including a neat integration example}, + year = {2014} +} + +@BOOK{Fawcett1938, + author = {Fawcett, H.~P.}, + title = {The Nature of Proof. A description and evaluation of certain procedures used in a senior high school to develop an understanding of the nature of proof}, + publisher = {The National Council of Teachers of Mathematics}, + year = {1938}, + series = {The Thirteenth Yearbook}, +} + +@INPROCEEDINGS{Feigenspan2011, + author = {Feigenspan, J. and K\"{a}stner, C. and Liebig, J. and Apel, S. and Hanenberg, S.}, + title = {Measuring programming experience}, + booktitle = {20th International Conference on Program Comprehension (ICPC)}, + year = {2012}, + pages = {73--82}, + organization = {IEEE}, +} +# See Siegmund2014. + +@PHDTHESIS{Fenichel1966, + AUTHOR = {Fenichel, R.~R.}, + TITLE = {An On-line System for Algebraic Manipulation}, + SCHOOL = {Harvard Graduate School of Arts and Sciences}, + YEAR = {1966}, + type = {PhD thesis}, +} +#http://www.ncstrl.org:8900/ncstrl/servlet/search?formname=detail\&id=oai%3Ancstrlh%3Amitai%3AMIT-LCS%2F%2FMIT%2FLCS%2FTR-35 +#http://www.fenichel.net/ + +@ARTICLE{Fiddes2002, + AUTHOR = {Fiddes, D.~J. and Korabinski, A.~A. and McGuire, G.~R. and Youngson, M.~A. and McMillan, D.}, + TITLE = {Does the mode of delivery affect Mathematics examination results?}, + JOURNAL = {Alt-J}, + YEAR = {2002}, + volume = {10}, + pages = {60--69}, +} + +@INPROCEEDINGS{Filloy2003, + author = {Filloy, E. and Rojano, T. and Solares, A.}, + title = {Two meanings of the equal sign and senses of substitution and comparison methods}, + booktitle = {Proceedings of the 27th {PME}}, + year = {2003}, + volume = {4}, + pages = {223--229}, +} + +@ARTICLE{Fisch1994, + author = {Fisch, M.}, + title = {`The Emergency Which Has Arrived': The Problematic History of Nineteenth-Century British Algebra: A Programmatic Outline}, + journal = {The British Journal for the History of Science}, + year = {1994}, + volume = {27}, + number = {3}, + pages = {247--276}, + month = {September}, +} +# http://www.jstor.org.ezproxy.is.ed.ac.uk/stable/4027598 + +@ARTICLE{Fisch1999, + author = {Fisch, M.}, + title = {The Making of {Peacock's Treatise on Algebra}: A Case of Creative Indecision}, + journal = {Archive for History of Exact Sciences}, + year = {1999}, + volume = {54}, + number = {2}, + pages = {137--179}, + month = {June}, +} + +@ARTICLE{Fisher1988, + AUTHOR = {Fisher, K.~M.}, + TITLE = {The Students-and-Professors Problem Revisited}, + JOURNAL = {Journal for Research in Mathematics Education}, + YEAR = {1988}, + volume = {3}, + number = {19}, + pages = {260--262}, + month = {May}, +} +## Stable URL: http://www.jstor.org/stable/749069 + +@ARTICLE{Fitch1973, + AUTHOR = {Fitch, J.}, + TITLE = {On algebraic simplification}, + JOURNAL = {Computer Journal}, + YEAR = {1973}, + volume = {16}, + number = {1}, + pages = {23--27}, +} + +@UNPUBLISHED{Forbes, + author = {Forbes, G.}, + title = {A Brief Guide to {MacLogic}}, +} +# https://spot.colorado.edu/~forbesg/pdf_files/MacLogic_Guide.pdf + +@ARTICLE{Forster1909, + author = {Forster, E.~M.}, + title = {The Machine Stops}, + journal = {The Oxford and Cambridge Review}, + year = {1909}, + month = {November}, + +} + +@ARTICLE{Foster2012, + AUTHOR = {Foster, B. and Perfect, C. and Youd, A.}, + TITLE = {A completely client-side approach to e-assessment and e-learning of Mathematics and Statistics}, + JOURNAL = {International Journal of {eAssessment}}, + YEAR = {2012}, + volume = {2}, + number = {2}, + pages = {1--12}, +} + +# etudes +@ARTICLE{Foster2013, + author = {Foster, C.}, + title = {Mathematical \'{e}tudes: embedding opportunities for developing procedural fluency within rich mathematical contexts}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2013}, + volume = {55}, + number = {5}, + pages = {765--774}, + doi = {10.1080/0020739X.2013.770089}, +} + +@ARTICLE{Foster2018, + author = {Foster, C.}, + title = {Developing mathematical fluency: comparing exercises and rich tasks}, + journal = {Educational Studies in Mathematics}, + year = {2018}, + doi = {10.1007/s10649-017-9788-x}, +} + +@BOOK{Foucault1972, + author = {Foucault, M.}, + title = {The archaeology of knowledge}, + publisher = {Tavistock}, + year = {1972}, +} +# (901/FOU ) + +@ARTICLE{Frederick2005, + author = {Frederick, S.}, + title = {Cognitive Reflection and Decision Making}, + journal = {Journal of Economic Perspectives}, + year = {2005}, + volume = {19}, + number = {4}, + pages = {25--42}, +} + +@ARTICLE{Freeman2014, + author = {Freeman, S. and Eddy, S.~L. and McDonough, M. and Smith, M.~K. and Okoroafor, N. and Jordt, H. and Wenderoth, M.~P.}, + title = {Active learning increases student performance in science, engineering, and mathematics}, + journal = {Proceedings of the National Academy of Sciences of the United States of America}, + year = {2014}, + volume = {111}, + number = {23}, + pages = {8410--8415}, + doi = {doi: 10.1073/pnas.1319030111}, +} +# www.pnas.org/lookup/suppl/doi:10.1073/pnas.1319030111/-/DCSupplemental. + +@BOOK{Freudenthal1973, + author = {Freudenthal, H.}, + title = {Mathematics as an educational task}, + publisher = {D. Reidel Pub. Co., Dordrecht-Holland}, + year = {1973}, +} + +@TECHREPORT{Friedman1996, + author = {Friedman, D.~E. and Bennett, R.~E. and Katz, I.~R. and Berger, A.~E.}, + title = {Differences in Strategies Used to Solve Stem-Equivalent Constructed-Response and Multiple-Choice SAT-Mathematics Items}, + institution = {The Educational Testing Service}, + year = {1996}, + type = {Research Report}, + number = {96-20}, +} +# http://research.collegeboard.org/publications/content/2012/05/differences-strategies-used-solve-stem-equivalent-constructed-response + +@BOOK{Fridy2000, + author = {Fridy, J.~A.}, + title = {Introductory Analysis: The Theory of the Calculus}, + publisher = {Harcourt}, + year = {2000}, +} + +@TECHREPORT{Furber2012, + AUTHOR = {Furber, S.}, + TITLE = {Shut down or restart? The way forward for computing in {UK} schools}, + INSTITUTION = {The Royal Society}, + YEAR = {2012}, +} +#royal.society.org/education/policy + +@TECHREPORT{Furber2017, + AUTHOR = {Furber, S.}, + TITLE = {After the reboot: computing education in {UK} schools}, + INSTITUTION = {The Royal Society}, + YEAR = {2017}, +} +#royalsociety.org/computing-education + +@INBOOK{Fujimoto2003, + author = {Fujimoto, M. and Suzuki, M.}, + title = {Infty Editor --- A Mathematics Typesetting Tool with a Handwriting Interface and a Graphical Front-end to OpenXM Servers}, + pages = {217--226}, + publisher = {RIMS Kokyuroku}, + year = {2003}, + volume = {1335}, + series = {Computer Algebra -- Algorithms, Implementations and Applications}, +} + +@ARTICLE{Fukawa-connelly2013, + author = {Fukawa-connelly, T.}, + title = {Using Toulmin analysis to analyse an instructor's proof presentation in abstract algebra}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2014}, + volume = {45}, + number = {1}, + pages = {75--88}, + doi = {10.1080/0020739X.2013.790509}, +} + +@Misc{Gageetal2002, + title = "{{WeBWorK}: Generating, delivering, and checking math homework via the {Internet}}", + author = {Gage, M. and Pizer, A. and Roth, V.}, + howpublished = {Proc. ICTM2 international congress for teaching of mathematics at the undergraduate level}, + year = {2002}, + keywords = {MATH EDUC} +} +# http://www.math.uoc.gr/~ictm2/Proceedings/pap189.pdf + +@ARTICLE{Galbraith1998, + author = {Galbraith, P. and Haines, C.}, + title = {Disentangling the Nexus: Attitudes to Mathematics and Technology in a Computer Learning Environment}, + journal = {Educational Studies in Mathematics}, + year = {1998}, + volume = {36}, + number={3}, + doi={10.1023/A:1003198120666}, + pages = {275--290}, + source = {}, +} + +@BOOK{Galbraith2000, + author = {Galbraith, P. and Haines, C.}, + journal = {Educational Studies in Mathematics}, + publisher = {City University, Department of Continuing Education}, + year = {2000}, + series = {Monographs in Continuing Education}, +} + +@ARTICLE{Gallagher1992, + author = {Gallagher, A. and Mandinach, E.}, + title = {Strategy use on Multiple-Choice and Free-Response Items: An Analysis of Sex Differences Among High Scoring Examinees on the {SAT-M}}, + journal = {ETS Research Report Series}, + year = {1992}, + pages = {i--45}, + number = {2}, + issn = {2330-8516}, + doi = {10.1002/j.2333-8504.1992.tb01485.x}, +} + +@BOOK{Ganesalingam2013, + author = {Ganesalingam, M.}, + title = {The Language of Mathematics: A Linguistic and Philosophical Investigation}, + publisher = {Springer}, + year = {2013}, + volume = {7805}, + series = {Lecture Notes in Computer Science}, + address = {London}, + isbn = {978-3-642-37011-3}, +} + +@ARTICLE{Ganesalingam2017, + author = {Ganesalingam, M. and Gowers, T.}, + title = {A Fully Automatic Theorem Prover with Human-Style Output}, + journal = {Journal of Automatic Reasoning}, + year = {2017}, + volume = {58}, + number = {2}, + pages = {253–291}, + doi = {10.1007/s10817-016-9377-1}, +} +#https://arxiv.org/abs/1309.4501 + +@ARTICLE{Gattengo1980, + AUTHOR = {Gattengo, C.}, + title = {The Foundations of Geometry}, + journal = {For the Learning of Mathematics }, + year = {1980}, + volume = {1}, + number = {1}, + pages = {10--16}, +} + +@BOOK{Gattengo1988, + AUTHOR = {Gattengo, C.}, + TITLE = {The Science of Education, Part {2B}: The Awareness of Mathematization}, + PUBLISHER = {Educational Solutions, New York}, + YEAR = {1988}, +} + +@BOOK{Gattengo2010, + AUTHOR = {Gattengo, C.}, + TITLE = {The Common Sense of Teaching Mathematics}, + PUBLISHER = {Educational Solutions, New York}, + YEAR = {2010}, + isbn = {978-0878252206}, +} + +@ARTICLE{Gardiner01, + author = {Gardiner, T.}, + title = {Education or {CAS}tration}, + journal = {Micromath}, + year = {2001}, + pages = {6--8}, + month = {Spring}, +} + +@ARTICLE{Gardiner2006, + AUTHOR = {Gardiner, T.}, + TITLE = {Beyond the Soup Kitchen: Thoughts on revising the Mathematics ``Strategies/Frameworks'' for {England}}, + JOURNAL = {International Journal for Mathematics Teaching and Learning}, + YEAR = {2006}, + month = {May}, + note = {ISSN 1473 - 0111}, + source = {{\tt http://www.cimt.plymouth.ac.uk/journal/gardiner.pdf}}, +} + +@ARTICLE{Gardiner2014, + AUTHOR = {Gardiner, A.~D.}, + TITLE = {Teaching Mathematics at Secondary Level}, + JOURNAL = {The De Morgan Gazette}, + YEAR = {2014}, + number = {1}, + pages = {1--215}, +} +#source = {{\tt http://education.lms.ac.uk/wp-content/uploads/2014/07/DMG_6_no_1_2014.pdf}}, + +@BOOK{Gelbaum, + author = {Gelbaum, B.~R. and Olmsted, J.~M.~H.}, + title = {Counterexamples in analysis}, + publisher = {Holden-Day}, + year = {1964}, +} + +@ARTICLE{Gernsbacher2018, + author = {Gernsbacher, M.~A.}, + title = {Writing Empirical Articles: Transparency, Reproducibility, Clarity, and Memorability}, + journal = {Advances in Methods and Practices in Psychological Science}, + year = {2018}, + volume = {1}, + number = {3}, + pages = {403--414}, + doi = {10.1177/2515245918754485}, +} + +@PHDTHESIS{Gerofsky1999, + AUTHOR = {Gerofsky, S.~G.}, + TITLE = {The Word Problem as Genre in Mathematics Education}, + SCHOOL = {Simon Fraser University}, + YEAR = {1999}, + type = {PhD}, +} +# http://www.collectionscanada.gc.ca/obj/s4/f2/dsk1/tape7/PQDD_0027/NQ51864.pdf + +@INPROCEEDINGS{Gibbs1999, + author = {Gibbs, G.}, + title = {Using assessment strategically to change the way students learn}, + booktitle= {Assessment Matters in Higher Education: choosing and using diverse approaches}, + editors= {Brown, S.~and Glasner, A.}, + pages = {41--53}, + publisher = {Society for Research into Higher Education \& Open University Press}, + year = {1999}, +} + +@ARTICLE{Gibbs2004, + author = {Gibbs, G. and Simpson, C.}, + title = {Conditions Under Which Assessment Supports Students' Learning}, + journal = {Learning and Teaching in Higher Education}, + year = {2004}, + volume= {1}, + pages= {3--32}, +} +# http://www.glos.ac.uk/shareddata/dms/2B70988BBCD42A03949CB4F3CB78A516.pdf + +@article {Girard2013, + author = {Girard, C. and Ecalle, J. and Magnan, A.}, + title = {Serious games as new educational tools: how effective are they? A meta-analysis of recent studies}, + journal = {Journal of Computer Assisted Learning}, + year = {2013}, + volume = {29}, + number = {3}, + pages = {207--219}, + publisher = {Blackwell Publishing Ltd}, + issn = {1365-2729}, + doi = {10.1111/j.1365-2729.2012.00489.x}, + keywords = {engagement, learning effect, serious game, video games}, +} + +@INPROCEEDINGS{Gilbey2018, + author = {Gilbey, J. and Robson, D.}, + title = {The {PRAC} Taxonomy for Formal Mathematical Assessments}, + booktitle = {Proceedings of the 9th British Congress of Mathematics Education}, + year = {2018}, + editor = {Pope, S.}, + address = {University of Warwick, UK}, +} + +@ARTICLE{Gleason2008, + AUTHOR = {Gleason, J.}, + TITLE = {An Evaluation of Mathematics Competitions Using ItemResponse Theory}, + JOURNAL = {Notices of the AMS}, + YEAR = {2008}, + volume = {55}, + number = {1}, + pages = {8--15}, + month = {January}, +} + +@ARTICLE{Godfrey1910, + author = {Godfrey, C.}, + title = {The Teaching of Algebra; What is Educational and What is Technical?}, + journal = {The Mathematical Gazette}, + year = {1910}, + volume = {5}, + number = {85}, + pages = {230--244}, + month = {March}, + doi = {10.2307/3603198} +} + +@ARTICLE{Goel1996, + author = {Goel, S.~K. and Robillard, M.~S.}, + title = {The equation \( -2= (-8)^{\frac{1}{3}} = (-8)^{\frac{2}{6}} = \left[(-8)^2 \right]^{\frac{1}{6}} =2 \) }, + journal = {Educational Studies in Mathematics}, + year = {1996}, + volume = {33}, + pages = {319--320}, +} + +@ARTICLE{Goldberg1991, + author = {Goldberg, D.}, + title = {What Every Computer Scientist Should Know About Floating-Point Arithmetic}, + journal = {Computing Surveys}, + year = {1991}, + volume = {23}, + number = {1}, + pages = {5--48}, + month = {March}, + doi = {10.1145/103162.103163}, +} +# https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html + +@ARTICLE{Good2012, + author = {Good, C. and Rattan, A. and Dweck, C.~S.}, + title = {Why Do Women Opt Out? Sense of Belonging and Women’s Representation in Mathematics}, + journal = {Journal of Personality and Social Psychology}, + year = {2012}, + volume = {102}, + number = {4}, + pages = {700--717}, +} + +@ARTICLE{Goodwin2009, + author = {Goodwin, K.~S. and Ostrom, L. and Scott, K.~W.}, + title = {Gender Differences in Mathematics Self-Efficacy and Back Substitution in Multiple-Choice Assessment }, + journal = {Journal of Adult Education}, + year = {2009}, + volume = {38}, + number = {1}, + pages = {22--42}, +} +# http://search.proquest.com.ezproxy.is.ed.ac.uk/docview/204583835?accountid=10673 + +@ARTICLE{Goos2013, + author = {Goos, M.}, + title = {Knowledge for teaching secondary school mathematics: what counts?}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2013}, + volume = {44}, + number = {7}, + pages = {972--983}, + doi = {10.1080/0020739X.2013.826387}, +} + + +@BOOK{Gold1999, + editor = {Gold, B. and Keith, S.~Z. and Marion, W.~A.}, + title = {Assessment Practices in Undergraduate Education}, + publisher = {Mathematical Association of America}, + year = {1999}, + volume = {49}, + series = {MAA Notes}, +} + +@ARTICLE{Goulding1994, + author = {Goulding, M.}, + title = {Computers in Mathematics Education: A revolution in the making?}, + journal = {British Journal of Educational Technology}, + year = {1994}, + volume = {25}, + number = {2}, + pages = {98--107}, + month = {May}, + doi = {10.1111/j.1467-8535.1994.tb00095.x}, +} + +# Madeleine Goutard +@BOOK{Goutard1974, + author = {Goutard, M.}, + title = {Experiences with numbers in color}, + publisher = {Cuisenaire Co. of America}, + year = {1974}, + isbn = {978-0914040712}, +} + +@ARTICLE{Grabe1999, + AUTHOR = {Gr\"{a}be, H.~G.}, + TITLE = {Algebraic Numbers in Symbolic Computations}, + JOURNAL = {International Journal of Computer Algebra in Mathematics Education}, + YEAR = {1999}, + volume = {6}, + pages = {65--84}, +} + +@BOOK{Grabmeier2003, + author = {Grabmeier, J. and Kaltofen, E. and Weispfenning, V.}, + title = {Computer Algebra Handbook}, + publisher = {Springer}, + year = {2003}, +} + +@ARTICLE{Gravesen2016, + author = {Gravesen, K. and Gr{\o}nb{\ae}k, N. and Winslow, C.}, + title = {Task design for students' work with basic theory in analysis: the cases of multidimensional differentiability and curve integrals}, + journal = {International Journal for Research in Undergraduate Mathematics Education}, + year = {2016}, + doi = {10.1007/s40753-016-0036-z}, +} + +@ARTICLE{GrayTall94, + author = {Gray, E.~M. and Tall, D.~O.}, + title = {Duality, Ambiguity and Flexibility: A Proceptual View of Simple Arithmetic}, + journal = JRME, + year = {1994}, + volume = {26}, + number = {2}, + pages = {115-141}, +} + +@ARTICLE{GreenhowGill2007, + AUTHOR = {Greenhow, M. and Gill, M.}, + TITLE = {Computer-Aided Assessment in Mechanics: question design and test evaluation}, + JOURNAL = TMA, + YEAR = {2007}, + volume = {26}, + number = {3}, + pages = {124--133}, + note = {10.1093/teamat/hrm006}, +} + +@ARTICLE{Gries1995, + author = {Gries, D. and Schneider, F.~B.}, + title = {Teaching Math More Effectively, Through Calculational Proofs}, + journal = {The American Mathematical Monthly}, + year = {1995}, + volume = {102}, + number = {8}, + pages = {691--697}, + month = {Oct}, + doi = {10.2307/2974638}, +} + +@ARTICLE{Griffen03, + author = {Griffin, F. and Moore, R.}, + title = {MacQ{\TeX} Randomised Quiz System}, + journal = {Proceedings of the Apple University Consortium Conference, University of Adelaide, 28 September -- 1 October}, + year = {2003}, +} + +@article{Greiffenhagen2014, + author = {Greiffenhagen, C.}, + title = {The materiality of mathematics: Presenting mathematics at the blackboard}, + journal = {The British Journal of Sociology}, + year = {2014}, + volume = {65}, + number = {3}, + issn = {1468--4446}, + doi = {10.1111/1468-4446.12037}, + pages = {502--528}, +} + +@article{Griggs1982, + Title = {The elusive thematic-materials effect in {W}ason's selection task}, + Author = {Griggs,~R.~A. and Cox,~J.~R.}, + Journal = {British Journal of Psychology}, + Volume = {73}, + Issue = {3}, + Pages = {407--420}, + Year = {1982}, + Publisher = {Psychology Press} +} + +@INPROCEEDINGS{Gruttmann2008a, + AUTHOR = {Gruttmann, S. and B\"ohm, D. and Kuchen, H.}, + TITLE = {An E-Assessment System for Mathematical Proofs}, + BOOKTITLE = {Proceedings of the IASTED International Conference on Computer and Advanced Technology in Education}, + YEAR = {2008}, + pages = {120--125}, + publisher = {ACTA Press}, +} + +@INPROCEEDINGS{Gruttmann2008b, + AUTHOR = {Gruttmann, S. and B\"ohm, D. and Kuchen, H.}, + TITLE = {E-Assessment of Mathematical Proofs -- Chances and Challenges for Students and Tutors}, + BOOKTITLE = {Proceedings of the 2008 International Conference on Computer Science and Software Engineering}, + YEAR = {2008}, + pages = {612--615}, + organization = {IEEE Computer Society}, +} + +@BOOK{Guin2005, + AUTHOR = {Guin, D. and Ruthven, K. and Trouche, L.}, + TITLE = {The Didactical Challenge of Symbolic Calculators: Turning a Computational Device into a Mathematical Instrument}, + PUBLISHER = {Springer}, + address = {New York, USA}, + YEAR = {2005}, + volume = {36}, + series = {Mathematics Education Library}, +} + +@article{Gutierrez2013, + Title = {The Sociopolitical Turn in Mathematics Education}, + Author = {Guti\'{e}rrez, R.}, + Journal = {Journal for Research in Mathematics Education}, + Volume = {44}, + Issue = {1}, + Pages = {37--68}, + Year = {2013} +} + +@INBOOK{Fennema1992, + author = {Fennema, E. and Franke, M.~L.}, + editor = {Grouws, D.~A.}, + title = {Handbook of research on mathematics teaching and learning}, + chapter = {Teachers' knowledge and its impact}, + pages = {147--164}, + publisher = {Macmillan}, + year = {1992}, +} + +@article{Hake1998, + author = "Hake, R.~R.", + title = "Interactive-engagement versus traditional methods: A six-thousand-student survey of mechanics test data for introductory physics courses", + journal = "American Journal of Physics", + year = "1998", + volume = "66", + number = "1", + pages = "64--74", + url = "http://scitation.aip.org/content/aapt/journal/ajp/66/1/10.1119/1.18809", + doi = "10.1119/1.18809" +} + + +@ARTICLE{Haladyna2002, + author = {Haladyna, T.~M. and Downing, S.~M. and Rodriguez, M.~C.}, + title = {A Review of Multiple-Choice Item-Writing Guidelines for Classroom Assessment}, + journal = {Applied Measurement in Education}, + year = {2002}, + volume = {15}, + number = {3}, + pages = {309--334}, +} + + +@BOOK{Hall1929, + author = {Hall, H.~S.}, + title = {A School Algebra}, + publisher = {MacMillian, London}, + year = {1929}, + edition = {11th printing}, + note = {First published 1912}, +} + +@BOOK{Hall1962, + author = {Hall, H.~S. and Knight, S.~R.}, + title = {Elementary Algebra for Schools, Containing a full treatment of graphs}, + publisher = {MacMillian, London}, + year = {1962}, + edition = {6th}, + note = {First published 1885}, +} + +@BOOK{Hall1896, + author = {Hall, H.~S. and Knight, S.~R.}, + title = {Higher Algebra: a Sequel to Elementary Algebra for Schools}, + publisher = {MacMillian, London}, + year = {1896}, + edition = {4th}, + note = {First published 1887}, +} + +@ARTICLE{Halloun1985, + author = {Halloun, I.~A. and Hestenes, D.}, + title = {Common sense concepts about motion}, + journal = {American Journal of Physics}, + year = {1985}, + volume = {53}, + pages = {1043-­1055}, +} + +@ARTICLE{Hancock1994, + author = {Hancock, G.~R.}, + title = {Cognitive Complexity and the Comparability of Multiple-Choice and Constructed-Response Test Formats}, + journal = {The Journal of Experimental Education}, + year = {1994}, + volume = {62}, + number = {4}, + pages = {143--157}, + doi = {10.1080/00220973.1994.9943836}, +} + +@article{Handa2012, + author = {Handa, Y.}, + title = {Teasing out repetition from rote: an essay on two versions of will}, + pages = {263--272}, + year = {2012}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {79}, + number = {2}, + doi = {10.1007/s10649-011-9343-0}, + url = {10.1007/s10649-011-9343-0}, + publisher = {Springer Netherlands}, + keywords = {Repetition; Rote; Mathematics learning; Will; Grace; Persistence; Productive disposition}, + language = {English} +} + +@article{Hanna2000, + author = {Hanna, G.}, + title = {Proof, Explanation and Exploration: An Overview}, + pages = {5--23}, + year = {2000}, + journal = {Educational Studies in Mathematics}, + volume = {44}, + doi = {10.1023/A:1012737223465}, +} + + +@MISC{Hansard2003, + author = {Hansard}, + howpublished = {United Kingdom House of Commons}, + year = {2003}, + note = {26 June 2003, Columns 1259--1269}, +} + +@ARTICLE{Hanson2009, + author = {Hanson, J.}, + title = {Displaced but not replaced: the impact of e-learning on academic identities in higher education}, + journal = {Teaching in Higher Education}, + year = {2009}, + volume = {14}, + number = {5}, + pages = {553-564}, + doi = {10.1080/13562510903186774}, +} + +@ARTICLE{Harding1996, + AUTHOR = {Harding, R. and Quiney, D.}, + TITLE = {Mathwise and the {UKMCC}}, + JOURNAL = {Active Learning}, + YEAR = {1996}, + volume = {4}, + pages = {53--57}, +} + +@INBOOK{Harel2007, + author = {Harel, G. and Sowder, L.}, + title = {Second handbook of research on mathematics teaching and learning}, + chapter = {Towards comprehensive perspectives on the learning and teaching of proof}, + pages = {805--842}, + publisher = {National Council of Teachers of Mathematics}, + year = {2007}, +} +# See also Kanellos2018 + +@MASTERSTHESIS{Harjula2008, + AUTHOR = {Harjula, M.}, + TITLE = {Mathematics exercise system with automatic assessment}, + SCHOOL = {Helsinki University of Technology}, + YEAR = {2008}, +} +#http://intmath.org/home/aharjula/ + +@ARTICLE{Harjula2017, + AUTHOR = {Harjula, M. and Malinen, J. and Rasila, A.}, + TITLE = {STACK with state}, + JOURNAL = {MSOR Connections}, + YEAR = {2017}, + volume = {15}, + number = {2}, + pages = {60--69}, + doi = {10.21100/msor.v15i2.408}, +} + +@BOOK{Harper1991, + AUTHOR = {Harper, D. and Wooff, C. and Hodgkinson, D.}, + TITLE = {A guide to computer algebra systems}, + PUBLISHER = {Wiley}, + YEAR = {1991}, +} + +@BOOK{Hart1988, + author = {Hart, M.}, + title = {Guide to Analysis}, + publisher = {MacMillian Press Ltd}, + year = {1988}, +} + +@TECHREPORT{Hart1980, + author = {Hart, K. and Johnson, D.}, + title = {Secondary school children's understanding of mathematics : A report of the mathematics component of the Concepts in Secondary Mathematics and Science Programme}, + institution = {Centre for Science Education}, + year = {1980}, + address = {University of London, London}, +} + +@ARTICLE{Hassmen1994, + author = {Hassm\'{e}n, P. and Hunt, D.~P.}, + title = {Human self-assessment in multiple choice}, + journal = {Journal of Educational Measurement}, + year = {1994}, + volume = {31}, + number = {2}, + pages = {149--160}, +} +# http://www.jstor.org/stable/1435174 + +@ARTICLE{Hatherly2009, + author = {Hatherly, P.~A. and Jordan, S.~E. and Cayless, A.}, + title = {Interactive screen experiments: innovative virtual laboratories for distance learners.}, + journal = {European Journal of Physics}, + year = {2009}, + volume = {30}, + number = {4}, + pages = {751--762}, + doi = {10.1088/0143-0807/30/4/008}, +} + +@INPROCEEDINGS{Havola2010, + AUTHOR = {Havola, L.}, + TITLE = {Improving the teaching of engineering mathematics: a research plan and work in-process report}, + BOOKTITLE = {In proceedings of the Joint International IGIP-SEFI Annual Conference 2010, Trnava, Slovakia}, + YEAR = {2010}, +} + +@INBOOK{Havola2011, + AUTHOR = {Havola, L.}, + editor = {Silfverberg, H. and Joutsenlahti, J.}, + TITLE = {Tutkimus suuntaamassa 2010-luvun matemaattisten aineiden opetusta}, + CHAPTER = {New engineering students' learning styles and basic skills in mathematics}, + pages = {118--131}, + PUBLISHER = {Tampereen yliopistopaino Oy - Juvenes Print}, + YEAR = {2011}, +} + +@TECHREPORT{Hawkes2000, + AUTHOR = {Hawkes, T. and Savage, M.}, + TITLE = {Measuring the Mathematics Problem}, + INSTITUTION = {The Engineering Council}, + YEAR = {2000}, +} +# http://www.engc.org.uk/ecukdocuments/internet/document%20library/Measuring%20the%20Mathematic%20Problems.pdf + +@ARTICLE{Hayes2009, + AUTHOR = {Hayes, B.}, + TITLE = {Writing Math on the Web}, + JOURNAL = {American Scientist}, + YEAR = {2009}, + volume = {97}, + number = {2}, + pages = {98--102}, + month = {March}, + doi = {10.1511/2009.77.98}, +} + +@ARTICLE{Haytock1990, + author = {Haytock, B.~D. and Zaven, A.}, + title = {Teaching Computer Science Within Mathematics Departments}, + journal = {Computer Science Education}, + volume = {1}, + number = {3}, + pages = {181-203}, + year = {1990}, + doi = {10.1080/0899340900010302}, +} + +@ARTICLE{Healy98, + author = {Healy, L. and Hoyles, C.}, + title = {A Study of Proof Conceptions in Algebra}, + journal = JRME, + year = {1998}, + volume = {31}, + number = {4}, + pages = {396--428}, + note = {http://www-didactique.imag.fr/preuve/Resumes/Healy/Healy98.html}, +} + +@ARTICLE{Healy2010, + AUTHOR = {Healey, L. and Kynigos, C.}, + TITLE = {Charting the microworld territory over time: design and construction in mathematics education}, + JOURNAL = {ZDM: The International Journal of Mathematics Education}, + YEAR = {2010}, + volume = {42}, + number = {1}, + pages = {63--76}, + month = {November}, +} +# http://link.springer.com/journal/11858/42/1/page/1 + +@BOOK{Heck2003, + author = {Heck, A.}, + title = {Introduction to Maple}, + publisher = {Springer-Verlag}, + year = {2003}, + edition = {3rd}, +} + +@PHDTHESIS{Heck2012, + AUTHOR = {Heck, A.~J.~P.}, + TITLE = {Perspectives on an Integrated Computer Learning Environment}, + SCHOOL = {University of Amsterdam}, + YEAR = {2012}, +} + +@article{Heeren2014, + title = {Feedback services for stepwise exercises}, + author = {Heeren, B. and Jeuring, J.}, + journal = {Science of Computer Programming}, + volume = {88}, + number = {1}, + pages = {110--129}, + year = {2014}, + doi = {10.1016/j.scico.2014.02.021} +} + + +@article{Heeren2010, + title = {Specifying rewrite strategies for interactive exercises}, + author = {Heeren, B. and Jeuring, J. and Gerdes, A.}, + journal = {Mathematics in computer science}, + volume = {3}, + number = {3}, + pages = {349--370}, + year = {2010}, + publisher={Springer}, + doi = {10.1007/s11786-010-0027-4}, +} + + +@INPROCEEDINGS{Heeren2009, + AUTHOR = {Heeren, B. and Jeuring, J.}, + TITLE = {Canonical Forms in Interactive Exercise Assistants}, + booktitle = {Intelligent Computer Mathematics: Proceedings of the 8th International Conference on Mathematical Knowledge Management}, + volume = {5625}, + month = {July}, + year = {2009}, + pages = {325--340}, + editor = {Carette, Jacques and Dixon, Lucas and Sacerdoti Coen, Claudio and Watt, Stephen M.}, + publisher = {Springer-Verlag} +} +# http://people.cs.uu.nl/bastiaan/CanonicalForms.html + +@INPROCEEDINGS{Heeren2018, + AUTHOR = {Heeren, B. and Jeuring, J. and Sosnovsky, S. and Drijvers, P. and Boon, P. and Tacoma, S. and Koops, J. and Weinberger, A. and Grugeon-Allys, B. and Chenevotot-Quentin, F. and van Wijk, J. and van Walree, F.}, + TITLE = {Fine-grained Cognitive Assessment based on Free-form Input for Math Story Problems}, + booktitle = {Lifelong Technology-Enhanced Learning - 13th European Conference on + Technology Enhanced Learning, {EC-TEL} 2018, Leeds, UK, September + 3-5, 2018, Proceedings}, + pages = {262--276}, + year = {2018}, + crossref = {DBLP:conf/ectel/2018}, + url = {https://doi.org/10.1007/978-3-319-98572-5\_20}, + doi = {10.1007/978-3-319-98572-5\_20}, +} + +@ARTICLE{Hehner2004, + author = {Hehner, C.~R.}, + title = {from {B}oolean Algebra to Unified Algebra}, + journal = {The Mathematical Intelligencer}, + year = {2004}, + volume = {26}, + number = {2}, + pages = {3--19}, +} + +@ARTICLE{Hehner2007, + author = {Hehner, C.~R.}, + title = {Unified Algebra}, + journal = {International Journal of Mathematical Sciences}, + year = {2007}, + volume = {1}, + number = {1}, + pages = {20--37}, +} + + +@PHDTHESIS{Heller1940, + author = {Heller, H.~F.}, + title = {Concerning the Evolution of the Topic of Factoring in Textbooks of Elementary Algebra Published in {England} and the {United States} from 1631 to 1890}, + school = {Columbia University}, + year = {1940}, + type = {PhD}, +} + +@INPROCEEDINGS{Helminen2013, + author = {Helminen, J. and Ihantola, P. and Karavirta, V.}, + title = {Recording and Analyzing In-Browser Programming Sessions}, + booktitle = {Proceedings of 13th Koli Calling International Conference on Computing Education Research}, + year = {2013}, + series = {Koli Calling '13}, + isbn = {978-1-4503-2482-3}, + location = {Koli, Finland}, + pages = {13--22}, + doi = {10.1145/2526968.2526970}, + publisher = {ACM}, + address = {New York, NY, USA}, + keywords = {Python, computer science education, computing education research, programming assignment, programming session, web based programming environment}, +} +# http://www.cs.joensuu.fi/kolistelut/ + +@ARTICLE{Hendrix1961, + AUTHOR = {Hendrix, G.}, + TITLE = {Learning by discovery}, + JOURNAL = {The Mathematics Teacher}, + YEAR = {1961}, + volume = {54}, + pages = {290--299}, + month = {May}, +} + +@ARTICLE{Herbst1997, + AUTHOR = {Herbst, P.}, + TITLE = {The number-line metaphore in the discourse of a textbook series}, + JOURNAL = {For the learning of mathematics}, + YEAR = {1997}, + volume = {17}, + number = {3}, + pages = {36--45}, +} +# http://www.jstor.org/stable/40248251 + +@article{Herbst2002, + author = {Herbst, P.~G.}, + title = {Establishing a custom of proving in American school geometry: evolution of the two-column proof in the early twentieth century}, + pages = {283--312}, + year = {2002}, + journal = {Educational Studies in Mathematics}, + volume = {49}, + number = {3}, + doi = {10.1023/A:102026490}, +} + +@INPROCEEDINGS{Herding2011, + AUTHOR = {Herding, D. and Schroeder, U.}, + TITLE = {Using Capture \& Replay for Semi-automatic Assessment}, + BOOKTITLE = {Proceedings of CAA 2011}, + YEAR = {2011}, +} + +@UNPUBLISHED{Herget00, + author = {Herget, W. and Heugl, H. and Kutzler, B. and Lehmann, E.}, + title = {Indispensable Manual Calculation Skills in a {CAS} Environment}, + note = {{\tt www.kutzler.com}}, + year = {2000}, +} + + +@INPROCEEDINGS{Hermans02, + author = {Hermans, D.~F.~M.}, + title = {Embedding intelligent web based assessment in a mathematical learning environment}, + booktitle= {Proceedings of the International Symposium on Symbolic and Algebraic Computation (ISSAC2002), Internet Accessible Mathematical Computation 2002 workshop, Lille}, + year = {2002}, + month= {July} +} + +@ARTICLE{Hersee1975, + AUTHOR = "Hersee, J.", + TITLE = "Notation and language in school mathematics (Teaching Committee interim statement)", + JOURNAL = GAZ, + YEAR = "1975", + volume = "59", + number = "407", + pages = "2--7", + month = "March", +} + +@ARTICLE{Hersee1977, + AUTHOR = "Hersee, J.", + TITLE = "Notation and language in school mathematics", + JOURNAL = GAZ, + YEAR = "1977", + volume = "61", + number = "418", + pages = "241--247", + month = "December", +} + +@ARTICLE{Hestenes1992, + author = {Hestenes, D. and Wells, M. and Swackhamer, G.}, + title = {Force Concept Inventory}, + journal = {The Physics Teacher}, + year = {1992}, + volume = {30}, + pages = {141--158}, +} + + +@ARTICLE{Hewitt1996, + author = {Hewitt, D.}, + title = {Mathematical fluency: the nature of practice and the role of subordination}, + journal = {For the learning of mathematics}, + year = {1996}, + volume = {16}, + number = {2}, + pages = {28--35}, +} + +@ARTICLE{Hewitt1998, + author = {Hewitt, D.}, + title = {Approaching Arithmetic Algebraically}, + journal = {Mathematics Teaching}, + year = {1998}, + volume = {163}, + pages = {19--29}, +} + +@ARTICLE{Hill98, + author = {Hill, K.}, + title = {`Juglers or Schollers?': negotiating the role of a mathematical practitioner}, + journal = {British Journal for the History of Science}, + year = {1998}, + volume = {31}, + pages = {253-274}, +} + +@ARTICLE{Hieb2014, + author = {Hieb, J.~K. and Lyle, K.~B. and Ralston, P.~A.~S. and Chariker, J.}, + title = {Predicting performance in a first engineering calculus course: implications for interventions}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2014}, + doi = {10.1080/0020739X.2014.936976}, +} + +@article{Hmelo2007, + title = {Scaffolding and achievement in problem-based and inquiry learning: A response to {Kirschner, Sweller, and Clark} (2006)}, + author = {Hmelo-Silver, C.E. and Duncan, R.G. and Chinn, C.A.}, + journal = {Educational Psychologist}, + volume = {42}, + number = {2}, + pages = {99--107}, + year = {2007}, +} + +@BOOK{Hodgen2010, + author = {Hodgen, J. and Wiliam, D.}, + title = {Mathematics Inside the Black Box: Assessment for Learning in the Mathematics Classroom}, + publisher = {Gl Assessment}, + isbn = {780708713815}, + year = {2006}, +} + +@ARTICLE{Hodgen2010, + author = {Hodgen, J. and K\"{u}chemann, D. and Brown, M.}, + title = {Textbooks for the teaching of algebra in lower secondary school: are they informed by research?}, + journal = {Pedagogies: An International Journal}, + year = {2010}, + volume = {5}, + number = {3}, + pages = {187--201}, + doi = {10.1080/1554480X.2010.486154}, +} + +@TECHREPORT{Hodgen2018, + author = {Hodgen, J. and Foster, C. and Marks, R. and Brown, M.}, + title = {Improving Mathematics in Key Stages Two and Three: Evidence Review}, + institution = {Education Endowment Foundation}, + year = {2018}, + type = {Evidence for Review of Mathematics Teaching}, + address = {London, UK}, +} +# https://educationendowmentfoundation.org.uk/evidence-summaries/evidence-reviews/improving-mathematics-in-key-stages-two-and-three/ + +@ARTICLE{Hodges2009, + author = {Hodges, C.~B. and Murphy, P.~F.}, + title = {Sources of self-efficacy beliefs of students in a technology-intensive asynchronous college algebra course}, + journal = {Internet and Higher Education}, + year = {2009}, + volume = {12}, + number = {2}, + month = {June}, + pages = {93--97}, + doi = {10.1016/j.iheduc.2009.06.005}, +} + +@ARTICLE{Hodds2014, + author = {Hodds, M. and Alcock, L. and Inglis, M.}, + title = {Self-Explanation Training Improves Proof Comprehension}, + journal = {Journal for Research in Mathematics Education}, + year = {2014}, + volume = {45}, + number = {1}, + pages = {62--101}, + doi = {10.5951/jresematheduc.45.1.0062}, +} + +@BOOK{Hoffmann1962, + AUTHOR = {Hoffmann, B.}, + TITLE = {The tyranny of testing}, + PUBLISHER = {Crowell-Collier}, + YEAR = {1962}, +} + + +@BOOK{Hogan, + author = {Hogan, P. and Humble, C. and Job, B. and McGill, F.}, + title = {Key Skills {GCSE} Higher Revision Book}, + publisher = {Nelson Thornes}, + year = {2001}, + note = {07487 3396-5}, +} + +@ARTICLE{Hollingsworth1960, + AUTHOR = {Hollingsworth, J.}, + TITLE = {Automatic graders for programming classes}, + JOURNAL = {Communications of the ACM}, + YEAR = {1960}, + volume = {3}, + number = {10}, + pages = {528-529}, + doi = {10.1145/367415.367422}, +} + +@ARTICLE{Holmes2017, + author = {Holmes, N.~G. and Olsen, J. and Thomas, J.~L. and Wieman, C.~E.}, + title = {Value added or misattributed? A multi-institution study on the educational benefit of labs for reinforcing physics content}, + journal = {Physical Review Physics Education Research}, + year = {2017}, + volume = {13}, + number = {1}, + pages = {1--12}, + doi = {10.1103/PhysRevPhysEducRes.13.010129}, +} + +@BOOK{Howson1986, + editor = {Howson, A.~G. and Kahane, J.-P.}, + TITLE = {The Influence of Computers and Informatics on Mathematics and its Teaching}, + PUBLISHER = {Cambridge University Press}, + address = {Cambridge, UK}, + YEAR = {1986}, + volume = {1}, + series = {ICMI Study Series}, +} + +@BOOK{Howson1981, + author = {Howson, G. and Keitel, C. and Kilpatrick, J.}, + title = {Curriculum Development in Mathematics}, + publisher = {Calbridge University Press}, + year = {1981}, +} + +@BOOK{Howson2008, + AUTHOR = {Howson, G.}, + TITLE = {A History of Mathematics Education in {England}}, + PUBLISHER = {Cambridge University Press}, + YEAR = {2008}, +} + +@ARTICLE{Howson2013, + AUTHOR = {Howson, G.}, + TITLE = {The development of mathematics textbooks: historical reflections from a personal perspective}, + YEAR = {2013}, + journal = {ZDM Mathematics Education }, + volume = {45}, + pages = {647--658}, + doi = {10.1007/s11858-013-0511-9}, +} + +@ARTICLE{Hu2013, + author = {Hu, S. and Harris, C.}, + title = {A meta-analysis of the effectiveness of intelligent tutoring systems on K–12 students' mathematical learning}, + journal = {Journal of Educational Psychology}, + year = {2013}, + volume = {105}, + number = {4}, + pages = {970--987}, + doi = {10.1037/a0032447}, +} + +@BOOK{Hughes-Hallett1994, + author = {Hughes-Hallett, D. and Gleason, A.~M. and Flath, D.~E. and Gordon, S.~P. and Lomen, D.~O. and Lovecock, D. and McCallum, W.~G. and Osgood, B.~G. and Pasquale, A. and Tecosky-Feldman, J. and Thrash, J.~B. and Thrash, K.~R. and Tucker. T.~W.}, + title = {Calculus}, + publisher = {John Wiley and Sons}, + year = {1994}, + address = {New York, USA}, +} + + +@INPROCEEDINGS{Hunt2012, + AUTHOR = {Hunt, T.~J.}, + TITLE = {Computer-Marked Assessment in {Moodle}: Past, Present and Future}, + BOOKTITLE = {In Proceedings of CAA 2012 International Conference, Southampton}, + YEAR = {2012}, +} +#http://caaconference.co.uk/proceedings/ + +@ARTICLE{Huntley2009, + author = {Huntley, B. and Englebrecht, J. and Harding, A.}, + title = {Can Multiple Choice Questions be Successfully Used as an Assessment Format in Undergraduate Mathematics?}, + journal = {Pythagoras}, + year = {2009}, + volume = {69}, + pages = {3--16}, +} + + +@MISC{ICMI17DD2005, + author = {Hoyles, C. and Lagrange, J.~B.}, + title = {The Seventeenth {ICMI} Study ``Technology Revisited'': Discussion document}, + howpublished = {http://www.mat.msu.edu/nathsinc/ICMI/}, + year = {2005}, +} + +@BOOK{Halmos1998, + author = {Halmos, P. and Givant, S.}, + title = {Logic as Algebra}, + publisher = {The Mathematical Association of America}, + year = {1998}, + volume = {21}, + series = {Dolciani Mathematical Expositions}, +} +# See http://www.jstor.org/stable/2586672?seq=1#page_scan_tab_contents + +@techreport{Hardy2016, + author = {Hardy, J. and Galloway, R. and Rhind, S. and McBride, K.}, + institution = {University of Edinburgh}, + title = {Ask, answer, assess. Peer learning from student-generated content}, + year = {2016}, + url = {https://www.heacademy.ac.uk/sites/default/files/ask{\_}answer{\_}assess{\_}1.pdf}, +} + +@ARTICLE{Hatti2007, + author = {Hattie, J. and Timperley, H.}, + title = {The Power of Feedback}, + journal = {Review of Educational Research}, + year = {2007}, + volume = {77}, + number = {1}, + pages = {81--112}, + doi = {10.3102/003465430298487}, +} + +@book{Hattie2012, + author = {Hattie, J.}, + title = {Visible learning for teachers maximizing impact on learning}, + year = {2012}, + publisher = {Routledge}, + address = {Oxford, UK}, + isbn = {9780203181522}, +} + +@ARTICLE{Herman2014, + author = {Herman, G.~L. and Zilles, C. and Loui, M.~C.}, + title = {A psychometric evaluation of the digital logic concept inventory}, + journal = {Computer Science Education}, + year = {2014}, + volume = {24}, + number = {4}, + pages = {277--303}, + doi = {10.1080/08993408.2014.970781}, +} + +@ARTICLE{Hoeven2015, + author = {van der Hoeven, J.}, + title = {Towards semantic mathematical editing}, + journal = {Journal of Symbolic Computation}, + year = {2015}, + volume = {71}, + pages = {1--46}, + doi = {10.1016/j.jsc.2014.09.040}, +} + +@article{Hopkins2016, + author = {Hopkins, R.~F. and Lyle, K.~B. and Hieb, J.~L. and Ralston, P.~A.~S.}, + title = {Spaced Retrieval Practice Increases College Students' Short- and Long-Term Retention of Mathematics Knowledge}, + journal = {Educational Psychology Review}, + number = {4}, + volume = {28}, + year = {2016}, + doi = {10.1007/s10648-015-9349-8}, +} + +@BOOK{Hoyles2010, + editor = {Hoyles, C. and Lagrange, J.}, + title = {Mathematics Education and Technology -- Rethinking the Terrain}, + publisher = {Springer}, + year = {2010}, + volume = {17}, + series = {ICMI Study}, + address = {New York, Dordrecht, Heidelberg, London}, +} + +@BOOK{Hubbard, + author = {Hubbard, R.}, + title = {53 Ways to ask questions in mathematics and statistics}, + publisher = {Technical and Educational Services Ltd.}, + year = {1995}, + series = {Interesting Ways to Teach}, +} + +@BOOK{Hubbard1955, + AUTHOR = {Hubbard, G.~L.}, + TITLE = {Developing Technique in Geometry}, + PUBLISHER = {Academy Press, 127 George St., Brisbane}, + YEAR = {1955}, + edition = {2nd}, +} + +@BOOK{Hutton1836, + author = {Hutton, C.}, + title = {A Course of Mathematics: In Two Volumes: Composed for the Use of the Royal Military Academy}, + publisher = {Longman, Rees and Co.}, + address = {London}, + year = {1836}, + edition = {11th}, +} + +@BOOK{Iannone2012, + author = {Iannone, P. and Simpson, A.}, + title = {Mapping University Mathematics Assessment Practices}, + publisher = {University of East Anglia}, + address = {Norwick, UK}, + year = {2012}, + isbn = {978-1-870284-01-1}, +} +# http://mathstore.ac.uk/headocs/MU-MAP_0.pdf + +@ARTICLE{Iannone2005, + author = {Iannone, P. and Nardi, E.}, + title = {On the pedagogical insight of mathematicians: `Interaction' and `transition from the concrete to the abstract'}, + journal = {Journal of Mathematical Behavior}, + year = {2005}, + volume = {25}, + pages = {191--215}, +} + +@ARTICLE{Iannone2011, + author = {Iannone, P. and Inglis, M. and Mejia-Ramos, J.~P. and Simpson, A. and Weber, K.}, + title = {Does generating examples aid proof production?}, + journal = {Educational Studies in Mathematics}, + year = {2011}, + volume = {77}, + pages = {1--14}, +} + +@inproceedings{IglesiasI06, + author = {Iglesias, A. and Ipanaqu{\'e}, R.}, + title = {Extending Maple Capabilities for Solving and Displaying Inequalities}, + booktitle = {International Conference on Computational Science (2)}, + year = {2006}, + pages = {383--390}, + ee = {10.1007/11758525_52}, +} + +@inproceedings{Ihantola2010, + author = {Ihantola, P. and Ahoniemi, T. and Karavirta, V. and Sepp\"{a}l\"{a}, O.}, + title = {Review of Recent Systems for Automatic Assessment of Programming Assignments}, + booktitle = {Proceedings of the 10th Koli Calling International Conference on Computing Education Research}, + series = {Koli Calling '10}, + year = {2010}, + isbn = {978-1-4503-0520-4}, + location = {Koli, Finland}, + pages = {86--93}, + numpages = {8}, + doi = {10.1145/1930464.1930480}, + acmid = {1930480}, + publisher = {ACM}, + address = {New York, NY, USA}, +} + + +@BOOK{Illich1971, + AUTHOR = {Illich, I.}, + TITLE = {Deschooling society}, + PUBLISHER = {Richmond Calder Publications Limited}, + YEAR = {1971}, +} +# http://www.ted.com/talks/lang/eng/sugata_mitra_the_child_driven_education.html + +@MISC{IMSQTI, + author = {{IMS} Global Learning Consortium}, + title = {{IMS} Question \& Test Interoperability Specification}, + howpublished = {{\tt http://www.imsglobal.org/question/}}, + year = {2004} +} + +@INPROCEEDINGS{Inglis2004, + AUTHOR = {Inglis, M. and Simpson, A.}, + TITLE = {Mathematicians and the Selection Task}, + BOOKTITLE = {Proceedings of the 28th Conference of the International Group for the Psychology of Mathematics Education}, + YEAR = {2004}, + volume = {3}, + pages = {89--96}, +} + +@ARTICLE{Inglis2007, + AUTHOR = {Inglis, M. and Mejia-Ramos, J.~P. and Simpson, A.}, + TITLE = {Modelling mathematical argumentation: the importance of qualification}, + JOURNAL = {Educational Studies in Mathematics}, + YEAR = {2007}, + volume = {66}, + pages = {3--21}, + doi = {10.1007/s10649-006-9059-8}, +} + +@ARTICLE{Inglis2012, + AUTHOR = {Inglis, M. and Alcock, L.}, + TITLE = {Expert and novice approaches to reading mathematical proofs}, + JOURNAL = {Journal for Research in Mathematics Education}, + YEAR = {2012}, + volume = {43}, + pages = {358--390}, +} + +@BOOK{Inglis2017, + author = {Inglis, M. and Attridge, N.}, + title = {Does Mathematical Study Develop Logical Thinking?: Testing the Theory of Formal Discipline}, + publisher = {World Scientific Publishing Company}, + address = {London}, + year = {2017}, + isbn = {978-1786340689}, +} + +@ARTICLE{Inglis2018, + author = {Inglis, M. and Foster, C.}, + title = {Five decades of mathematics education research}, + journal = {Journal for Research in Mathematics Education}, + year = {2018}, + volume = {49}, + pages = {462-500}, +} + +@MANUAL{ISO80000-1:2009, + TITLE = {ISO80000-1:2009. Quantities and units -- Part 1: General}, + organization = {International Organization for Standardization}, + edition = {ISO80000-1}, + year = {2009}, +} + +@MANUAL{ISO80000-2:2009, + TITLE = {ISO80000-2:2009. Quantities and units -- Part 2: Mathematical signs and symbols to be used in the natural sciences and technology}, + organization = {International Organization for Standardization}, + edition = {ISO80000-2}, + year = {2009}, +} +#http://www.iso.org/iso/catalogue_detail?csnumber=31887 +#http://shop.bsigroup.com/en/ProductDetail/?pid=000000000030126380 + +@article{Ivleva2016, + author = {Ivleva, N.~V. and Fibikh, E.~V.}, + title = {Experience of e-learning implementation through massive open online courses}, + journal = {IOP Conference Series: Materials Science and Engineering}, + volume = {122}, + number = {1}, + pages = {012008}, + url ={http://stacks.iop.org/1757-899X/122/i=1/a=012008}, + year={2016}, + abstract={E-learning is considered to be one of the most prospective directions in education development worldwide. To have a competitive advantage over other institutions offering a wide variety of educational services it is important to introduce information and communication technologies into the educational process to develop e-learning on the whole. The aim of the research is to reveal problems which prevent from full implementation of e-learning at the Reshetnev Siberian State Aerospace University (SibSAU) and to suggest ways on solving those problems through optimization of e-learning introduction process at the university by motivating students and teaching staff to participate in massive open online courses and formation of tailored platforms with the view to arrange similar courses at the premises of the university. The paper considers the introduction and development level of e-learning in Russia and at SibSAU particularly. It substantiates necessity to accelerate e-learning introduction process at an aerospace university as a base for training of highly-qualified specialists in the area of aviation, machine building, physics, info-communication technologies and also in other scientific areas within which university training is carried out. The paper covers SibSAU?s experience in e-learning implementation in the educational process through students and teaching staff participation in massive open online courses and mastering other up-to-date and trendy educational platforms and their usage in the educational process. Key words. E-learning, distance learning, online learning, massive open online course.} +} + +@BOOK{Jackson1906, + AUTHOR = "Jackson, L.~L.", + TITLE = "The educational significance of sixteenth century arithmetic", + PUBLISHER = "New York", + YEAR = "1906", +} + +@ARTICLE{Jacob2003, + author = {Jacob, B.~A. and Levitt, S.~D.}, + title = {Rotten Apples: An Investigation of the Prevalence and Predictors of Teacher Cheating}, + journal = {The Quarterly Journal of Economics}, + year = {2003}, + volume = {118}, + number = {3}, + pages = {843--877}, + month = {August}, + doi = {10.1162/00335530360698441}, +} + +@INPROCEEDINGS{Jamnick1997, + author = {Jamnik, M. and Bundy, A. and Green, I.}, + title = {Automation of Diagrammatic Reasoning}, + booktitle = {Proceedings of the 15th International Joint Conference on Artificial Intelligence}, + year = {1997}, + volume = {1}, + pages = {528--533}, +} + +@ARTICLE{Jamnick1999, + author = {Jamnik, M. and Bundy, A. and Green, I.}, + title = {On Automating Diagrammatic Proofs of Arithmetic Arguments}, + journal = {Journal of Logic, Language and Information}, + year = {1999}, + volume = {8}, + number = {3}, + pages = {297--321}, + doi = {10.1023/A:1008323427489}, +} + +@ARTICLE{Jaworski1992, + author = {Jaworski, B.}, + title = {Mathematics Teaching: What is It?}, + journal = {For the Learning of Mathematics}, + year = {1992}, + volume = {12}, + number = {1}, + pages = {8--14}, +} + +@ARTICLE{Jaworski2002, + author = {Jaworski, B.}, + title = {Sensitivity and Challenge in University Mathematics Tutorial Teaching}, + journal = {Educational Studies in Mathematics}, + year = {2002}, + volume = {51}, + number = {1--2}, + pages = {71--94}, +} + +@MISC{JCQ2012, + author = {Joint Council for Qualifications}, + title = {General and Vocational Qualifications: Instructions for conducting examinations 1 September 2012 to 31 August 2013}, + howpublished = {{\tt http://www.jcq.org.uk/exams-office/ice---instructions-for-conducting-examinations/instructions-for-conducting-examinations-2012-2013}}, + year = {2012}, +} + +@ARTICLE{Jeffrey2004, + AUTHOR = {Jeffrey, D.~J. and Norman, A.~C.}, + TITLE = {Not seeing the roots for the branches: multivalued functions in computer algebra}, + JOURNAL = {ACM SIGSAM Bulletin}, + YEAR = {2004}, + volume = {38}, + number = {3}, + pages = {57--66}, + month = {September}, +} +#10.1145/1040034.1040036 + +@BOOK{Jennings2003, + author = {Jennings, S. and Dunne, R.}, + title = {I see maths}, + publisher = {Letts Education}, + year = {2003}, + volume = {Book 2}, +} # 0184 085 6920 + +@BOOK{Jenks1992, + author = {Jenks, R.~D. and Sutor, R.~S.}, + title = {AXIOM: the scientific computation system}, + publisher = {The Numerical Algorithms Group Ltd}, + year = {1992}, + note = {ISBN: 0-387-07855-0}, +} + +@article{Johnson1971, + Author = {Johnson, S.~C.}, + Title = {Problem of Recognizing Zero}, + Journal = {Journal of the ACM}, + Year = {1971}, + Volume = {18}, + Number = {4}, + Pages = {559--565}, + doi = {10.1145/321662.321669}, +} + +@ARTICLE{Johnston2013, + author = {Johnston, A. and Massa, H. and Burne, T.}, + title = {Digital lecture recording: A cautionary tale}, + journal = {Nurse Education Practice}, + year = {2013}, + volume = {13}, + number = {1}, + pages = {40--47}, + month = {January}, + doi = {10.1016/j.nepr.2012.07.004}, +} + +@ARTICLE{Jones2012, + author = {Jones, I. and Pratt, D.}, + title = {A Substituting Meaning for the Equals Sign in Arithmetic Notating Tasks}, + journal = {Journal for Research in Mathematics Education}, + year = {2012}, + volume = {43}, + number = {1}, + pages = {2--33}, +} + +@ARTICLE{Jones2013, + AUTHOR = {Jones, I. and Alcock, L.}, + TITLE = {Peer assessment without assessment criteria}, + JOURNAL = {Studies in Higher Education}, + YEAR = {2013}, + volume = {43}, + pages = {358--390}, +} +#10.1080/03075079.2013.821974 + +@INPROCEEDINGS{Jones2013b, + AUTHOR = {Jones, I. and Inglis, M. and Gilmore, C. and Hodgen, J.}, + TITLE = {Measuring conceptual understanding: the case of fractions}, + booktitle = {Lindmeier, A.M. and Heinze, A. (eds). Proceedings of the 37th Conference of the International Group for the Psychology of Mathematics Education (PME 37)}, + YEAR = {2013}, + volume = {3}, + pages = {113--120}, +} +#https://dspace.lboro.ac.uk/2134/12828 + +@article{Jones2014, + Author = {Jones, I. and Swan, M. and Pollitt, A.}, + Journal = {International Journal of Science and Mathematics Education}, + Title = {Assessing mathematical problem solving using comparative judgement}, + Year = {2014}, + volume = {13}, + number = {1}, + pages = {151--177}, +} + +@ARTICLE{Jones2014b, + author = {Jones, I. and Alcock, L.}, + title = {Peer assessment without assessment criteria}, + journal = {Studies in Higher Education}, + year = {2014}, + volume = {39}, + number = {10}, + pages = {1774--1787}, + doi = {10.1080/03075079.2013.821974}, +} + +@article{Jones2015, + author = {Jones, I. and Inglis, M.}, + title = {The problem of assessing problem solving: can comparative judgement help?}, + journal = {Educational Studies in Mathematics}, + year = {2015}, + volume = {89}, + number = {3}, + pages = {337--355}, + doi = {10.1007/s10649-015-9607-1}, + url = {http://link.springer.com/10.1007/s10649-015-9607-1}, +} + +@article{Jones2016, + author = {Jones, I. and Wheadon, C. and Humphries, S. and Inglis, M.}, + title = {Fifty years of A-level mathematics: have standards changed?}, + journal = {British Educational Research Journal}, + year = {2016}, + volume = {42}, + number = {4}, + pages = {543--560}, + doi = {10.1002/berj.3224}, +} + +@TECHREPORT{Jordan2015, + author = {Jordan, B.}, + title = {Qualification Reform: A guide to what is happening around the UK}, + institution = {Universities and Colleges Admissions Service}, + year = {2015}, +} + +@INBOOK{Jordan2010, + AUTHOR = {Jordan, S. and Butcher, P.}, + TITLE = {Physics Community and Cooperation: Selected Contributions from the {GIREP-EPEC} and {PHEC 2009} International Conference}, + CHAPTER = {Using e-assessment to support distance learners of science}, + pages = {202--216}, + PUBLISHER = {Lula/The Centre for Interdisciplinary Science}, + YEAR = {2010}, +} + +@INPROCEEDINGS{Jordan2011b, + AUTHOR = {Jordan, S. and Jordan, H. and Jordan, R.}, + TITLE = {Same but different, but is it fair? An analysis of the use of variants of interactive computer-marked questions}, + BOOKTITLE = {Proceedings of International Computer Assisted Assessment Conference}, + YEAR = {2011}, +} + +@ARTICLE{Jordan2011, + AUTHOR = {Jordan, S.}, + TITLE = {Using interactive computer-based assessment to support beginning distance learners of science}, + JOURNAL = {Open Learning}, + YEAR = {2011}, + volume = {26}, + number = {2}, + pages = {147--164}, +} + +@ARTICLE{Jordan2012, + AUTHOR = {Jordan, S.}, + TITLE = {Student engagement with assessment and feedback: Some lessons from short-answer free-text e-assessment questions}, + JOURNAL = {Computers and Education}, + YEAR = {2012}, + volume = {58}, + number = {2}, + pages = {818--834}, +} + +@INPROCEEDINGS{Jordan2012b, + AUTHOR = {Jordan, S.}, + TITLE = {Short-answer e-assessment questions: five years on}, + BOOKTITLE = {In Proceedings of CAA 2012 International Conference, Southampton}, + YEAR = {2012}, +} +#http://caaconference.co.uk/proceedings/ + +@ARTICLE{Jordan2013, + AUTHOR = {Jordan, S.}, + TITLE = {E-assessment: Past, present and future}, + JOURNAL = {New Directions}, + YEAR = {2013}, + doi = {10.11120/ndir.2013.00009}, + volume = {9}, + number = {1}, + pages = {87--106}, +} + +@article{Joubert2013, + author = {Joubert, M.}, + title = {Using digital technologies in mathematics teaching: developing an understanding of the landscape using three ``grand challenge'' themes}, + year = {2013}, + journal = {Educational Studies in Mathematics}, + volume = {82}, + number = {3}, + doi = {10.1007/s10649-012-9430-x}, + url = {10.1007/s10649-012-9430-x}, + pages = {34---359}, +} + +@BOOK{Jourdain1912, + AUTHOR = {Jourdain, P.}, + TITLE = {The Nature of Mathematics}, + PUBLISHER = {TC \& EC Jack, New York}, + YEAR = {1912}, +} + +@BOOK{Kahn2002, + AUTHOR = {Kahn, P. and Kyle, J.}, + TITLE = {Effective Learning and Teaching in Mathematics and its Applications}, + PUBLISHER = {Kogan page}, + YEAR = {2002}, +} + +@ARTICLE{Kajander2009, + author = {Kajander, A. and Lovric, M.}, + title = {Mathematics textbooks and their potential role in supporting misconceptions}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2009}, + volume = {40}, + number = {2}, + pages = {173--181}, +} + +@ARTICLE{Kanellos2018, + author = {Kanellos, I. and Nardi, E. and Biza, I.}, + title = {Proof schemes combined: mapping secondary students’ multi-faceted and evolving first encounters with mathematical proof}, + journal = {Mathematical Thinking and Learning}, + year = {2018}, + volume = {20}, + number = {4}, + pages = {277--294}, + doi = {10.1080/10986065.2018.1509420}, +} + +@ARTICLE{Kalyuga2012, + author = {Kalyuga, S. and Rikers, R. and Paas, F.}, + title = {Educational Implications of Expertise Reversal Effects in Learning and Performance of Complex Cognitive and Sensorimotor Skills}, + journal = {Educational Psychology Review}, + year = {2012}, + volume = {24}, + number = {2}, + pages = {313--337}, + doi = {10.1007/s10648-012-9195-x}, +} + + +@ARTICLE{Kamps1975, + author = {Kamps, H.~J.~L. and van Lint, J.~H.}, + title = {A Comparison of a Classical Calculus Test with a Similar Multiple Choice Test}, + journal = {Educational Studies in Mathematics}, + year = {1975}, + volume = {6}, + number = {3}, + pages = {259--271}, + month = {November}, +} + +@ARTICLE{Kane2013, + author = {Kane, M/~T.}, + title = {Validating the Interpretations and Uses of Test Scores}, + journal = {Journal of Educational Measurement}, + year = {2013}, + volume = {50}, + number = {1}, + pages = {1--73}, + doi = {10.1111/jedm.12000}, +} + +@ARTICLE{Kapaur2014, + author = {Kapaur, M.}, + title = {Productive Failure in Learning Math}, + journal = {Cognitive Science}, + year = {2014}, + volume = {38}, + pages = {1008--1022}, + doi = {10.1111/cogs.12107}, +} + +@ARTICLE{Kapaur2016, + author = {Kapaur, M.}, + title = {Examining Productive Failure, Productive Success, Unproductive Failure, and Unproductive Success in Learning}, + journal = {Educational Psychologist}, + year = {2016}, + volume = {51}, + number = {2}, + pages = {289--299}, + doi = {10.1080/00461520.2016.1155457}, +} + +@BOOK{Karian1992, + editor = {Karian, Z.~A.}, + TITLE = {Symbolic Computation in Undergraduate Mathematics Education}, + PUBLISHER = {Mathematical Association of America}, + YEAR = {1992}, + volume = {24}, + series = {MAA notes}, +} +# ISBN 0-88385-082-6 + +@ARTICLE{Karpinski1942, + author = {Karpinski, L.~C.}, + title = {Review: A Treatise on Algebra, by {George Peacock}}, + journal = {American Mathematical Monthly}, + year = {1942}, + volume = {49}, + number = {4}, + pages = {254--255}, + doi = {10.2307/2303241}, +} + +@ARTICLE{Katz2000, + author = {Katz, I.~R. and Bennett, R.~E. and Berger, A.~E.}, + title = {Effects of Response Format on Difficulty of SAT-Mathematics Items: It's Not the Strategy}, + journal = {Journal of Educational Measurement}, + year = {2000}, + volume = {37}, + number = {1}, + pages = {39-57}, + doi = {10.1111/j.1745-3984.2000.tb01075.x}, +} + +@inproceedings{Kaser2016, + author = {K\"{a}ser, T. and Klingler, S. and Gross, M.}, + title = {When to Stop?: Towards Universal Instructional Policies}, + booktitle = {Proceedings of the Sixth International Conference on Learning Analytics \& Knowledge}, + year = {2016}, + isbn = {978-1-4503-4190-5}, + location = {Edinburgh, United Kingdom}, + pages = {289--298}, + url = {http://doi.acm.org/10.1145/2883851.2883961}, + doi = {10.1145/2883851.2883961}, + publisher = {ACM}, + address = {New York, NY, USA}, +} + +@ARTICLE{Kay2002, + AUTHOR = {Kay, A.}, + TITLE = {InTe$\chi$: a problem centered approach to learning integration techniques}, + JOURNAL = {MSOR Connections}, + YEAR = {2002}, + volume = {2}, + number = {3}, + pages = {17--21}, +} + +@INPROCEEDINGS{Keady2012, + AUTHOR = {Keady, G.}, + TITLE = {Web-delivered Computer Aided Assessment in maths: STACK}, + YEAR = {2012}, + BOOKTITLE = {Proceedings of the Australian Computers in Education Conference 2--5 October 2012}, +} +# http://acec2012.acce.edu.au/web-delivered-computer-aided-assessment-maths-stack + +@ARTICLE{Kehoe2010, + AUTHOR = {Kehoe, E.}, + TITLE = {{AMS} Homework Software Survey}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {2010}, + volume = {57}, + number = {6}, + pages = {753--757}, + month = {June/July}, +} +@ARTICLE{Keller1989, + author = {Keller, B.~A. and Hirsch, C.~R.}, + title = {Student preferences for representations of functions}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {1998}, + volume = {29}, + number = {1}, + pages = {1--17}, +} + +@TECHREPORT{Kemp2016, + author = {Kemp, P.~E.~J. and Wong, B. and Berry, M.~G.}, + title = {The Roehampton Annual Computing Education Report}, + institution = {University of Roehampton}, + year = {2016}, +} + +@ARTICLE{Kerber2007, + AUTHOR = {Kerber, M. and Pollet, M.}, + TITLE = {Informal and Formal Representations in Mathematics}, + JOURNAL = {Studies in Logic, Grammar and Rhetoric}, + YEAR = {2007}, + volume = {10}, + number = {23}, + pages = {75--95}, +} + +@ARTICLE{Kieran2006, + author = {Kieran, C. and Drijvers, P.}, + title = {The Co-Emergence of Machine Techniques, Paper-and-Pencil Techniques, and Theoretical Reflection: A Study of {CAS} use in Secondary School Algebra}, + journal = {International Journal of Computers for Mathematical Learning}, + year = {2006}, + volume = {11}, + pages = {205--263}, + doi = {10.1007/s10758-006-0006-7}, +} + +@ARTICLE{Kilicman2010, + author = {Kilicman, A. and Hassan, M.~A. and Said Husain, S.~K.}, + title = {Teaching and Learning using Mathematics Software "The New Challenge''}, + journal = {Procedia Social and Behavioral Sciences}, + year = {2010}, + volume = {8}, + pages = {613--619}, + doi = {doi:10.1016/j.sbspro.2010.12.085}, +} + +@BOOK{Kilpatrick2001, + AUTHOR = {Kilpatrick, J. and Swafford, J. and Findell, B.}, + TITLE = {Adding it up: helping children learn mathematics}, + PUBLISHER = {National Academy Press, Washinton D.C.}, + YEAR = {2001}, + isbn = {0-309-50524-0}, +} +# Education Lib LB 1589/A + +@inproceedings{Kinnear2018STACKConf, + author = {Kinnear, George}, + place = {Furth, Germany}, + title = {Delivering an online course using {STACK}}, + booktitle = {Proceedings of the STACK Conference}, + year = {2018} +} + +@BOOK{Kirkman1852, + author = {Kirkman, T.~P.}, + title = {First mnemonical lessons on geometry, algebra, and trigonometry}, + publisher = {John Weale, London}, + year = {1852}, +} +# https://archive.org/details/firstmnemonical00kirkgoog + +@ARTICLE{Kirshner1989, + author = {Kirshner, D.}, + title = {The Visual Syntax of Algebra}, + journal = JRME, + year = {1989}, + volume = {20}, + number = {3}, + pages = {274--287}, +} + +@TECHREPORT{Kirshner1993, + author = {Kirshner, D.}, + title = {The Structural Algebra Option: A Discussion Paper}, + institution = {Paper presented at the Annual Meeting of the American Educational Research Association (Atlanta, GA)}, + year = {1993}, + month = {April}, +} +# http://eric.ed.gov/?id=ED364409 + +@article{Kirshner2004, + title = {Visual salience of algebraic transformations}, + author = {Kirshner, D. and Awtry, T.}, + journal = {Journal for Research in Mathematics Education}, + volume = {35}, + number = {4}, + pages = {224--257}, + year = {2004}, + month = {July}, + doi = {10.2307/30034809}, +} + +@article{Kirschner2006, + title = {Why minimal guidance during instruction does not work: An analysis of the failure of constructivist, discovery, problem-based, experiential, and inquiry-based teaching}, + author = {Kirschner, P.A. and Sweller, J. and Clark, R.E.}, + journal = {Educational psychologist}, + volume = {41}, + number = {2}, + pages = {75--86}, + year = {2006}, + publisher = {Lawrence Erlbaum Associates, Inc. 10 Industrial Avenue Mahwah, NJ 07430-2262 USA} +} + +@ARTICLE{Kluger1996, + AUTHOR = {Kluger, A.~N. and DeNisi, A.}, + TITLE = {Effects of feedback intervention on performance: A historical review, a meta-analysis, and a preliminary feedback intervention theory.}, + JOURNAL = {Psychological Bulletin}, + YEAR = {1996}, + volume = {119}, + number = {2}, + pages = {254--284}, + doi = {10.1037/0033-2909.119.2.254}, +} +# http://search.ebscohost.com/login.aspx?direct=true&db=pdh&AN=bul-119-2-254&site=ehost-live +# See Hatti2007. + +@ARTICLE{Kneebone1957, + author = {Kneebone, G.~T.}, + title = {The Philosophical Basis of Mathematical Rigour}, + journal = {The Philosophical Quarterly}, + year = {1957}, + volume = {7}, + number = {28}, + pages = {204--223}, + doi = {10.2307/2216658}, +} +# http://www.jstor.org/stable/2216658 + +@article{Knowles1940, + title = {The Research Method in Teaching Mathematics}, + author = {Knowles, E.~A.~G.}, + journal = {The Mathematical Gazette}, + volume = {24}, + number = {262}, + pages = {305--314}, + year = {1940}, +} + +@PHDTHESIS{Kortenkamp1999, + AUTHOR = {Kortenkamp, U.}, + TITLE = {Foundations of Dynamic Geometry}, + SCHOOL = {Swiss Federal Institute of Technology, {Zurich}}, + YEAR = {1999}, +} + +@PHDTHESIS{Kovacs2015, + author = {Kov\'{a}cs, Z.}, + title = {Computer Based Conjectures and Proofs in Teaching Euclidean Geometry}, + school = {Johannes Kepler University, Linz}, + year = {2015}, + type = {PhD}, +} + +@BOOK{Krantz99, + author = {Krantz, S.~G.}, + title = {How to teach mathematics}, + publisher = {American Mathematical Society}, + year = {1999}, + edition = {2nd}, +} + +@BOOK{Krippendorff2004, + author = {Krippendorff, K.~H.}, + title = {Content Analysis: An Introduction to Its Methodology}, + publisher = {Sage}, + year = {2004}, +} + +@INPROCEEDINGS{Klai, + author = {Klai, S. and Kolokolnikov, T. and Van den Bergh, N.}, + title = {Using {M}aple and the web to grade mathematics tests}, + booktitle= {Proceedings of the International Workshop on Advanced Learning Technologies, Palmerston North, {N}ew {Z}ealand, 4--6 December}, + year = {2000}, +} + +@BOOK{Klymchuk2010, + AUTHOR = {Klymchuk, S.}, + TITLE = {Counterexamples in calculus}, + PUBLISHER = {Mathematical Association of America}, + YEAR = {2010}, +} +# See also Mason2009 + +@ARTICLE{Klymchuk2015, + author = {Klymchuk, S.}, + title = {Provocative mathematics questions: drawing attention to a lack of attention}, + journal = {Teaching Mathematics and its Applications}, + year = {2015}, + volume = {34}, + number = {2}, + pages = {63--70}, + doi = {10.1093/teamat/hru022} +} + +@ARTICLE{Klymchuk2017, + author = {Klymchuk, S.}, + title = {Puzzle-based learning in engineering mathematics: students' attitudes}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2017}, + volume = {}, + number = {}, + pages = {}, + doi = {10.1080/0020739X.2017.1327088}, +} + +@BOOK{Klymchuk2013, + author = {Klymchuk, S. and Staples, S.~G.}, + title = {Paradoxes and Sophisms in Calculus}, + publisher = {The Mathematical Association of America}, + year = {2013}, + isbn = {978-0883857816}, +} + + +@BOOK{Kolb1984, + author = {Kolb, D.~A.}, + title = {Experiential learning: experience as the source of learning and development}, + publisher = {Prentice Hall}, + year = {1984}, +} + +@ARTICLE{Koedinger2004, + author = {Koedinger, K.~R. and Nathan, M.~J.}, + title = {The Real Story Behind Story Problems: Effects of Representations on Quantitative Reasoning}, + journal = {The Journal of the Learning Sciences}, + year = {2004}, + volume = {13}, + number = {2}, + pages = {129--164}, + doi = {10.1207/s15327809jls1302_1}, +} + +@ARTICLE{Koedinger2013, + author = {Koedinger, K.~R. and Nathan, M.~J.}, + title = {Instructional Complexity and the Science to Constrain It}, + journal = {Science}, + year = {2013}, + volume = {342}, + pages = {935--937}, + doi = {10.1126/science.1238056}, +} + +@ARTICLE{Komatsu2014, + author = {Komatsu, K. and Tsujiyama, Y. and Sakamaki, A. and Koike, N.}, + title = {Proof Problems with Diagrams: an Opportunity for Experiencing Proofs and Refutations}, + journal = {For the Learning of Mathematics}, + year = {2014}, + volume = {34}, + number = {1}, + pages = {36--42}, +} + +@ARTICLE{Komatsu2016a, + author = {Komatsu, K.}, + title = {A framework for proofs and refutations in school mathematics: Increasing content by deductive guessing}, + journal = {Educational Studies in Mathematics}, + year = {2016}, + volume = {92}, + pages = {147--162}, + doi = {10.1007/s10649-015-9677-0}, +} + +@CONFERENCE{Komatsu2016a, + author = {Komatsu, K. and Ishikawa, T. and Narazaki, A.}, + title = {Proof Validation and Modification by Example Generation: A Classroom-Based Intervention In Secondary School Geometry}, + booktitle = {Proceedings of 13th International Congress on Mathematical Education}, + year = {2016}, + volume = {TSG 18}, + pages = {1--8}, +} + +@INPROCEEDINGS{KurtKaraoglu2015, + author = {Kurt-Karaoglu, F. and Schwinning, N. and Striewe, M. and Zurmaar, B. and Goedicke, M.}, + title = {A Framework for Generic Exercises with Mathematical Content}, + booktitle = {Proceedings of the International Conference on Learning and Teaching in Computing and Engineering {(LaTiCE)}}, + year = {2015}, + pages = {70--75}, + publisher = {IEEE}, + doi = {10.1109/LaTiCE.2015.11}, +} + +@ARTICLE{Kynigos2007, + author = {Kynigos, C.}, + title = {Using half-baked microworlds to challenge teacher educators' knowing}, + journal = {International Journal of Computers for Mathematical Learning}, + year = {2017}, + volume = {12}, + issue = {2}, + month = {July}, + pages = {87--111}, + doi = {10.1007/s10758-007-9114-2}, +} + +@BOOK{Lakatos, + author = {Lakatos, I.}, + title = {Proofs and refutations}, + publisher = {Cambridge University Press}, + year = {1976}, +} +# Lakatos, I., "Proofs and refutations". Cambridge University Press, (1976). + +@ARTICLE{Lamport1995, + author = {Lamport, L.}, + title = {How to Write a Proof}, + journal = {The American Mathematical Monthly}, + year = {1995}, + volume = {102}, + number = {7}, + pages = {600--608}, + month = {Aug}, + doi = {10.2307/2974556}, +} + +@ARTICLE{Lamport2012, + author = {Lamport, L.}, + title = {How to Write a 21st Centuary Proof}, + journal = {Journal of Fixed Point Theory and Applications}, + year = {2012}, + volume = {11}, + number = {1}, + pages = {43--63}, + month = {March}, + doi = {10.1007/s11784-012-0071-6}, +} + +@article{Landau1992, + Author = {Landau, S.}, + Title = {Simplification of Nested Radicals}, + Journal = {SIAM Journal on Computing}, + Year = {1992}, + Volume = {21}, + Number = {1}, + Pages = {85--110}, + Month = {Feb}, +} +#per QA 76.A1S51 + +@article{Landau1994, + Author = {Landau, S.}, + Title = {How to Tangle with a Nested Radical}, + Journal = {Mathematical Intelligencer}, + Year = {1994}, + Volume = {16}, + Number = {2}, + Pages = {49--55}, +} + +@article{Landau1998, + Author = {Landau, S.}, + Title = {{root 2+root 3: Four different views}}, + Journal = {Mathematical Intelligencer}, + Year = {1998}, + Volume = {20}, + Number = {4}, + Pages = {55--60}, +} + +@ARTICLE{Lane-getaz2013, + author = {Lane-Getaz, S.}, + title = {Development of a reliable measure of students' inferential reasoning ability}, + journal = {Statisitics Education Research Journal}, + year = {2013}, + volume = {12}, + number = {1}, + pages = {20--47}, +} + +@PHDTHESIS{Lane-getaz2007, + author = {Lane-Getaz, S.}, + title = {Development and Validation of a Research-based Assessment: Reasoning about P-values and Statistical Significance}, + school = {University of Minnesota}, + year = {2007}, + type = {PhD}, +} + +@ARTICLE{Landy2007, + author = {Landy, D. and Goldstone, R.~L.}, + title = {How Abstract Is Symbolic Thought?}, + journal = {Journal of Experimental Psychology: Learning, Memory, and Cognition}, + year = {2007}, + volume = {33}, + number = {4}, + pages = {720--733}, +} + +@ARTICLE{Landy2007b, + author = {Landy, D. and Goldstone, R.~L.}, + title = {Formal notations are diagrams: Evidence from a production task}, + journal = {Memory and Cognition}, + year = {2007}, + volume = {35}, + number = {8}, + pages = {2033--2040}, +} + +@ARTICLE{Landy2010, + author = {Landy, D. and Goldstone, R.~L.}, + title = {Proximity and precedence in arithmetic}, + journal = {The Quarterly Journal of Experimental Psychology}, + year = {2010}, + volume = {63}, + number = {10}, + pages = {1953--1968}, +} + +@BOOK{Lang1968, + author = {Lang, S.}, + title = {Analysis I}, + publisher = {Addison-Wesley}, + year = {1968}, +} + +@ARTICLE{Lambert2013, + author = {Lambert, K.}, + title = {A natural history of mathematics: {George Peacock} and the making of {English} algebra}, + journal = {Isis}, + year = {2103}, + volume = {104}, + number = {2}, + pages = {278--302}, + doi = {10.1086/670948}, +} + +@ARTICLE{Larsen2008, + author = {Larsen, S. and Zandieh, M.}, + title = {Proofs and Refutations in the Undergraduate Mathematics Classroom}, + journal = {Educational Studies in Mathematics}, + year = {2008}, + volume = {67}, + number = {3}, + pages = {205--2016}, +} + + +@BOOK{Laurillard2002, + author = {Laurillard, D.}, + title = {Rethinking university teaching, a conversational framework for the effective use of learning technology}, + publisher = {Routledge Falmer}, + year = {2002}, + edition = {2}, +} + +@ARTICLE{Laursen2014, + author = {Laursen, S.~L. and Hassi, M. and Kogan, M. and Weston, T.~J.}, + title = {Benefits for Women and Men of Inquiry-Based Learning in College Mathematics: A Multi-Institution Study}, + journal = {Journal for Research in Mathematics Education}, + year = {2014}, + volume = {45}, + number = {4}, + pages = {406--418}, +} +# http://www.jstor.org/stable/10.5951/jresematheduc.45.4.0406 + +@ARTICLE{Lavicza2010, + AUTHOR = {Lavicza, Z.}, + TITLE = {Integrating technology into mathematics teaching at the university level}, + JOURNAL = {ZDM: The International Journal of Mathematics Education}, + YEAR = {2010}, + volume = {42}, + number = {1}, + pages = {105--119}, + month = {November}, +} +# http://link.springer.com/journal/11858/42/1/page/1 + +@BOOK{Lawson2003, + AUTHOR = {Lawson, D.}, + TITLE = {\href{http://www.engsc.ac.uk/downloads/mathsteam/diagnostic_test.pdf}{Diagnostic Testing for Mathematics}}, + PUBLISHER = {LTSN MathsTEAM Project}, + YEAR = {2003}, + isbn = {07044 23731}, +} +## http://www.engsc.ac.uk/downloads/mathsteam/diagnostic_test.pdf + +@INBOOK{Leder1999, + AUTHOR = {Leder, G.~C. and Rowley, G. and Brew, C.}, + TITLE = {International comparisons in mathematics: The state of the art}, + CHAPTER = {Gender differences in mathematics achievement: Here today and gone tomorrow?}, + pages = {213--224}, + PUBLISHER = {Falmer Press}, + YEAR = {1999}, +} +# Falmer Press, 1 Gunpowder Square, London EC43DE +# Vol 11 of "Studies in mathematics education series" +# ISBN, 0750709022, 9780750709026 +# editor = {Kaiser, G. and Luna, E. and Huntley I.}, + +@ARTICLE{Lee2011, + author = {Lee, M.~M. and Chauvot, J. and Plankis, B. and Vowell, J. and Culpepper, S.}, + title = {Integrating to learn and learning to integrate: A case study of an online master's program on science–mathematics integration for middle school teachers}, + journal = {Internet and Higher Education}, + year = {2011}, + volume = {14}, + number = {3}, + pages = {191-200}, + month = {July}, + doi = {10.1016/j.iheduc.2011.02.002}, +} + +@article{Leron1983, + author = {Leron, U.}, + title = {Structuring Mathematical Proofs}, + journal = {The American Mathematical Monthly}, + number = {3}, + pages = {174-185}, + year = {1983}, + volume = {90}, + doi = {10.2307/2975544}, +} + +@article{Leron2009, + author = {Leron, U. and Hazzan, O.}, + title = {Intuitive vs analytical thinking: four perspectives}, + year = {2009}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {71}, + number = {3}, + pages = {263--278}, + doi = {10.1007/s10649-008-9175-8}, + url = {10.1007/s10649-008-9175-8}, + publisher = {Springer Netherlands}, + keywords = {Mathematics education; Cognitive psychology; Evolutionary psychology; Mathematical errors; Rationality debate; Dual process theory; Medical diagnosis problem; Bayesian thinking; Base-rate neglect; Group theory; Lagrange's theorem}, + language = {English} +} + +@ARTICLE{Levenson2012, + author = {Levenson, E.}, + title = {Teachers' knowledge of the nature of definitions: The case of the zero exponent}, + journal = {The Journal of Mathematical Behavior}, + year = {2012}, + volume = {31}, + number = {2}, + pages = {209--219}, + month = {June}, + doi = {10.1016/j.jmathb.2011.12.006}, +} + +@article{Lew2019, + title = "Undergraduate mathematics students’ at-home exploration of a prove-or-disprove task", + author = "Lew, K. and Zazkis, D.", + journal = "The Journal of Mathematical Behavior", + volume = "54", + pages = "100674", + year = "2019", + issn = "0732-123", + doi = "https://doi.org/10.1016/j.jmathb.2018.09.003", + url = "http://www.sciencedirect.com/science/article/pii/S0732312317300627", +} + + +@ARTICLE{Lewis2009, + AUTHOR = {Lewis, J. and Tucker, A.}, + TITLE = {Report of the AMS First-Year Task Force}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {2009}, + volume = {56}, + pages = {754--760}, +} + +@ARTICLE{Li1999, + AUTHOR = "Li, S.", + TITLE = "Does practice make perfect?", + JOURNAL = {For the Learning of Mathematics}, + YEAR = "1999", + volume = "19", + number = "3", + pages = "33--35", +} + +@INBOOK{Libbrecht2010, + AUTHOR = {Libbrecht, P.}, + TITLE = {Intelligent Computer Mathematics}, + CHAPTER = {Notations Around the World: Census and Exploitation}, + pages = {398--401}, + PUBLISHER = {Springer}, + YEAR = {2010}, + volume = {6167}, + doi = {10.1007/978-3-642-14128-7\_34}, +} +# DOI: 10.1007/978-3-642-14128-7_34 + +@MASTERSTHESIS{Linnoinen2013, + author = {Linnoinen, K.}, + title = {Does Practice Make Perfect? A Study of the {Granger-causal} Relationship Between Attempting to Solve Online Exercises and Mathematical Proficiency}, + school = {University of Helsinki}, + year = {2013}, + type = {MSc}, +} + +@article{Lithner2004, + title = {Mathematical reasoning in calculus textbook exercises}, + author = {Lithner, J.}, + journal = {Journal of Mathematical Behavior}, + volume = {23}, + pages = {405--427}, + year = {2004}, +} + +@article{Lithner2008, + title = {A Research Framework for Creative and Imitative Reasoning}, + author = {Lithner, J.}, + journal = {Educational Studies in Mathematics}, + volume = {67}, + number = {3}, + pages = {255--276}, + year = {2008}, + url = {http://www.jstor.org/stable/40284656}, + ISSN = {00131954}, + abstract = {This conceptual research framework addresses the problem of rote learning by characterising key aspects of the dominating imitative reasoning and the lack of creative mathematical reasoning found in empirical data. By relating reasoning to thinking processes, student competencies, and the learning milieu it explains origins and consequences of different reasoning types.}, + language = {English}, +} + +@TECHREPORT{Livingston2004, + author = {Livingston, S.~A. and Rupp, S.~L.}, + title = {Performance of Men and Women on Multiple-Choice and Constructed-Response Tests for Beginning Teachers}, + institution = {Educational Testing Services}, + year = {2004}, + type = {Research Report}, + number = {04-48}, + month = {November}, +} + +@ARTICLE{Lobb2016, + author = {Lobb, R. and Harlow, J.}, + title = {Coderunner: a tool for assessing computer programming skills}, + journal = {ACM Inroads}, + year = {2016}, + volume = {7}, + number = {1}, + pages = {47--51}, + month = {March}, + doi = {10.1145/2810041}, +} + +@BOOK{Lord2008, + author = {Lord, F.~M.}, + title = {Applications of Item Response Theory to Practical Testing Problems}, + publisher = {Routledge}, + year = {2008}, + address = {New York, London}, +} + +@article{Lord2015, + title = {Improving Access for State-School Students}, + author = {Lord, K. and Stripp, C.}, + journal = {Mathematics Today}, + volume = {302}, + pages = {80--82}, + year = {2015}, + month = {April}, +} +# url = {http://ima.org.uk/_db/_documents/MT%20April%2015%20Improving%20Access%20for%20State-School%20Students.pdf}, + +@ARTICLE{Lockhart2002, + AUTHOR = {Lockhart, P.}, + TITLE = {A Mathematician's Lament}, + JOURNAL = {MAA Online}, + YEAR = {2002}, +} + +@BOOK{Lockhart2009, + AUTHOR = {Lockhart, P.}, + TITLE = {A Mathematician's Lament: How School Cheats Us Out of Our Most Fascinating and Imaginative Art Form}, + PUBLISHER = {Bellevue Literary Press}, + ADDRESS = {New York}, + YEAR = {2009}, + ISBN = {978-1934137178} +} + +@ARTICLE{Logan1964, + author = {Logan, T.~H.}, + title = {Teaching Significant Figures}, + journal = {American Journal of Physics}, + year = {1964}, + volume = {32}, + pages = {258--259}, + doi = {10.1119/1.1970241}, +} + +@ARTICLE{Lowe2001, + AUTHOR = {Lowe, J.}, + TITLE = {Computer-based education: Is it a panacea?}, + JOURNAL = {Journal of Research on Technology in Education}, + YEAR = {2001}, + volume = {34}, + number = {2}, + pages = {163--171}, +} + +@TECHREPORT{Lowe2010, + AUTHOR = {Lowe, T.}, + TITLE = {\href{http://www.open.ac.uk/opencetl/resources/details/detail.php?itemId=4b6abb677f175}{e-Assessment using Symbolic Manipulation Tools}}, + INSTITUTION = {Centre for Open Learning of Mathematics, Science, Computing and Technology, The Open University}, + YEAR = {2010}, +} + +@TECHREPORT{Lucas2014, + author = {Lucas, B. and Hanson, J. and Claxton, G.}, + title = {Thinking like an engineer: Implications for the education system}, + institution = {Royal Academy of Engineering}, + year = {2014}, + month = {May}, + note = {ISBN: 978-1-909327-09-2}, + address = {London, UK} +} + +@BOOK{Lund1841, + author = {Lund, T.}, + title = {The Elements of Algebra Designed for the use of Students in the University}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1841}, + edition = {11th}, +} + +@BOOK{Lund1845, + author = {Lund, T.}, + title = {The Elements of Algebra Designed for the use of Students in the University}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1845}, + edition = {12th}, +} + +@BOOK{Lund1848, + author = {Lund, T.}, + title = {The Elements of Algebra Designed for the use of Students in the University}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1848}, + edition = {13th}, +} + +@BOOK{Lund1852, + author = {Lund, T.}, + title = {The Elements of Algebra Designed for the use of Students in the University}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1852}, + edition = {14th}, +} + +@BOOK{Lund1857, + author = {Lund, T.}, + title = {The Elements of Algebra Designed for the use of Students in the University}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1857}, + edition = {15th}, +} + +@BOOK{Lund1858, + author = {Lund, T.}, + title = {An Exposure of a recent attempt at book making in the University of {Cambridge}}, + publisher = {London}, + year = {1858}, +} +# Cambridge library (?) shelfmark 8529 EE 25 + +@BOOK{Lund1860, + author = {Lund, T.}, + title = {Lund's companion to Wood's Algebra}, + publisher = {Longman, Brown, Green and Longmans}, + address = {London, UK}, + year = {1860}, + edition = {3rd}, +} +# This is the answers to Lund1852 + +@ARTICLE{LuxtonReilly2018, + author = {Luxton-Reilly, A. and Simon and Albluwi, I. and Becker, B.~A. and Giannakos, M. and Kumar, A.~N. and Ott, L. and Paterson, J. and Scott, M.~J. and Sheard, J. Szabo, C.}, + title = {Introductory Programming: A Systematic Literature Review}, + journal = {ITiCSE 2018 Companion Proceedings Companion of the 23rd Annual ACM Conference on Innovation and Technology in Computer Science Education}, + year = {2018}, + pages = {55-106}, + doi = {10.1145/3293881.3295779}, +} + +@BOOK{Ma1999, + AUTHOR = {Ma, L.}, + TITLE = {Knowing and teaching elementary mathematics}, + PUBLISHER = {Lawrence Erlbaum Associates}, + YEAR = {1999}, +} + +@ARTICLE{Ma2014, + author = {Ma, W. and Adesope, O.~O. and Nesbit, J.~C. and Liu, Q.}, + title = {Intelligent Tutoring Systems and Learning Outcomes: A Meta-Analysis}, + journal = {Journal of Educational Psychology}, + year = {2014}, + volume = {106}, + number = {4}, + pages = {901--918}, + doi = {10.1037/a0037123}, +} + +@ARTICLE{Maass2013, + author = {Maa\S, K. and Doorman, M.}, + title = {A model for a widespread implementation of inquiry-based learning}, + journal = {ZDM: The International Journal on Mathematics Education}, + year = {2013}, + volume = {45}, + number = {6}, + pages = {887--899}, +} + +@TECHREPORT{Machin2013, + author = {Machin, S. and McNally, S. and Wyness, G.}, + title = {Education in a Devolved Scotland: A Quantitative Analysis Report to the Economic and Social Research Council}, + institution = {Centre for Economic Performance}, + year = {2013}, + type = {Special Report}, + number = {30}, +} + +@article{Maciejewski2016, + title = {Developing flexible procedural knowledge in undergraduate calculus}, + author = {Maciejewski, W. and Star, J.~R.}, + journal = {Research in Mathematics Education}, + year = {2016}, + volume = {18}, + month = {September}, + number = {3}, + pages = {299--316}, + doi = {10.1080/14794802.2016.1148626}, +} + +@ARTICLE{Mackie1988, + author = {Mackie, D. and Scott, T.~D.}, + title = {Using computers to enhance the learning of mathematics}, + journal = {International Journal for Mathematics Education in Science and Technology}, + year = {1988}, + volume = {19}, + number = {1}, + pages = {83--88}, +} + +@BOOK{MacKenzie2004, + AUTHOR = {MacKenzie, D.}, + TITLE = {Mechanizing Proof: Computing Risk and Trust}, + PUBLISHER = {The {MIT} Press, Cambridge, Massachusetts}, + YEAR = {2004}, +} + +@ARTICLE{Mahavier1999, + author = {Mahavier, W.~S.}, + title = {What is the Moore Method?}, + journal = {Primus}, + year = {1999}, + number = {4}, + volume = {9}, + pages = {339--354}, + month = {December}, +} + +@MASTERSTHESIS{Majander2010, + AUTHOR = {Majander, H.}, + TITLE = {Tietokoneavusteinen arviointi kurssilla Diskreetin matematiikan perusteet}, + SCHOOL = {University of Helsinki}, + YEAR = {2010}, +} + +@INBOOK{Majander2011, + AUTHOR = {Majander, H. and Rasila, A.}, + editor = {Silfverberg, H. and Joutsenlahti, J.}, + TITLE = {Tutkimus suuntaamassa 2010-luvun matemaattisten aineiden opetusta}, + CHAPTER = {Experiences of continuous formative assessment in engineering mathematics}, + pages = {197--214}, + PUBLISHER = {Tampereen yliopistopaino Oy - Juvenes Print}, + YEAR = {2011}, +} +# Available at {\tt http://matta.math.aalto.fi/publications/MajanderRasila2011.pdf} + +@INPROCEEDINGS{Majchrzak2012, + AUTHOR = {Majchrzak, T.~A. and Usener, C.~A.}, + TITLE = {Evaluating E-Assessment for Exercises That Require Higher-Order Cognitive Skills}, + BOOKTITLE = {Proceedings of 45th Hawaii International Conference on System Sciences}, + YEAR = {2012}, + volume = {}, + isbn = {978-0-7695-4525-7}, + pages = {48--57}, + doi = {10.1109/HICSS.2012.252}, +} + +@ARTICLE{Majid2013, + author = {Majid, A.}, + title = {Matlab as a Teaching and Learning Tool for Mathematics: A literature review}, + journal = {International Journal of Arts and Sciences}, + year = {2013}, + volume = {6}, + number = {3}, + pages = {23--44}, +} + +@INPROCEEDINGS{Makela2016, + author = {M\"akel\"a A.-M. and Ali-L\"oytty, S. and Humaloja J.-P. and Joutsenlahti, J. and Kauhanen J. and Kaarakka T.}, + title = {STACK assignments in university mathematics education}, + booktitle = {Proceedings of 44th SEFI Conference, Tampere, Finland}, + month = {September}, + year = {2016}, + url = {http://www.sefi.be/conference-2016/papers/Mathematics\_and\_Engineering\_Education/makela-stack-assignments-in-university-mathematics-education-73\_a.pdf} +} + +@ARTICLE{Malabar00, + author = {Malabar, I. and Pountney, D.}, + title = {How do Traditional Examination Questions Fare in the Presence of a Computer Algebra System ({CAS})}, + journal = {The International Journal of Computer Algebra in Mathematics Education}, + year = {2000}, + volume = {7}, + number = {4}, + pages = {241--254}, +} + +@BOOK{Manktelow2012, + author = {Manktelow, K.}, + title = {Thinking and Reasoning: An Introduction to the Psychology of Reason, Judgement and Decision Making}, + publisher = {Psychology Press}, + year = {2012}, + address = {Hove, East Sussex, UK}, + isbn = {978-1-84169-740-6}, +} + +@ARTICLE{Manly1988, + author = {Manly, F.~T.}, + title = {The Comparison and Scaling of Student Assessment Marks in Several Subjects}, + journal = {Journal of the Royal Statistical Society. Series C (Applied Statistics)}, + year = {1988}, + volume = {3}, + number = {37}, + pages = {385--398}, +} + +@ARTICLE{Marriott2009, + AUTHOR = {Marriott, J. and Davies N. and Gibson L.}, + TITLE = {Teaching, Learning and Assessing Statistical Problem Solving}, + JOURNAL = {Journal of Statistics Education}, + YEAR = {2009}, + volume = {17}, + number = {1}, + pages = {(online)}, +} +## http://www.amstat.org/publications/jse/v17n1/marriott.html + +@inproceedings{Margeti2015, + author = {Margeti, M. and Mavrikis, M.}, + title = {Students' Deep and Surface Approach: Links to Interaction in Learning Environments}, + booktitle = {Design for Teaching and Learning in a Networked World - 10th European Conference on Technology Enhanced Learning, {EC-TEL} 2015, Toledo, Spain, September 15-18, 2015, Proceedings}, + pages = {435--440}, + year = {2015}, + doi = {10.1007/978-3-319-24258-3_36}, +} + +@BOOK{Marsden1981, + author = {Marsden, J. and Weinstein, A.}, + title = {Calculus Unlimited}, + publisher = {The Benjamin/Cummings Publishing Company Inc.}, + year = {1981}, + address = {Menlo Park, California}, +} + +@ARTICLE{Martinez1999, + author = {Martinez, M.~E.}, + title = {Cognition and the question of test item format}, + journal = {Educational Psychologist}, + year = {1999}, + volume = {34}, + number = {4}, + pages = {207--218}, + doi = {10.1207/s15326985ep3404_2}, +} + +@ARTICLE{Martin2016, + author = {Martin, U.}, + title = {Computational logic and the social}, + journal = {Journal of Logic and Computation}, + year = {2016}, + volume = {26}, + pages = {467--477}, +} + +@ARTICLE{MartinezSierra2015, + author = {Mart\'{\i}nez-Sierra, G. and del Socorro Garc\'{\i}a-Gonz\'{a}lez, M.}, + title = {Undergraduate mathematics students’ emotional experiences in Linear Algebra courses}, + journal = {Educational Studies in Mathematics}, + year = {2015}, + doi = {10.1007/s10649-015-9634-y}, +} + +@ARTICLE{Martin2016, + author = {Martin, U.}, + title = {Computational logic and the social}, + journal = {Journal of Logic and Computation}, + year = {2016}, + volume = {26}, + number = {2}, + pages = {467--477}, + doi = {10.1093/logcom/exu036}, +} + +@ARTICLE{Marton1993, + AUTHOR = {Marton, F. and Dall'alba, G. and Beaty, E.}, + TITLE = {Conceptions of Learning}, + JOURNAL = {International Journal of Educational Research}, + YEAR = {1993}, + volume = {19}, + number = {3}, + pages = {277--300}, +} + +@ARTICLE{Mason1984, + author = {Mason, J. and Pimm, D.}, + title = {Generic examples: seeing the general in the particular}, + journal = EdStud, + year = {1984}, + volume = {15}, + pages = {277--289}, +} + +@ARTICLE{Mason89, + author = {Mason, J.}, + title = {Mathematical abstraction as the result of a delicate shift of attention}, + journal = {For the Learning of Mathematics}, + year = {1989}, + volume = {9}, + number = {2}, + pages = {2--8}, +} + + +@ARTICLE{MasonMSOR2001, + author = {Mason, J. and Watson, A.}, + title = {Getting students to create boundary examples}, + journal = {MSOR Connections}, + year = {2001}, + volume = {1}, + number = {1}, + pages = {9--11}, + note = {\href{http://ltsn.mathstore.ac.uk/}{{\tt http://ltsn.mathstore.ac.uk/}} (viewed August 2002)}, +} + +@INPROCEEDINGS{MasonICMI2001, + AUTHOR = {Mason, J.}, + editor = {Chick, H. and Stacey, K. and Vincent, J. and Vincent, J.}, + TITLE = {On the use and abuse of word problems for moving from arithmetic to algebra}, + booktile = {The future of the teaching and learning of algebra, proceedings of the 12th {ICMI} Study Conference}, + YEAR = {2001}, + pages = {430--437}, + publisher = {The University of Melbourne} +} + +@BOOK{Mason2002, + AUTHOR = {Mason, J.}, + TITLE = {Mathematics Teaching Practice: a guide for University and College Lecturers}, + PUBLISHER = {Horwood Publishing Series in Mathematics and Applications}, + YEAR = {2002}, +} + +@INPROCEEDINGS{Mason2002b, + AUTHOR = {Mason, J.}, + TITLE = {Exploiting the Power of Word-Problems as Vehicles for Generalisation in Mathematics}, + BOOKTITLE = {EARCOME Workshop, Proceedings of EARCOME 2 - SEACOME 9}, + YEAR = {2002}, +} + + +@BOOK{Mason2004, + AUTHOR = {Mason, J. and Johnston-Wilder, S.}, + TITLE = {Fundamental constructs in mathematics education}, + PUBLISHER = {Routledge Falmer}, + YEAR = {2004}, +} + +@INPROCEEDINGS{Mason2007, + AUTHOR = {Mason, J. and Drury, H. and Bills, E. }, + TITLE = {Explorations in the Zone of Proximal Awareness}, + BOOKTITLE = {Proceedings of the 30th annual conference of the Mathematics Education Research Group of Australasia.}, + YEAR = {2007}, + editor = {Watson, J. and Beswick, K.}, + volume = {1}, + pages = {42--58}, +} + +@BOOK{Mason2009, + AUTHOR = {Mason, J. and Klymchuk, S.}, + TITLE = {Using Counter-examples in calculus}, + PUBLISHER = {Imperial College Press}, + YEAR = {2009}, +} + +@BOOK{Mason2010, + AUTHOR = {Mason, J. and Burton, L. and Stacey, K.}, + TITLE = {Thinking Mathematically}, + PUBLISHER = {Prentice Hall}, + YEAR = {2010}, +} + +@INPROCEEDINGS{Mason2011, + AUTHOR = {Scataglini-Belghitara, G. and Mason, J.}, + TITLE = {Teaching Takes Place In Time, While Learning Takes Place Over Time: Maturation of Mathematicians Seen as Phase Transitions in Te Ara Mokoroa (The Long Abiding Path of Knowledge)}, + BOOKTITLE = {Proceedings of Volcanic Delta 2011 Rotorua, New Zealand, 27 November -- 2 December 2011}, + YEAR = {2011}, + editor = {Hannah, J. and Thomas, M.}, + pages = {326--335}, +} + +@INBOOK{Mason2011b, + AUTHOR = {Mason, J.}, + TITLE = {Early Algebraization: A Global Dialogue from Multiple Perspectives}, + CHAPTER = {Envisioning What Is Possible in the Teaching and Learning of Algebra}, + pages = {557--574}, + PUBLISHER = {Springer}, + YEAR = {2011}, + series = {Advances in Mathematics Education}, +} + +@TECHREPORT{Masterman2017, + author = {Masterman, L. and Fresen, J.}, + title = {Landscape Report: Research and Practice in E-exams}, + year = {2017}, + institution = {University of Oxford}, + number = {Project ITS551}, +} + +@TECHREPORT{Masterman2018, + author = {Masterman, L.}, + title = {Trial of E-exams at the {University of Oxford}: Evaluation Report}, + year = {2018}, + institution = {University of Oxford}, + number = {Project ITS551}, +} + +@BOOK{Matiyasevich1993, + AUTHOR = {Matiyasevich, Y.}, + TITLE = {Hilbert's Tenth Problem}, + PUBLISHER = {MIT, Cambridge}, + YEAR = {1993}, +} + +@INCOLLECTION{Matz1982, + AUTHOR = {Matz, M.}, + TITLE = {Towards a process model for high school algebra errors}, + BOOKTITLE = {Intelligent Tutoring Systems}, + PUBLISHER = {Academic Press}, + YEAR = {1982}, + editor = {Sleeman, D. and Brown, J.~S}, + chapter = {2}, + pages = {25--50}, +} + +@INPROCEEDINGS{Mavrikis2003, + author = {Mavrikis, M. and Maciocia, A.}, + title = {Wallis: a Web-based {ILE} for Science and Engineering Students Studying Mathematics}, + booktitle= {Workshop of Advanced Technology for Mathematics Education in the 11th International Conference on Artificial Intelligence in Education}, + address = {Sydney, Australia}, + year = {2003}, + pages = {505--512}, +} + +@ARTICLE{Maxwell2018, + author = {Maxwell, M. and Gleason,J.}, + title = {Item efficiency: an item response theory parameter with applications for improving the reliability of mathematics assessment}, + journal = {International Journal of Mathematical Education in Science and Technology}, + volume = {0}, + number = {0}, + pages = {1--28}, + year = {2018}, + doi = {10.1080/0020739X.2018.1492038}, +} + +@ARTICLE{Mayer1981, + AUTHOR = "Mayer, R.~E.", + TITLE = "Frequency norms and structural analysis of algebra story problems into families, categories, and templates", + JOURNAL = "Instructional Science", + YEAR = "1981", + volume = "10", + pages = "135--175", +} + +@BOOK{Mazur1997, + author = {Mazur, E.}, + title = {Peer Instruction: A User's Manual}, + publisher = {Prentice Hall}, + year = {1997}, + address = {Upper Sadde River, New Jersey 07458}, +} + +@TECHREPORT{Mazzeo1993, + author = {Mazzeo, J. and Schmitt, A.~P. and Bleistein, C.~A.}, + title = {Sex-related performance differences on constructed-response and multiple-choice selections of Advanced Placement Examinations}, + institution = {College Entrance Examination Board, New York}, + year = {1993}, + type = {College Board Report}, + number = {92-7}, +} + +@ARTICLE{McArthur1986, + AUTHOR = {McArthur, D. and Stasz, C. and Hotta, J.~Y.}, + TITLE = {Learning Problem-Solving Skills in algebra }, + JOURNAL = {Journal of Educational Technology Systems}, + YEAR = {1986--87}, + volume = {15}, + number = {3}, + pages = {303-324}, +} +# http://baywood.metapress.com/app/home/contribution.asp?referrer=parent&backto=issue,4,8;journal,99,157;linkingpublicationresults,1:300322,1&displayreferrers=true#referrers + +@TECHREPORT{McAlister2005, + AUTHOR = {McAlister, M.}, + TITLE = {Formative Assessment in Mathematics using the {``ALTA"} system}, + INSTITUTION = {Stranmillis University College, Belfast}, + YEAR = {2005}, +} + +@INPROCEEDINGS{McCabe2017, + author = {McCabe, M.}, + title = {25 Years of E-Assessment and Beyond: How Did I Do!}, + booktitle = {Proceedings of {ICTMT} 13}, + year = {2017}, +} +@ARTICLE{McCauley2015, + author = {McCauley, R. and Grissom, S. and Fitzgerald, S. and Murphy, L.}, + title = {Teaching and learning recursive programming: a review of the research literature}, + journal = {Computer Science Education}, + year = {2015}, + volume = {25}, + number = {1}, + pages = {37--66}, + doi = {10.1080/08993408.2015.1033205}, +} + +@ARTICLE{McDougall2006, + author = {McDougall, A. and Jones, A.}, + title = {Theory and history, questions and methodology: current and future issues in research into ICT in education}, + journal = {353--360}, + year = {Technology, Pedagogy and Education}, + volume = {15}, + number = {3}, + pages = {2006}, + doi = {10.1080/14759390600923915} +} + +@INPROCEEDINGS{McGuire2002, + AUTHOR = {McGuire, G.~R. and Youngson, M.~A. and Korabinski, A.~A. and McMillan, D.}, + TITLE = {Partial Credit in Mathematics Exams - a Comparison of Traditional and CAA Exams}, + BOOKTITLE = {Proceedings 6th International CAA Conference, Loughborough University}, + YEAR = {2002}, +} + +@ARTICLE{McIntyre1997-I, + author = {McIntyre, M.~E.}, + title = {Lucidity and science I: Writing skills and the pattern perception hypothesis}, + journal = {Interdisciplinary Science Reviews}, + year = {1997}, + volume = {22}, + number = {3}, + pages = {199--216}, + doi = {10.1179/isr.1997.22.3.199}, +} + +@TECHREPORT{McKenna2016, + author = {McKenna, M.}, + title = {Transforming Scotland into a Maths Positive Nation: The Final Report of the Making Maths Count Group}, + institution = {The Scottish Government}, + year = {2016}, + number = {ISBN: 978-1-78652-436-2}, + month = {September}, +} + +@ARTICLE{McNeil2005, + author = {McNeil, N.~M. and Alibali, M.~W.}, + title = {Why Won’t You Change Your Mind? Knowledge of Operational Patterns Hinders Learning and Performance on Equations}, + journal = {Child Development}, + year = {2005}, + volume = {76}, + number = {4}, + pages = {883--899}, +} + +@article{Mejia-Ramos2012, + author = {Mej\'{\i}a-Ramos, J.~P. and Fuller, E. and Weber, K. and Rhoads, K. and Samkoff, A.}, + title = {An assessment model for proof comprehension in undergraduate mathematics}, + journal = {Educational Studies in Mathematics}, + volume = {79}, + number = {1}, + pages = {3--18}, + year = {2012}, + doi = {doi.org/10.1007/s10649-011-9349-7}, +} + + +@article{Mejia-Ramos2017.pdf, + author = {Mej\'{\i}a-Ramos, J.~P. and Lew, K. and de la Torre, J. and Weber, K.}, + title = {Developing and validating proof comprehension tests in undergraduate mathematics}, + journal = {Research in Mathematics Education}, + volume = {19}, + number = {2}, + pages = {130--146}, + year = {2017}, + doi = {10.1080/14794802.2017.1325776}, +} + + +@MASTERSTHESIS{Merlin2008, + author = {Merlin, E.~M.}, + title = {Beyond PEMDAS: Teaching students to perceive algebraic structure}, + school = {University of Maryland, College Park}, + year = {2008}, + type = {Master of Arts}, +} + +@article{Mesa2012, + author= {Mesa, V. and Griffiths, B.}, + title= {Textbook mediation of teaching: an example from tertiary mathematics instructors}, + year= {2012}, + issn= {0013-1954}, + journal= {Educational Studies in Mathematics}, + volume= {79}, + number= {1}, + pages= {85--107}, + doi= {10.1007/s10649-011-9339-9}, + url= {10.1007/s10649-011-9339-9}, + publisher= {Springer Netherlands}, + keywords= {Textbook mediation; College level; Mathematics instructors; Textbook use; Tertiary level}, + language= {English} +} + +@BOOK{Michalewicz2008, + AUTHOR = {Michalewicz, Z. and Michalewicz, M.}, + TITLE = {Puzzle-based Learning: Introduction to critical thinking, mathematics, and problem solving}, + PUBLISHER = {Hybrid Publishers}, + YEAR = {2008}, +} + +@ARTICLE{Michener1978, + author = {Michener, E.~R.}, + title = {Understanding understanding mathematics}, + journal = {Cognitive Science}, + year = {1978}, + volume = {2}, + pages = {361--381}, +} + +@MISC{Miller1995, + author = {Miller, B.~R.}, + title = {An Expression Formatter for {M}acsyma}, + year = {1995}, + note = {\verb$http://math.nist.gov/~BMiller/computer-algebra/$}, +} + +@ARTICLE{Mitic1994, + author = {Mitec, P. and Thomas, P.}, + title = {Pitfalls and limitations of computer algebra}, + journal = {Computers and Education}, + year = {1994}, + volume = {22}, + number = {4}, + pages = {355--361}, + month = {May}, +} + +@ARTICLE{Miyazaki2015, + author = {Miyazaki, M. and Fujita, T. and Jones, K.}, + title = {Flow-chart proofs with open problems as scaffolds for learning about geometrical proofs}, + journal = {ZDM Mathematics Education}, + year = {2015}, + volume = {47}, + pages = {1211--1224}, + doi = {10.1007/s11858-015-0712-5}, +} + +@ARTICLE{Mohrenschildt1998, + AUTHOR = {von Mohrenschildt, J.}, + TITLE = {A Normal Form for Function Rings of Piecewise Functions}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {1998}, + volume = {26}, + pages = {607--619}, +} + +@ARTICLE{Monaghan2000, + AUTHOR = {Monaghan, J.}, + TITLE = {Some issues surrounding the use of algebraic calculators in traditional examinations}, + JOURNAL = {International Journal of Mathematical Education in Science and Technology}, + YEAR = {2000}, + volume = {31}, + number = {3}, + pages = {381--392}, + month = {May}, +} + +@BOOK{Monaghan2000, + author = {Monaghan, J. and Trouche, L. and Borwein, J.~M.}, + title = {Tools and Mathematics}, + publisher = {Springer}, + year = {2016}, + series = {Mathematics Education Library}, + address = {}, + isbn = {978-3-319-02395-3}, + doi = {10.1007/978-3-319-02396-0}, +} + +@ARTICLE{Moore1994, + author = {Moore, R.~C.}, + title = {Making the transition to formal proof}, + journal = EdStud, + year = {1994}, + volume = {27}, + pages = {249--266}, +} + +@ARTICLE{Moore2001, + author = {Moore, R.~C. and Griffin, F.}, + title = {MacQ{\TeX}:\ self-testing quizzes, using {PDF}}, + note = {Preprint}, + year = {2001}, + JOURNAL = {TUGboat}, + volume = {22}, + number = {3}, +} +# https://www.tug.org/TUGboat/tb22-3/tb72moore-quiz.pdf + +@BOOK{Morgan1998, + AUTHOR = {Morgan, C.}, + TITLE = {Writing Mathematically: The Discourse of Investigation}, + PUBLISHER = {Fulmer, London}, + YEAR = {1998}, +} + + +@ARTICLE{Morganetal2002, + AUTHOR = {Morgan, C and Tsatsaroni, A and Lerman, S.}, + TITLE = {{M}athematics Teachers' Positions and Practices in Discourses of Assessment}, + JOURNAL = {British Journal of Sociology of Education}, + YEAR = {2002}, + volume = {23}, + number = {3}, + pages = {445--461}, + month = {Sept.}, +} + +@ARTICLE{Moss-Racusin2012, + author = {Moss-Racusin, C.~A. and Dovidio, J.~F. and Brescoll, V.~L. and Grahama, M.~J. and Handelsmana, J.}, + title = {Science faculty’s subtle gender biases favor male students}, + journal = {Proceedings of the National Academy of Sciences}, + year = {2012}, + volume = {109}, + number = {41}, + pages = {16474--16479}, + month = {October}, + doi = {10.1073/pnas.1211286109}, +} + +@BOOK{Montessori1912, + AUTHOR = {Montessori, M.}, + TITLE = {The Montessori Method}, + PUBLISHER = {Heinemann}, + YEAR = {1912}, +} + +@ARTICLE{Moses1971, + AUTHOR = {Moses, J.}, + TITLE = {Algebraic simplification a guide for the perplexed}, + JOURNAL = {Communications of the ACM}, + YEAR = {1971}, + volume = {14}, + number = {8}, + pages = {527--537}, + month = {August}, +} + +@ARTICLE{Morphew2018, + AUTHOR = {Morphew, J.~W. and Mestre, J.~P. and Kang, H. and Chang, H. and Fabry, G.}, + TITLE = {Using computer adaptive testing to assess physics proficiency and improve exam performance +in an introductory physics course}, + JOURNAL = {Physical Review: Physics Education Research}, + YEAR = {2018}, + volume = {14}, + number = {2}, + doi = {10.1103/PhysRevPhysEducRes.14.020110}, +} + +@ARTICLE{Moses2012, + AUTHOR = {Moses, J.}, + TITLE = {Macsyma: A personal history}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {2012}, + volume = {47}, + number = {2}, + pages = {123--130}, + doi = {doi:10.1016/j.jsc.2010.08.018}, +} + +@ARTICLE{Muir2014, + author = {Muir, T.}, + title = {{Google, Mathletics and Khan Academy}: students' self-initiated use of online mathematical resources}, + journal = {Mathematics Education Research Journal}, + year = {2014}, + volume = {26}, + pages = {833--852}, + doi = {10.1007/s13394-014-0128-5}, +} + +@ARTICLE{Mullet2014, + author = {Mullet, H.~G. and Butler, A.~C. and Verdin, B. and von Borries, R. and Marsh, E.~J.}, + title = {Delaying feedback promotes transfer of knowledge despite student preferences to receive feedback immediately}, + journal = {Cognition and Education}, + year = {2014}, + volume = {3}, + number = {3}, + pages = {222-229}, + month = {September}, + doi = {10.1016/j.jarmac.2014.05.001}, +} + +@article{Murdock2003, + title = {Teachers as Sources of Middle School Students' Motivational Identity: Variable-Centered and Person-Centered Analytic Approaches}, + author = {Murdock, T.~B. and Miller, A.}, + journal = {The Elementary School Journal}, + volume = {103}, + number = {4}, + pages = {383--399}, + url = {http://www.jstor.org/stable/1002290}, + ISSN = {00135984}, + language = {English}, + year = {2003}, + publisher = {The University of Chicago Press}, +} + +@ARTICLE{Murphy2017, + author = {Murphy, E. and Crick, T. and Davenport, J.~H.}, + title = {An Analysis of Introductory Programming Courses at UK Universities}, + journal = {The Art, Science, and Engineering of Programming}, + year = {2017}, + volume = {1}, + number = {2}, +} + +@TECHREPORT{Mustoe2002, + AUTHOR = {Mustoe, L. and Lawson, D.}, + TITLE = {\href{http://sefi.htw-aalen.de/}{Mathematics for the European Engineer}: A Curriculum for the Twenty-First Century}, + INSTITUTION = {SEFI Mathematics Working Group}, + YEAR = {2002}, + month = {March}, + note = {ISBN 2-87352-045-0}, +} +## + +@booklet{NatCurric1999, + author = {HMSO}, + title = {Mathematics: The National Curriculum for {E}ngland}, + publisher = {The Stationary Office, London}, + year = {1999}, +} + +@ARTICLE{Nardi2003, + author = {Nardi, E. and Steward, S.}, + title = {Is Mathematics {T.I.R.E.D}? A Profile of Quiet Disaffection in the Secondary Mathematics Classroom}, + journal = {British Educational Research Journal}, + year = {2003}, + volume = {29}, + pages = {345-366}, +} + +@BOOK{Nardi2007, + AUTHOR = {Nardi, E.}, + TITLE = {Amongst Mathematicians: Teaching and learning mathematics at university level}, + PUBLISHER = {Springer}, + YEAR = {2007}, +} + +@BOOK{Nakamura2010, + author = {Nakamura, Y.}, + title = {The STACK e-Learning and Assessment System for mathematics, science and engineering education through Moodle}, + publisher = {Tokyo Denki University Press}, + year = {2010}, + note = {(In Japanese)}, + isbn = {978-4-501-54820-9}, +} + +@INPROCEEDINGS{Nakamura2016, + author = {Nakamura, Y. and Taniguchi, T. and Yoshitomi, K. and Shirai, S. and Fukui, T. and Nakahara, T.}, + title = {{STACK} Project in {Japan}; Item Bank System, Math Input Interface and Question Specification}, + booktitle = {Proceedings of the 13th International Congress on Mathematical Education}, + year = {2016}, + note = {TSG-44}, +} + +@INPROCEEDINGS{Nakamura2016b, + author = {Nakamura, Y. and Takahara, T.}, + title = {Development of a Math Input Interface with Flick Operation for Mobile Devices}, + booktitle = {12th International Conference on Mobile Learning, 9--11 April, Vilamoura, Algarve, Portugal}, + year = {2016}, +} + +@BOOK{Nelson2014, + author = {Nelson, L.}, + title = {Specifications Grading: Restoring Rigor, Motivating Students, and Saving Faculty Time}, + publisher = {Stylus Publishing}, + address = {London}, + year = {2014}, + isbn = {978-1620362426}, +} + +@ARTICLE{NeuBrand98, + author = {Neubrand, M.}, + title = {Geometrische Aufgaben aus dem japanischen ``open-ended approach''}, + journal = {Beitr\"{a}ge zum Mathematikunterricht}, + year = {1998}, + pages = {483--486}, +} +# Geometrical tasks from the Japanese "open ended +# approach" Contributions to mathematics instruction 1998, P. 483 - 486 + +@BOOK{Neville1963, + author = {Neville, E.~H., and et.al.}, + title = {The teaching of higher geometry in schools: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd.}, + address = {London}, + year = {1963}, +} + +@BOOK{Newman1957, + author = {Newman, M.~H.~A. and et.al.}, + title = {The teaching of algebra in sixth forms: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd.}, + address = {London, UK}, + year = {1957}, +} +#Reprinted 1964. + +@BOOK{NewtonD1998, + author = {Newton, D.}, + title = {London General Certificate of Secondary Education Mathematics: Higher Practice Book (Edexcel GCSE Mathematics)}, + publisher = {Heinemann Educational Secondary Division }, + year = {1998}, +} # See also NewtonD1998 + +@BOOK{Neville1963, + author = {Neville, E.~H., and et.al.}, + title = {The teaching of higher geometry in schools: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd.}, + address = {London}, + year = {1963}, +} + +@INPROCEEDINGS{Nicaud2003, + AUTHOR = {Nicaud, J.~F. and Bouhineau, D. and Chaachoua, H. and Huguet, T.}, + TITLE = {A computer program for the learning of algebra: description and first experiment}, + BOOKTITLE = {Proceedings of the 11th International PEG Conference (St Petersburg, Russia)}, + YEAR = {2003}, + url = {http://www.itd.cnr.it/telma/docs/MeTAH/Nicaud-PEG.pdf}, + urldate = {29~July 2008}, +} +@ARTICLE{Nicaud2004, + AUTHOR = {Nicaud, J.~F. and Bouhineau, D. and Chaachoua, H.}, + TITLE = {Mixing microworlds and {CAS} features in building computer systems that help students learn algebra}, + JOURNAL = {International Journal of Computers for Mathematical Learning}, + YEAR = {2004}, + volume = {9}, + number = {2}, + pages = {169--211}, + doi= {10.1023/B:IJCO.0000040890.20374.37}, +} + +@ARTICLE{Nicaud2008, + AUTHOR = {Nicaud, J.~F. and Bouhineau, D.}, + TITLE = {Natural Editing of Algebraic Expressions}, + JOURNAL = {Les Cahiers Leibniz}, + YEAR = {2008}, + volume = {169}, +} +# http://hal.archives-ouvertes.fr/docs/00/59/15/53/PDF/Nicaud-JeanFrancois-2008.pdf + +@ARTICLE{Nichols2002, + author = {Nichols, D and Greenhow, M}, + title = {Using Question Mark Perception v3 for testing mathematics}, + journal = {MSOR Connections}, + year = {2002}, + volume = {2}, + number = {3}, + pages = {19--22}, + month = {August}, + note = {\href{http://ltsn.mathstore.ac.uk/newsletter/aug2002/pdf/perception3.pdf}{http://ltsn.mathstore.ac.uk/newsletter/aug2002/pdf/perception3.pdf} (viewed May 2004)}, +} + +@BOOK{Nietz1966, + author = {Nietz, J.~A.}, + title = {The Evolution of {American} Secondary School Textbooks: Rhetoric \& Literature, Algebra, Geometry, Natural History (Zoology), Botany, Natural Philosophy (Physics), Chemistry, {Latin} and {Greek}, {French}, {German} \& World History as Taught in {American} {Latin} Grammar School, Academies and Early High Schools before 1900, C.~E.}, + publisher = {Tuttle}, + address = {Rutland, Vermont}, + year = {1966}, +} + +@BOOK{Niss1993, + editor = {Niss, M.}, + TITLE = {Investigations into Assessment in Mathematics Education: an {ICMI} Study}, + PUBLISHER = {The Netherlands : Kluwer Academic}, + YEAR = {1993}, +} + +@article{Nissen2018, + title = {Comparison of normalized gain and Cohen's $d$ for analyzing gains on concept inventories}, + author = {Nissen, J.~M. and Talbot, R.~M. and Nasim Thompson, A. and Van Dusen, B.}, + journal = {Physical Review Physics Educational Research}, + volume = {14}, + issue = {1}, + pages = {010115}, + year = {2018}, + month = {March}, + doi = {10.1103/PhysRevPhysEducRes.14.010115}, +} +# url = {https://link.aps.org/doi/10.1103/PhysRevPhysEducRes.14.010115} + +@BOOK{Noss1996, + AUTHOR = {Noss, R. and Hoyles, C.}, + TITLE = {Windows on mathematical meanings: learning cultures and computers}, + PUBLISHER = {Springer}, + YEAR = {1996}, +} + +@TECHREPORT{Noyes2011, + author = {Noyes, A. and Wake, G. and Drake, P. and Murphy, R.}, + title = {Evaluating Mathematics Pathways: Final Report.}, + institution = {Department for Education}, + year = {2011}, + type = {DfE Research Report}, + number = {143}, + address = {London, UK}, +} + +@ARTICLE{Noyes2016, + author = {Noyes, A. and Adkins, M.}, + title = {Reconsidering the rise in {A-Level} Mathematics participation}, + journal = {Teaching Mathematics and Its Applications}, + year = {2016}, + volume = {35}, + number = {1}, + pages = {1-13}, + doi = {10.1093/teamat/hrv016}, +} + +@article{Nunn1911, + title = {The Aim and Methods of School Algebra. 1. The Aim of Algebra Teaching}, + author = {Nunn, T.~P.}, + journal = {The Mathematical Gazette}, + volume = {6}, + number = {95}, + pages = {167--172}, + year = {1911}, +} + +@article{Nunn1912, + title = {The Aim and Methods of School Algebra II. Methods of Teaching}, + author = {Nunn, T.~P.}, + journal = {The Mathematical Gazette}, + volume = {6}, + number = {96}, + pages = {214--219}, + year = {1912}, +} + +@ARTICLE{Nwana1990, + author = {Nwana, H.~S.}, + title = {Intelligent Tutoring Systems: an overview}, + journal = {Artificial Intelligence Review}, + year = {1990}, + volume = {4}, + pages = {251--277}, +} + +@MISC{Oates2013, + AUTHOR = {Oates, T.}, + TITLE = {Radical solutions in demanding times: alternative approaches for appropriate placing of coursework components in {GCSE} examinations}, + howpublished = {Online: {\tt http://ocr.org.uk/}}, + year = {2013}, +} +#http://ocr.org.uk/Images/143462-coursework-radical-solutions-in-demanding-times.pdf + +@TECHREPORT{OECD2014, + author = {Schleicher, A.}, + title = {PISA 2012 Results in Focus: What 15-year-olds know and what they can do with what they know}, + institution = {Organisation for Economic Co-operation and Development}, + year = {2014}, +} +# http://www.oecd.org/pisa/keyfindings/pisa-2012-results-overview.pdf + +@BOOK{Oettinger1974, + AUTHOR = {Oettinger, A.~G. }, + TITLE = {Run, Computer, Run: Mythology of Educational Innovation}, + PUBLISHER = {Harvard University Press}, + YEAR = {1974}, +} + +@TECHREPORT{OFQUAL-A-level2011, + author = {{OFQUAL}}, + title = {{GCE AS} and {A level} Subject Criteria for Mathematics}, + institution = {Office of Qualifications and Examinations Regulation}, + year = {2011}, + type = {Ofqual/11/4988}, +} + +@TECHREPORT{OFQUAL-A-level2016, + author = {{OFQUAL}}, + title = {{GCE AS} and {A level} Subject Criteria for Mathematics}, + institution = {Office of Qualifications and Examinations Regulation}, + year = {2016}, + type = {Ofqual/16/5921}, +} + +@INPROCEEDINGS{Oldenberg2013, + author = {Oldenberg, R. and Hodgen, J. and K\"{u}chemann, D.}, + title = {Syntactic and Semantic Items in Algebra Tests –- A Conceptual and Empirical View}, + booktitle = {Proceedings of the Eighth Congress of the European Society for Research in Mathematics Education (CERME8)}, + year = {2013}, + pages = {501--510}, +} + +@TECHREPORT{oPrey2017, + author = {O'Prey, P.}, + title = {Patterns and Trends in {UK} Higher Education 2017}, + institution = {Universities UK}, + year = {2017}, +} + +@incollection{Oshea1982, + author = {O'Shea, T.}, + title = {A self improving quadratic tutor}, + booktitle= {Intelligent Tutoring Systems}, + editor = {Sleeman, D. and Brown, J.~S.}, + chapter = {13}, + pages = {309--336}, + publisher = {Academic Press, London}, + year = {1982}, +} + +@BOOK{Oshea1983, + author = {O'Shea, T. and Self, J.}, + title = {Learning and Teaching with Computers}, + publisher = {Harvester Press}, + address = {Brighton, UK}, + year = {1983}, +} + + +@ARTICLE{Osterholm2013, + AUTHOR = {\"{O}sterholm, M. and Bergqvist, E.}, + TITLE = {What is so special about mathematical texts? Analyses of common claims in research literature and of properties of textbooks}, + YEAR = {2013}, + journal = {ZDM Mathematics Education}, + volume = {45}, + pages = {751--763}, + doi = {10.1007/s11858-013-0522-6}, +} + + +@INPROCEEDINGS{Paek2008, + author = {Paek, P.~L.}, + title = {Some Factors Contributing to Gender Differences in the Mathematics Performance of United States High School Students }, + booktitle = {Gender and Mathematics Education Topic Study Group (TSG 32) at the eleventh International Congress on Mathematical Education, Monterrey, Mexico}, + year = {2008}, +} + +@ARTICLE{PachecoVenegas2015, + author = {Pacheco-Venegas, N.~D. and L\'{o}pex, G. and Andrade-Ar\'{e}echiga, M.}, + title = {Conceptualization, development and implementation of a web-based system for automatic evaluation of mathematical expressions}, + journal = {Computers and Education}, + year = {2015}, + volume = {88}, + pages = {15--28}, + doi = {10.1016/j.compedu.2015.03.021}, +} + +@ARTICLE{Pane2014, + author = {Pane, J.~F. and McCaffrey, D.~M. and Karam, R.}, + title = {Effectiveness of Cognitive Tutor Algebra {I} at Scale}, + journal = {Educational Evaluation and Policy Analysis}, + year = {2014}, + volume = {36}, + number = {2}, + pages = {127--144}, + doi = {10.3102/0162373713507480}, +} + +@ARTICLE{Papert1972, + author = {Papert, S.}, + title = {Teaching Children to be Mathematicians Versus Teaching About Mathematics}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {1972}, + volume = {3}, + number = {3}, + pages = {249--262}, +} + +@BOOK{Papert1980, + AUTHOR = {Papert, S.}, + TITLE = {Mindstorms: Children, Computers and Powerful Ideas}, + PUBLISHER = {Harper Collins}, + YEAR = {1980}, +} + +@BOOK{Parker2004, + AUTHOR = {Parker, J.}, + TITLE = {R.~L.~Moore: Mathematician and Teacher}, + PUBLISHER = {Mathematical Association of America}, + YEAR = {2004}, +} + +@PHDTHESIS{Parsons2014, + author = {Parsons, S.~J.}, + title = {Enabling success in mathematics and statistics: the effects of self-confidence and other factors in a University College}, + school = {Loughborough University}, + year = {2014}, + type = {PhD}, +} +# https://dspace.lboro.ac.uk/2134/15066 + +@ARTICLE{Parsonson1972, + author = {Parsonson, S.~L.}, + title = {Comparison of First Year University Mathematics Syllabuses: A Report on Behalf of the Universities and Schools Committee}, + journal = {The Mathematical Gazette}, + year = {1972}, + pages = {2--4}, + volume = {56}, + number = {395}, +} + +@ARTICLE{Pavia2015, + author = {Paiva, R.~C. and Ferreira, M.~S. and Mendes, A.~G. and Eus\'{e}bio, A.~M.~J.}, + title = {Interactive and multimedia contents associated with a system for computer-aided assessment}, + journal = {Journal of Educational Computing Research}, + year = {2015}, + volume = {52}, + number = {2}, + pages = {224--256}, + doi = {10.1177/0735633115571305}, +} + +@ARTICLE{Pavia2017, + author = {Paiva, R.~C. and Ferreira, M.~S. and Frade, M.~M.}, + title = {Intelligent tutorial system based on personalized system of instruction to teach or remind mathematical concepts}, + journal = {Journal of Computer Assisted Learning}, + year = {2017}, + volume = {33}, + number = {4}, + pages = {370--381}, + doi = {10.1111/jcal.12186}, +} + +@ARTICLE{Pea1984, + author = {Pea, R.~D. and Kurland, D.~M.}, + title = {On the cognitive effects of learning computer programming}, + journal = {New Ideas in Psychology}, + year = {1984}, + volume = {2}, + number = {3}, + pages = {137--168}, + doi = {10.1016/0732-118X(84)90018-7}, +} + +@BOOK{Peacock1820, + AUTHOR = {Peacock, G.}, + TITLE = {A Collection of Examples of the Applications of the Differential and Integral Calculus}, + PUBLISHER = {Cabridge University Press}, + address = {Cambridge}, + YEAR = {1820}, +} + +@BOOK{Peacock1830, + AUTHOR = {Peacock, G.}, + TITLE = {A treatise on Algebra}, + PUBLISHER = {Cabridge University Press}, + address = {Cambridge}, + YEAR = {1830}, +} + +@BOOK{Peacock1842v1, + AUTHOR = {Peacock, G.}, + TITLE = {A treatise on algebra. Vol.1. Arithmetical algebra}, + PUBLISHER = {Cabridge University Press}, + YEAR = {1842}, +} +# http://solo.bodleian.ox.ac.uk/OXVU1:oxfaleph014075574 + +@BOOK{Peacock1842v2, + AUTHOR = {Peacock, G.}, + TITLE = {A treatise on algebra. Vol.2. On symbolical algebra and its applications to the geometry of position}, + PUBLISHER = {Cabridge University Press}, + YEAR = {1842}, +} + +@ARTICLE{Pease2017, + author = {Pease, A. and Lawrence, J. and Budzynska, K. and Corneli, J. and Reed, C.}, + title = {Lakatos-style collaborative mathematics through dialectical, structured and abstract argumentation}, + journal = {Artificial Intelligence}, + year = {2017}, + volume = {246}, + pages = {181--219}, + doi = {10.1016/j.artint.2017.02.006} +} + +@INPROCEEDINGS{Pehkonen2004, + author = {Pehkonen, L.}, + title = {The Magic Circle of the Textbook -- an Option or an Obstacle for Teacher Change}, + booktitle = {Proceedings of the 28th conference of the International Group for the Psychology of Mathematics Education}, + year = {2004}, + volume = {3}, + pages = {513--520}, +} + + +@ARTICLE{Perry1900, + AUTHOR = {Perry, J.}, + TITLE = {The Teaching of Mathematics}, + JOURNAL = {Nature}, + YEAR = {1900}, + volume = {62}, + number = {1605}, + pages = {317--320}, + month = {August}, + doi = {10.1038/062317c0}, +} + +@ARTICLE{Perry1902, + AUTHOR = {Perry, J.}, + TITLE = {The Teaching of Mathematics}, + JOURNAL = {Nature}, + YEAR = {1902}, + volume = {65}, + number = {1691}, + pages = {484--586}, + month = {March}, + doi = {10.1038/062317c0}, +} + +@INBOOK{Petrou2001, + author = {Petrou, M. and Goulding, M.}, + title = {Mathematical Knowledge in Teaching}, + chapter = {Conceptualising teachers' mathematical knowledge in teaching}, + pages = {9--26}, + publisher = {Springer, Dordrecht}, + year = {2011}, +} + +@article{Pheidas1994, + title = {Extensions of Hilbert's Tenth Problem}, + author = {Pheidas, T.}, + journal = {The Journal of Symbolic Logic}, + year = {1994}, + volume = {59}, + number = {2}, + pages = {372--397}, + url = {http://www.jstor.org/stable/2275396}, + ISSN = {00224812}, +} + +@ARTICLE{Pitcher1997, + AUTHOR = {Pitcher, N.}, + TITLE = {Educational software in mathematics: developing and using a mathwise module}, + JOURNAL = {International Journal of Mathematical Education in Science and Technology}, + YEAR = {1997}, + volume = {29}, + number = {5}, + pages = {709--720}, + doi = {10.1080/0020739980290507}, +} + +@ARTICLE{Pintrich1990, + author = {Pintrich, P.~R.}, + title = {Motivational and self-regulated learning components of classroom academic performance}, + journal = {Journal of Educational Psychology}, + year = {1990}, + volume = {82}, + pages = {33-40}, +} + +@TECHREPORT{Pintrich1991, + author = {Pintrich, P.~R. and Smith, D.~A. and Garcia, T. and McKeachie, W.~J.}, + title = {A Manual for the Use of the Motivated Strategies for Learning Questionnaire {(MSLQ)}.}, + institution = {National Center for Research to Improve Postsecondary Teaching and Learning}, + year = {1991}, + number = {NCRIPTAL-91-B-004}, + address = {Ann Arbor, MI.}, +} + +@ARTICLE{Pintrich2004, + author = {Pintrich, P.~R.}, + title = {A conceptual framework for assessing motivation and self-regulated learning in college students}, + journal = {Educational Psychology Review}, + year = {2004}, + volume = {16}, + number = {4}, + pages = {385--407}, +} + +@BOOK{Pledger2001, + author = {Pledger, K. and Sylvester, J. and Medlow C.}, + title = {Edexcel GCSE Mathematics Higher Course (Edexcel GCSE Mathematics)}, + publisher = {Heinemann Educational Secondary Division}, + year = {2001}, +} # See also NewtonD1998 + +@ARTICLE{Pollitt2012, + AUTHOR = {Pollitt, A.}, + TITLE = {The method of Adaptive Comparative Judgement}, + JOURNAL = {Assessment in Education: Principles, Policy \& Practice}, + YEAR = {2012}, + volume = {19}, + number = {3}, + pages = {281--300}, + doi = {10.1080/0969594X.2012.665354}, +} + +@BOOK{Poole2011, + author = {Poole, D.}, + title = {Linear Algebra: a modern approach}, + publisher = {Brooks/Cole, Cengage learning}, + year = {2011}, + edition = {Third}, +} + +@ARTICLE{Pope2012, + author = {Pope, S.}, + title = {The future for UK Mathematics Subject Associations}, + journal = {Mothemotics in School}, + year = {2012}, + volume = {}, + number = {}, + pages = {}, +} + +@ARTICLE{Potkonjak2016, + author = {Potkonjak, A. and Gardner, M. and Callaghan, V. and Mattila, P. and Guetl, C. and Petrovi\'{c}, V.~M. and Jovanovi\'{c}, K.}, + title = {Virtual laboratories for education in science, technology, and engineering: A review}, + journal = {Computers and Education}, + year = {2016}, + volume = {95}, + pages = {309--327}, + month = {April}, + doi = {dx.doi.org/10.1016/j.compedu.2016.02.002}, +} + +@ARTICLE{Prank2008, + AUTHOR = {Prank, R.}, + TITLE = {Random Generation of Expressions in Problem Solving Environment T-algebra}, + JOURNAL = {Journal of Computers in Mathematics and Science Teaching}, + YEAR = {2008}, +} + +@ARTICLE{Prank2011, + AUTHOR = {Prank, R.}, + TITLE = {What toolbox is necessary for building exercise environments for algebraic transformations}, + JOURNAL = {The Electronic Journal of Mathematics and Technology}, + YEAR = {2011}, + volume = {5}, + number = {3}, +} +# https://php.radford.edu/~ejmt/deliverAbstract.php?paperID=eJMT_v5n3a5 + +@ARTICLE{Pritchard2010, + AUTHOR = {Pritchard, D.}, + TITLE = {Where learning starts? A framework for thinking about lectures in university mathematics}, + JOURNAL = {International Journal of Mathematical Education in Science and Technology}, + YEAR = {2010}, + volume = {41}, + number = {5}, + pages = {609--623}, + doi = {10.1080/00207391003605254}, +} + +@TECHREPORT{Pritchard2019, + AUTHOR = {Pritchard, D.}, + title = {{SQA} qualifications in Mathematics and {English} (1986-2018): a statistical overview}, + institution = {Scottish Mathematical Council}, + year = {2019}, + source = {https://drive.google.com/file/d/1SfqoAlp5hNaEujfszNrXOWpAM51JcwtE/view}, +} + +@BOOK{Prigmore1981, + author = {Prigmore, C.}, + title = {30 Hour {BASIC}}, + publisher = {National Extension College Trust}, + year = {1981}, + isbn = {0860822699}, +} + +@ARTICLE{Przenioslo2004, + author = {Przenioslo, M.}, + title = {Images of the Limit of Function Formed in the Course of Mathematical Studies at the University}, + journal = {Educational Studies in Mathematics}, + year = {2004}, + volume = {55}, + pages = {103--132}, +} + +@ARTICLE{Przenioslo2005, + author = {Przenioslo, M.}, + title = {Images of the Limit of Function Formed in the Course of Mathematical Studies at the University}, + journal = {Educational Studies in Mathematics}, + year = {2005}, + volume = {60}, + pages = {71--93}, + doi = {10.1007/s10649-005-5325-4}, +} + +@TECHREPORT{PCES2014, + Editor = {Elder, P.}, + TITLE = {Economics, Education and Unlearning: Economics Education at the {University of Manchester}}, + INSTITUTION = {The Post-Crash Economics Society}, + YEAR = {2014}, + address = {Manchester, UK}, +} + +@ARTICLE{Pears2007, + author = {Pears, A. and Seidman, S. and Malmi, L. and Mannila, L. and Adams, E. and Bennedsen, J. and Devlin, M. and Paterson, J.}, + title = {A survey of literature on the teaching of introductory programming}, + journal = {SIGCSE Bulletin}, + year = {2007}, + pages = {204--223}, + volume = {39}, + number = {4}, + doi = {10.1145/1345375.1345441}, +} + +@BOOK{Polya54, + author = {Polya, G.}, + title = {Mathematics and Plausible Reasoning. Vol.1: Induction and Analogy in Mathematics. Vol 2. Patterns of Plausible Inference}, + publisher = {Princeton University Press}, + year = {1954}, +} +# Polya, G., Mathematics and Plausible Reasoning. Vol.1: Induction and Analogy in Mathematics. Vol 2. Patterns of Plausible Inference. Princeton University Press (1954). + +@BOOK{Polya62, + author = {Polya, G.}, + title = {Mathematical discovery: on understanding, learning, and teaching problem solving}, + publisher = {Wiley}, + address = {London, UK}, + year = {1962}, +} + +@BOOK{Polya73a, + author = {Polya, G.}, + title = {How to solve it}, + publisher = {Princeton University Press}, + address = {Princeton, USA}, + year = {1973}, +} + +@BOOK{PorkessMEI, + editor = {Porkess, R.}, + title = {MEI Structured Mathematics}, + publisher = {Hodder Murray}, + year = {1994}, +} + +@TECHREPORT{Pritcherd2019, + AUTHOR = {Pritcherd, D.}, + TITLE = {{SQA} qualifications in Mathematics and English (1986-2018): a statistical overview}, + INSTITUTION = {The Scottish Mathematical Council}, + YEAR = {2019}, +} + + +@ARTICLE{Pycior1981, + author = {Pycior, H.~M.}, + title = {{George Peacock} and the {British} origins of symbolical algebra}, + journal = {Historia Mathematica}, + year = {1981}, + volume = {8}, + number = {1}, + pages = {23--45}, + doi = {10.1016/0315-0860(81)90003-3}, +} + +@ARTICLE{Pycior1982, + author = {Pycior, H.~M.}, + title = {Early criticism of the symbolical approach to algebra}, + journal = {Historia Mathematica}, + year = {1982}, + volume = {9}, + number = {4}, + pages = {392--412}, + doi = {10.1016/0315-0860(82)90105-7}, +} + +@ARTICLE{Pycior1984, + author = {Pycior, H.~M.}, + title = {Internalism, externalism, and beyond: 19th-century British algebra}, + journal = {Historia Mathematica}, + year = {1984}, + volume = {11}, + number = {4}, + pages = {424--441}, + doi = {10.1016/0315-0860(84)90027-2}, +} + +@TECHREPORT{QAAEng2015, + AUTHOR = {Best, R. and Cleland, D. and Cooke, G. and Fidler, K. and Grieg, A. and O'Doherty, D. and Sambell, A. and Kerfoot, C.}, + TITLE = {Engineering}, + INSTITUTION = {The Quality Assurance Agency for Higher Education}, + YEAR = {2015}, + address = {Gloucester, UK}, +} + +@TECHREPORT{QAAMaths2007, + AUTHOR = {Lawson, D. and Giblin, P. and Goodall, G. and Grove, M. and Johns, S. and MacKay, N. and Steele, N. }, + TITLE = {Mathematics, statistics and operational research}, + INSTITUTION = {The Quality Assurance Agency for Higher Education}, + YEAR = {2007}, +} +# https://www.qaa.ac.uk/academicinfrastructure/benchmark/statements/Maths07.pdf + +@TECHREPORT{QAAMaths2015, + AUTHOR = {Lawson, D. and Arrowsmith, D. and Bailey, T. and Griffiths, J. and McAlinden, M. and Osbaldestin, A. and Rogers, A. and Taylor, C. and Warren, J.}, + TITLE = {Mathematics, statistics and operational research}, + INSTITUTION = {The Quality Assurance Agency for Higher Education}, + YEAR = {2015}, + address = {Gloucester, UK}, +} + +@ARTICLE{Qian2017, + author = {Qian, Y. and Lehman, J.}, + title = {Students' Misconceptions and Other Difficulties in Introductory Programming: A Literature Review}, + journal = {ACM Transactions on Computing Education}, + year = {2017}, + volume = {18}, + number = {1}, + pages = {1--24}, + month = {December}, + doi = {10.1145/3077618}, +} + +@MANUAL{QTI2.1, + TITLE = {IMS Question and Test v2.1 Public Draft 2}, + author = {Lay,S.}, + organization = {IMS Global Learning Consortium}, + year = {2006}, + source = {\href{http://www.imsglobal.org/question/}{http://www.imsglobal.org/question/}}, +} +#http://www.imsglobal.org/question/qtiv2p1pd2/imsqti_oviewv2p1pd2.html + +@PHDTHESIS{Quigley1988, + AUTHOR = {Quigley, M.~T.}, + TITLE = {Computer Tutoring in Mathematics Education Using Artificial Intelligence Tools}, + SCHOOL = {University of Birmingham}, + YEAR = {1988}, + type = {PhD}, +} + +@ARTICLE{Quinney2003, + author = {Quinney, D.}, + title = {e-Grade: A Computer Assisted Assessment System}, + journal = {LTSN Maths CAA Series}, + year = {2003}, + month = {February}, + note = {{\tt http://ltsn.mathstore.ac.uk/articles/maths-caa-series/feb2003/index.shtml}} +} + +@BOOK{Quadling1955, + author = {Quadling, D.}, + title = {Mathematical Analysis}, + publisher = {Oxford University Press}, + year = {1955}, +} + +@ARTICLE{TELRI, + author = {Roach, M. and Blackmore, P. and Dempster, J.}, + title = {Supporting high level learning through research-based methods}, + journal = {Innovations in Education and Training International}, + year = {2001}, + volume = {38}, + number = {4}, + note = {\href{http://www.telri.ac.uk/}{{\tt http://www.telri.ac.uk/}} (viewed June 2008)}, +} + +@ARTICLE{Rabin2013, + author = {Rabin, J.~M. and Fuller, E. and Harel, G.}, + title = {Double negative: The necessity principle, commognitive conflict, and negative number operations}, + journal = {Journal of Mathematical Behavior}, + year = {2013}, + volume = {32}, + pages = {649--659}, +} +#10.1016/j.jmathb.2013.08.001 + +@ARTICLE{Raman2004, + author = {Raman, M.}, + title = {Epistemological messages conveyed by three high-school and college mathematics textbooks}, + journal = {The Journal of Mathematical Behavior}, + year = {2004}, + volume = {23}, + number = {4}, + pages = {389--404}, +} + + +@ARTICLE{Ramsden2004, + author = {Ramsden, P}, + title = {\href{http://ltsn.mathstore.ac.uk/articles/maths-caa-series/june2004/}{Fresh Questions, Free Expressions: METRIC's Web-based Self-test Exercises}}, + journal = {Maths Stats and OR Network online CAA series \href{http://ltsn.mathstore.ac.uk/articles/maths-caa-series/}{{\tt http://ltsn.mathstore.ac.uk/articles/maths-caa-series/}}}, + year = {2004}, + month = {June}, +} + +@BOOK{Ralston2003, + author = {Ralston, A. and Reilly, E. and Hemmendinger, D.}, + title = {Encyclopedia of computer science}, + publisher = {Wiley}, + year = {2003}, +} + +@article{Rasch1960, + author = {Rasch, G.}, + title = {{Probabilistic models for some intelligence and achievement tests}}, + year = {1960}, + journal = {Copenhagen: Danish Institute for Educational Research}, +} + +@INCOLLECTION{Rash99, + author = {Rash, A.~M.}, + title = {Student-created problems demonstrate knowledge and understanding}, + booktitle = {Assessment Practices in Undergraduate Mathematics}, + publisher = {Mathematical Association of America}, + year = {1999}, + editor = {Gold, B. and Keith, S.~Z. and Marion, W.~A.}, + pages = {106--108}, + series = {Mathematical Association of America Notes}, + volume = {49}, +} + +@INPROCEEDINGS{Rasila2007, + AUTHOR = {Rasila, A. and Harjula, M. and Zenger, K.}, + TITLE = {Automatic assessment of mathematics exercises: Experiences and future prospects}, + BOOKTITLE = {ReflekTori 2007: Symposium of Engineering Education}, + YEAR = {2007}, + pages = {70--80}, + organization = {Helsinki University of Technology, Finland}, + publisher = {Teaching and Learning Development Unit, {\tt http://www.dipoli.tkk.fi/ok}}, + url = {http://opetuki2.tkk.fi/p/reflektori2007/refl07paptodo/nettiin/id29\_OHJELMAAN\_Rasila\_ eka nettiversio\_Automatic assessment of mathematics exercises.pdf} +} +#http://opetuki.tkk.fi/p/reflektori2007en/?p=english + +@INPROCEEDINGS{Rasila2010, + AUTHOR = {Rasila, A. and Havola, L. and Majander, H. and Malinen, J.}, + TITLE = {Automatic assessment in engineering mathematics: evaluation of the impact}, + BOOKTITLE = {ReflekTori 2010: Symposium of Engineering Education}, + YEAR = {2010}, + pages = {}, + organization = {Aalto University, Finland}, + publisher = {Teaching and Learning Development Unit, {\tt http://www.dipoli.tkk.fi/ok}}, +} +#http://opetuki2.tkk.fi/p/reflektori2010/index.en.php + +@ARTICLE{Rasila2015, + author = {Rasila, A. and Malinen, J. and Tiitu, H.}, + title = {Automatic assement and conceptual understanding}, + journal = {Teaching Mathematics and its Applications}, + year = {2015}, + volume = {34}, + number = {3}, + pages = {149--159}, + doi = {doi:10.1093/teamat/hrv013}, +} + +@INPROCEEDINGS{Rasila2016b, + author = {Rasila, A.}, + title = {E-Assessment Material Bank ABACUS}, + booktitle = {Proceedings of EDILEARN16, 8th Annual International Conference on Education and New Learning Technologies}, + month = {July}, + year = {2016}, + url = {https://library.iated.org/view/RASILA2016EAS} +} + +@INPROCEEDINGS{Rasila2016c, + author = {Rasila, A. and Malinen, J.}, + title = {MOOCs in First Year Engineering: Mathematics Experiences and Future Aims}, + booktitle = {Proceedings of 44th SEFI Conference, Tampere, Finland}, + month = {September}, + year = {2016}, + url = {http://www.sefi.be/conference-2016/papers/Open\_and\_Online\_Engineering\_Education/rasila-moocs-in-first-year-engineering-mathematics-92\_a.pdf} +} + +@BOOK{Reade1986, + author = {Reade, J.~B.}, + title = {An Introduction to Mathematical Analysis}, + publisher = {Oxford Science Publications}, + year = {1986}, +} + +@MASTERSTHESIS{Read2012, + AUTHOR = {Read, M.J.}, + TITLE = {Developing a Computer Algebra System for use in Computer-Aided Assessment}, + SCHOOL = {University of Birmingham}, + YEAR = {2012}, + type = {{BSc} Project}, +} + +@ARTICLE{Reason2000, + author = {Reason, J.}, + title = {Human error: models and management}, + journal = {British Medical Journal}, + year = {2000}, + volume = {320}, + pages = {768--70}, + month = {March}, +} + +@ARTICLE{Renkl2004, + author = {Renkl, A. and Atkinson, R.~K. and Gross, C.~S.}, + title = {How FadingWorked Solution Steps Works – A Cognitive Load Perspective}, + journal = {Instructional Science}, + year = {2004}, + volume = {32}, + pages = {59--82}, + doi = {10.1023/B:TRUC.0000021815.74806.f6}, +} + +@INPROCEEDINGS{Rezat2006, + author = {Rezat, S.}, + title = {A Model of Textbook Use}, + booktitle= {Proceedings of the Annual Conference of the International Group for the Psychology of Mathematics Education (30th, Prague, Czech Republic)}, + year = {2006}, + volume = {4}, + pages = {409--416}, +} +# ftp://ftp.gwdg.de/pub/EMIS/proceedings/PME30/4/409.pdf + +@INPROCEEDINGS{Rezat2009, + author = {Rezat, S.}, + title = {The utilization of mathematics textbooks as instruments for learning}, + booktitle = {Proceedings of CERME6, Lyon France}, + year = {2009}, + volume = {Working Group 7}, + pages = {1260--1269}, +} +# http://www.inrp.fr/editions/cerme6 + +@PHDTHESIS{Richardson1966, + AUTHOR = {Richardson, D.}, + TITLE = {Solvable and Unsolvable Problems Involving Elementary Functions of a Real Variable}, + SCHOOL = {University of Bristol}, + YEAR = {1966}, +} + +@article{Richardson1968, + title = {Some undecidable problems involving elementary functions of a real variable}, + author = {Richardson, D.}, + journal = {Journal of Symbolic Logic}, + volume = {33}, + number = {4}, + pages = {514--520}, + issn = {0022-4812}, + year = {1968}, + doi = {10.2307/2271358}, +} + +@TECHREPORT{Ripley2009, + AUTHOR = {Ripley, M. and Tafler, J. and Ridgway, J. and Harding, R.}, + TITLE = {{JISC} Final Report --- Review of Advanced e-Assessment Techniques}, + INSTITUTION = {JISC}, + YEAR = {2009}, + type = {JISC Capital Programme --- e-learning}, +} +# http://www.jisc.ac.uk/media/documents/projects/raeatfinalreportpdf.pdf + +@MANUAL{Roads2016, + title = {e-Assessment survey}, + author = {Roads, M.}, + organization = {Joint Information Systems Committee}, + month = {May}, + year = {2016}, +} + +@BOOK{Robson51, + author = {Broadbent, T.~A.~A. and Busbridge, I.~W. and Goodstein, R.~L. and Langford, W.~J. and Manisty, J.~C. and Palmer, A.~H.~G. and Prag, A. and Robson, A. and Snell, K.~S.}, + title = {The teaching of calculus in schools: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd. London}, + year = {1951}, +} + +@ARTICLE{Roberts2001, + AUTHOR = {Roberts, D.~L.}, + TITLE = {{E.~H.Moore's} Early Twentieth-Century Program for Reform in Mathematics Education}, + JOURNAL = {American Mathematical Monthly}, + YEAR = {2001}, + volume = {108}, + pages = {689--696}, + month = {October}, +} + +@ARTICLE{Robinson2017, + author = {Robinson, K.~M. and Dub\'{e}, A.~K. and Beatch, J.}, + title = {Children’s understanding of additive concepts}, + journal = {Journal of Experimental Child Psychology}, + year = {2017}, + volume = {156}, + pages = {16--28}, + doi = {10.1016/j.jecp.2016.11.009}, +} + +@ARTICLE{Rodrigues2006, + author = {Rodriguez, M.~C.}, + title = {Construct Equivalence of Multiple-Choice and Constructed-Response Items: A Random Effects Synthesis of Correlations}, + journal = {Journal of Educational Measurement}, + year = {2003}, + volume = {40}, + number = {2}, + pages = {163--184}, + month = {June}, + doi = {10.1111/j.1745-3984.2003.tb01102.x}, +} + +@ARTICLE{RoosHamilton2005, + AUTHOR = {Roos, B. and Hamilton, D.}, + TITLE = {Formative assessment: a cybernetic viewpoint}, + JOURNAL = {Assessment in Education: Principles, Policy \& Practice}, + YEAR = {2005}, + volume = {12}, + number = {1}, + pages = {7--20}, +} + +@INCOLLECTION{Rosenberg1960, + author = {Rosenberg, M. and Hovland, C.}, + title = {Cognitive, affective and behavioral components of attitudes}, + booktitle = {Attitude Organization and Change: An Analysis of Consistency Among Attitude Components}, + publisher = {Yale University Press}, + year = {1960}, + volume = {3}, + pages = {1--14}, +} + +@INBOOK{Ross2006, + AUTHOR = {Ross, S.~M. and Jordan, S.~E. and Butcher, P.~G.}, + TITLE = {Innovative assessment in Higher Education}, + CHAPTER = {Online instantaneous and targeted feedback for remote learners}, + pages = {123--131}, + PUBLISHER = {Routledge}, + YEAR = {2006}, +} + +@ARTICLE{Roth2008, + AUTHOR = {Roth, V. and Ivanchenko, V. and Record, N.}, + TITLE = {Evaluating student response to WeBWorK, a web-based homework delivery and grading system}, + JOURNAL = {Computers and Education}, + YEAR = {2008}, + volume = {50}, + number = {4}, + pages = {1462--1482}, +} + +@inproceedings{Roy2010, + author = {Roy, S. and Alcock, L. and Inglis, M.}, + booktitle = {Proceedings of the 13th Conference on Research in Undergraduate Mathematics Education}, + title = {Undergraduates Proof Comprehension: A Comparative Study of Three Forms of Proof Presentation}, + year = {2010} +} + + +@ARTICLE{Richards1980, + author = {Richards, J.~L.}, + title = {The art and science of {British algebra}: a study in the perception of mathematical truth}, + journal = {Historia Mathematica}, + year = {1980}, + volume = {7}, + number = {3}, + pages = {343--365}, + doi = {10.1016/0315-0860(80)90028-2}, +} + +@incollection{Richards1991, + author = {Richards, J.}, + title = {Mathematical Discussions}, + booktitle= {Radical constructivism in mathematics education}, + editor = {von Glasersfeld}, + chapter = {2}, + pages = {13--51}, + publisher = {Kluwer Academic Publishers}, + year = {1991}, +} + +@TECHREPORT{Ridgeway2004, + AUTHOR = {Ridgeway, J. and McCusker, S. and Pead, D.}, + TITLE = {Literature Review of {E}--assessment}, + INSTITUTION = {Futurelab}, + YEAR = {2004}, + type = {Futurelab Series}, + number = {10}, + note = {ISBN: 0-9544695-8-5} +} + +@ARTICLE{Rittle2001, + author = {Rittle-Johnson, B. and Siegler, R. and Alibali, M.}, + title = {Developing conceptual understanding and procedural skill in mathematics: An iterative process}, + journal = {Journal of Educational Psychology}, + year = {2001}, + volume = {93}, + pages = {346--362}, +} + +@ARTICLE{Rittle2011, + author = {Rittle-Johnson, B. and Matthews, P.~G. and Taylor, R.~S. and McEldoon, K.~L.}, + title = {Assessing Knowledge of Mathematical Equivalence: A Construct-Modeling Approach}, + journal = {Journal of Educational Psychology}, + year = {2011}, + volume = {103}, + number = {1}, + pages = {85--104}, + doi = {10.1037/a0021334}, +} + +@ARTICLE{Robins2003, + author = {Robins, A. and Rountree, J. and Rountree, N.}, + title = {Learning and teaching programming: A literature review}, + journal = {Computer Science Education}, + year = {2003}, + volume = {13}, + number = {2}, + pages = {137--172}, + doi = {10.1076/csed.13.2.137.14200} +} + +@ARTICLE{Rowland2005, + author = {Rowland, T. and Huckstep, P. and Thwaites, A.}, + title = {Elementary Teachers’ Mathematics Subject Knowledge: the Knowledge Quartet and the Case of Naomi}, + journal = {Journal of Mathematics Teacher Education}, + year = {2005}, + volume = {8}, + number = {3}, + pages = {255--281}, + month = {June}, +} + +@BOOK{Rowland2011, + editor = {Rowland, T. and Ruthven, K.}, + title = {Mathematical Knowledge in Teaching}, + publisher = {Springer}, + year = {2011}, +} + +@MASTERSTHESIS{Ruokokoski2009, + AUTHOR = {Ruokokoski, J.}, + TITLE = {Automatic Assessment in University-level Mathematics}, + SCHOOL = {Helsinki University of Technology}, + YEAR = {2009}, +} + +@INPROCEEDINGS{Rubin2013, + author = {Rubin, M.~J.}, + title = {The Effectiveness of Live-Coding to Teach Introductory Programming}, + booktitle = {SIGCSE '13 Proceeding of the 44th ACM technical symposium on Computer science education}, + year = {2013}, + pages = {651--656}, + doi = {10.1145/2445196.2445388}, +} +# http://dl.acm.org/citation.cfm?id=2445388 + +@article{Sadler1989, + author = {Sadler, D.~R.}, + title = {Formative assessment and the design of instructional systems}, + year = {1989}, + journal = {Instructional Science Instructional Science}, + number = {2}, + pages = {119--144}, + volume = {18}, + url = {http://www.jstor.org/stable/23369143} +} + +@ARTICLE{Sadler1998, + AUTHOR = {Sadler, D.~R.}, + TITLE = {Formative Assessment: revisiting the territory}, + JOURNAL = {Assessment in Education: Principles, Policy \& Practice}, + YEAR = {1998}, + volume = {5}, + number = {1}, + pages = {77--84}, + doi = {10.1080/0969595980050104}, +} + +@TECHREPORT{Sahami2013, + author = {Sahami, M. and Roach, S.}, + title = {Computer Science Curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science}, + institution = {Association for Computing Machinery (ACM) and IEEE Computer Society}, + year = {2013}, + doi = {10.1145/2534860}, + isbn = {978-1-4503-2309-3} +} + +@ARTICLE{Sana2013, + author = {Sana, F. and Weston, T. and Cepeda, N.~J.}, + title = {Laptop multitasking hinders classroom learning for both users and nearby peers}, + journal = {Computers and Education}, + year = {2013}, + volume = {62}, + pages = {24--31}, + month = {March}, + doi = {10.1016/j.compedu.2012.10.003}, +} + +@BOOK{Saunderson1710, + author = {Saunderson, N.}, + title = {The Elements of Algebra in Ten Books}, + publisher = {Cambridge University Press}, + year = {1710}, + doi = {10.3931/e-rara-8734} +} + +@BOOK{Schoenfeld1985, + author = {Schoenfeld, A.~H.}, + title = {Mathematical problem solving}, + publisher = {Academic}, + year = {1985}, + address = {Orlando, USA}, +} + +@article{Schoenfeld1987, + Title = {What's All the Fuss About Metacognitlon?}, + Author = {Schoenfeld,~A.~H.}, + Journal = {Cognitive Science and Mathematics Education}, + Pages = {189}, + Year = {1987}, + Publisher = {Lawrence Erlbaum} +} + +@article{Schoenfeld1988, + Title = {When good teaching leads to bad results: The disasters of ``well-taught-- mathematics courses. }, + Author = {Schoenfeld,~A.~H.}, + Journal = {Educational Psychologist}, + Pages = {145--166}, + Year = {1988}, + volume = {23}, + number = {2}, +} + +@INCOLLECTION{Schoenfeld1992, + AUTHOR = {Schoenfeld, A.}, + TITLE = {Learning to think mathematically: problem solving, metacognition, and sense-making in mathematics}, + BOOKTITLE = {Handbook for Research on Mathematics Teaching and Learning}, + PUBLISHER = {MacMillan, New York}, + YEAR = {1992}, + editor = {Grouws, D.}, + pages = {334--370}, +} + +@ARTICLE{Schoenfeld2000Purposes, + AUTHOR = {Schoenfeld, A.}, + TITLE = {Purposes and Methods of Research in Mathematics Education}, + JOURNAL = {Notices of the AMS}, + YEAR = {2000}, + volume = {47}, + number = {6}, + pages = {641--649}, +} + +@ARTICLE{Schoenfeld2004MathWars, + AUTHOR = {Schoenfeld, A.}, + TITLE = {The Math Wars}, + JOURNAL = {Educational Policy}, + YEAR = {2004}, + volume = {18}, + number = {1}, + pages = {253--286}, + doi = {10.1177/0895904803260042}, +} + +@article{Schubring2011, + author = {Schubring, G.}, + title = {On how $n$ and $i$ turned out to become indices in mathematical sequences and formulae}, + year = {2011}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {77}, + number = {2--3}, + pages = {331--350}, + doi = {10.1007/s10649-010-9286-x}, + url= {10.1007/s10649-010-9286-x}, + publisher= {Springer Netherlands}, + keywords= {Generalisation; Algebraisation; Emergence of symbolisation; Index notation; Learner difficulties; Lacroix; Hindenburg; Dirksen}, + language= {English} +} + +@ARTICLE{Schwinning2018, + author = {Schwinning, N. and Striewe, M. and Massing, T. and Hanck, C. and Goedicke, M.}, + title = {Towards digitalisation of summative and formative assessments in academic teaching of statistics}, + journal = {?}, + year = {2018}, +} +# https://arxiv.org/abs/1811.02391?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+arxiv%2FQSXk+%28ExcitingAds%21+cs+updates+on+arXiv.org%29 + +@ARTICLE{Scott2001, + author = {Scott, B.}, + title = {Gordon {P}ask's Conversation Theory: A domain independent constructivist model of human knowing}, + journal = {Foundations of Science}, + year = {2001}, + volume = {6}, + number = {4}, + pages = {343--360}, +} + +@UNPUBLISHED{Seabury2019, + author = {Seabury, A.}, + title = {Automating Mathematical Assessments of proof using {STACK}}, + note = {Unpublished dissertation, {Loughborough University}}, + year = {2019}, +} + +@INCOLLECTION{Selden92, + author = {Selden, A. and Selden, J.}, + title = {Research perspectives on concepts of functions}, + booktitle = {The concept of function}, + publisher = {Mathematical Association of America}, + year = {1992}, + editor = {Harel, G. and Dubinsky, E.}, + pages = {1--16}, + series = {Mathematical Association of America Notes}, + volume = {25}, +} + +@ARTICLE{Self1974, + AUTHOR = {Self, J.~A.}, + TITLE = {Student models in computer-aided instruction}, + JOURNAL = {International Journal of Machine Studies}, + YEAR = {1974}, + volume = {6}, + issue = {2}, + pages = {261--276}, +} + +@TECHREPORT{Setren2019, + author = {Setren, E. and Greenberg, K. and Moore, O. and Yankovich, M.}, + title = {Effects of the Flipped Classroom: Evidence from a Randomized Trial}, + institution = {MIT Department of Economics}, + year = {2019}, + type = {SEII Discussion Paper}, + number = {2019.07}, + address = {77 Massachusetts Avenue, Bldg E52-300, Cambridge, MA 02139}, + month = {August}, + source = {http://seii.mit.edu/research/study/effects-of-the-flipped-classroom-evidence-from-a-randomized-trial/}, +} + +@INPROCEEDINGS{Sfard89, + author = {Sfard, A.}, + title = {Transition from operational to structural conception: the notion of function revisited}, + booktitle= {Proceedings of the Annual Conference of the International Group for the Psychology of Mathematics Education (13th, Paris, France)}, + volume = {3}, + pages = {151--158}, + year = {1989}, + month= {July 9--13} +} + +@article{Sfard1991, + author = {Sfard, A.}, + title = {On the dual nature of mathematical conceptions: Reflections on processes and objects as different sides of the same coin}, + journal = {Educational Studies in Mathematics}, + volume = {22}, + number = {1}, + pages = {1--36}, + year = {1991}, +} + +@article{Sfard2007, + author = {Sfard, A.}, + title = {When the Rules of Discourse Change, but Nobody Tells You: Making Sense of Mathematics Learning From a Commognitive Standpoint}, + journal = {Journal of the Learning Sciences}, + volume = {16}, + number = {4}, + pages = {565--613}, + year = {2007}, + doi = {10.1080/10508400701525253}, +} + +@TECHREPORT{Shadbolt2016, + author = {Shadbolt, N.}, + title = {Shadbolt Review of Computer Sciences Degree Accreditation and Graduate Employability}, + institution = {Department for Business, Innovation and Skills}, + address = {London, UK}, + year = {2016}, +} +# https://www.gov.uk/government/publications/computer-science-degree-accreditation-and-graduate-employability-shadbolt-review + +@ARTICLE{Shane2009, + author = {Shane, G.~K. and Lee, O. and Wilson, K.}, + title = {Gender Differences in Mathematics Self-Efficacy and Back Substitution in Multiple-Choice Assessment}, + journal = {Journal of Adult Education}, + year = {2009}, + volume = {38}, + number = {1}, + pages = {22--42}, +} + +@ARTICLE{Shapiro2017, + author = {Shapiro, H.~B. and Lee, C.~H. and Wyman Roth, N.~E. and Li, K. and Çetinkaya-Rundel, M. and Canelas, D.~A.}, + title = {Understanding the massive open online course (MOOC) student experience: An examination of attitudes, motivations, and barriers}, + journal = {Computers and Education}, + volume = {110}, + number = {Supplement C}, + pages = {35--50}, + year = {2017}, + doi = {10.1016/j.compedu.2017.03.003}, +} + +@ARTICLE{Shepard2008, + author = {Shepard, L.~S.}, + title = {Commentary on the National Mathematics Advisory Panel Recommendations on Assessment}, + journal = {Educational Researcher}, + year = {2008}, + volume = {37}, + number = {9}, + pages = {602--609}, + doi = {10.3102/0013189X08328001}, +} + + +@article{Shield2013, + author = {Shield, M. and Dole, S.}, + title = {Assessing the potential of mathematics textbooks to promote deep learning}, + year = {2013}, + journal = {Educational Studies in Mathematics}, + volume = {82}, + number = {2}, + pages = {183--199}, + doi = {10.1007/s10649-012-9415-9}, + publisher = {Springer, Netherlands}, +} + +@ARTICLE{Shulman1986, + author = {Shulman, L.~S.}, + title = {Those Who Understand: Knowledge Growth in Teaching}, + journal = {Educational Researcher}, + year = {1986}, + volume = {15}, + number = {2}, + pages = {4--14}, + month = {Feb}, +} + +@ARTICLE{Shulman1987, + author = {Shulman, L.~S.}, + title = {Knowledge and Teaching: Foundations of the New Reform}, + journal = {Harvard Educational Review}, + year = {1987}, + volume = {57}, + number = {1}, + pages = {1--23}, +} + +@INBOOK{Shute2007, + AUTHOR = {Shute, V.~J.}, + TITLE = {The future of assessment: Shaping teaching and learning.}, + CHAPTER = {Tensions, trends, tools, and technologies: Time for an educational sea change.}, + pages = {139--187}, + PUBLISHER = {Taylor and Francis Group}, + YEAR = {2007}, +} + +@TECHREPORT{SI2006, + institution = {Bureau International des Poids et Mesures}, + year = {2006}, + number = {8th edition}, + address = {Paris, France}, +} + +@ARTICLE{Siegmund2014, + author = {Siegmund, J. and K\"{a}stner, C. and Liebig, J. and Apel, S. and Hanenber, S.}, + title = {Measuring and modeling programming experience}, + journal = {Empirical Software Engineering}, + year = {2014}, + volume = {19}, + number = {5}, + pages = {1299--1334}, + month = {October}, +} +# An extended version of Feigenspan2011 + +@INPROCEEDINGS{Siddiqi2008, + author = {Siddiqi, R. and Harrison, C.~J.}, + title = {On the automated assessment of short free-text responses}, + booktitle= {Proceedings of the 34th International Association for Educational Assessment (IAEA)}, + year = {2008}, +} + +@book{Sierpinska1994, + author = {Sierpinska, A.}, + title = {Understanding in mathematics}, + year = {1994}, + publisher = {Falmer}, + address = {London, UK}, +} + +@article{Sierpinska2011, + author = {Sierpinska, A. and Bobos, G. and Pruncut, A.}, + title = {Teaching absolute value inequalities to mature students}, + year = {2011}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {78}, + number = {3}, + pages = {275--305}, + doi = {10.1007/s10649-011-9325-2}, + url = {10.1007/s10649-011-9325-2}, + publisher = {Springer Netherlands}, + keywords = {Absolute value inequalities; Mature students; Prerequisite mathematics courses; Learning by example; Theoretical thinking; Teaching experiment}, + language = {English} +} + + +@article{Simon2004, + title = {Explicating the role of mathematical tasks in conceptual learning: An elaboration of the hypothetical learning trajectory}, + author = {Simon, M.~A. and Tzur, R.}, + journal = {Mathematical Thinking and Learning}, + volume = {6}, + number = {2}, + pages = {91--104}, + year = {2004}, +} + +@article{Simon2009, + title = {Amidst Multiple Theories of Learning in Mathematics Education}, + author = {Simon, M.~A.}, + journal = {Journal for Research in Mathematics Education}, + volume = {40}, + number = {5}, + pages = {477--490}, + year = {2009}, + url = {http://www.jstor.org/stable/40539353}, + ISSN = {00218251}, + abstract = {Currently, there are more theories of learning in use in mathematics education research than ever before (Lerman \& Tsatsaroni, 2004). Although this is a positive sign for the field, it also has brought with it a set of challenges. In this article, I identify some of these challenges and consider how mathematics education researchers might think about, and work with, the multiple theories available. I present alternatives to views of the competition or supersession of theories and indicate the kinds of discussions that will support effective theory use in mathematics education research. I describe the potential for mathematics education researchers to make informed, justified choices of a theory or theories to address particular research agendas.}, + publisher = {National Council of Teachers of Mathematics}, +} + +@ARTICLE{Simon2017, + author = {Simon, M.~A.}, + title = {Explicating {\em mathematical concept} and {\em mathematical conception} as theoretical constructs for mathematics education research}, + journal = {Educational Studies in Mathematics}, + year = {2017}, + volume = {94}, + pages = {117--137}, + doi = {10.1007/s10649-016-9728-1}, +} + +@inproceedings{Simon2018, + author = {Simon and Sheard, J. and Morgan, M. and Peterson, A. and Settle, A. and Sinclair, J.}, + title = {Informing Students about Academic Integrity in Programming}, + booktitle = {Proceedings of the 20th Australasian Computing Education Conference}, + year = 2018, + pages = {113--122}, + publisher = {Zenodo}, + doi = {10.1145/3160489.3160502}, +} + +@ARTICLE{Simpson2015, + author = {Simpson, A.}, + title = {The anatomy of a mathematical proof: Implications for analyses with Toulmin’s scheme}, + journal = {Educational Studies in Mathematics}, + year = {2015}, + volume = {90}, + pages = {1--17}, + doi = {10.1007/s10649-015-9616-0}, +} + +@ARTICLE{Simpson2017, + author = {Simpson, A.}, + title = {The misdirection of public policy: comparing and combining standardised effect sizes}, + journal = {Journal of Education Policy}, + year = {2017}, + volume = {32}, + number = {4}, + pages = {450--466}, + doi = {10.1080/02680939.2017.1280183}, +} + +@ARTICLE{Singh2002, + author = {Singh, C.}, + title = {When physical intuition fails}, + journal = {American Journal of Physics}, + year = {2002}, + volume = {70}, + number = {11}, + pages = {1103--1109}, + month = {October}, + doi = {10.1119/1.1512659}, +} + +@TECHREPORT{Singley1995, + AUTHOR = "Singley, M.~K. and Bennett, R.~E.", + TITLE = "Toward computer-based performance assessment in mathematics", + INSTITUTION = "Educational Testing Service", + YEAR = "1995", + type = "Research Report", + month = "October", +} + +@BOOK{Simons1992, + author = {Simons, F.}, + title = {Mathematical modelling courses for engineering education}, + chapter = {Issues involved in teaching calculus with computer algebra systems.}, + publisher = {Berlin: Springer-Verlag}, + year = {1992}, + volume = {132}, + series = {NATO ASI series F}, +} +# Editors E. Ersoy, & A. O. Moscardini, . + +@BOOK{Skemp1971, + author = {Skemp, R.~R.}, + title = {The psychology of learning mathematics}, + publisher = {Penguin}, + year = {1971}, +} + +@BOOK{Sleeman1982, + Editor = {Sleeman, D. and Brown, J.~S.}, + TITLE = {Intelligent Tutoring Systems}, + PUBLISHER = {Academic Press}, + YEAR = {1982}, +} + +@ARTICLE{Sperber1995, + AUTHOR = {Sperber, D. and Cara, F. and Girotto, V.}, + TITLE = {Relevance theory explains the selection task}, + JOURNAL = {Cognition}, + YEAR = {1995}, + volume = {57}, + pages = {31--95}, +} + +@ARTICLE{Speer2002, + author = {Speer, N.~M. and Smith, III, J.~P. and Horvath, A.}, + title = {Collegiate mathematics teaching: An unexamined practice}, + journal = {Journal of Mathematical Behavior}, + year = {2001}, + volume = {29}, + number = {2}, + pages = {99--114}, +} + +@ARTICLE{Spicker2011, + author = {Spicker, P.}, + title = {Ethical Covert Research}, + journal = {Sociology}, + year = {2011}, + volume = {45}, + number = {1}, + pages = {118-133}, + doi = {10.1177/0038038510387195}, +} + +@ARTICLE{Spooren2013, + author = {Spooren, P. and Brockx, B. and Mortelmans, D.}, + title = {On the Validity of Student Evaluation of Teaching: The State of the Art}, + journal = {Review of Educational Research}, + year = {2013}, + volume = {83}, + number = {4}, + pages = {598--642}, + month = {Dec}, + doi = {10.3102/0034654313496870}, +} + +@ARTICLE{Spottiswoode1865, + author = {Spottiswoode, W.}, + title = {On the recent progress of mathematical and physical sciences}, + journal = {The Educational Times and Journal of the College of Preceptors}, + year = {1865}, + volume = {16}, + number = {56}, + pages = {176--178}, + month = {November}, +} + +@ARTICLE{Smith1993, + author = {Smith, G. and Petocz, P.}, + title = {Proofs: Teaching and testing --- a tragedy in three acts}, + journal = {International Journal of Mathematics Education in Science and Technology}, + year = {1993}, + volume = {25}, + number = {1}, + pages = {139--155}, + doi = {10.1080/0020739940250118}, +} + + +@ARTICLE{Smith1996, + author = {Smith, G. and Wood, L. and Coupland, M. and Stephenson, B.}, + title = {Constructing mathematical examinations to assess a range of knowledge and skills}, + journal = {International Journal of Mathematics Education in Science and Technology}, + year = {1996}, + volume = {27}, + number = {1}, + pages = {65--77}, +} + +@BOOK{Smith2001, + author = {Smith, J. and Stray, C.}, + title = {Teaching and Learning in 19th-Centaury {Cambridge}}, + publisher = {The Boydell Press}, + address = {Woodbridge, Suffolk}, + year = {2001}, + volume = {4}, + series = {History of the University of Cambridge Texts and Studies}, +} +# http://books.google.co.uk/books?id=P0X7F4mLTpkC&dq=Wood+algebra+Lund+1841&source=gbs_navlinks_s + + +@TECHREPORT{Smith2004, + AUTHOR = {Smith, A.}, + TITLE = {Making Mathematics Count: The report of Professor {Adrian Smith's} Inquiry into Post-14 Mathematics Education}, + INSTITUTION = {The Stationery Office Limited}, + YEAR = {2004}, +} + +@BOOK{SMP-NEW-BOOK, + editor = {The School Mathematics Project}, + title = {The School Mathematics Project}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + year = {1983}, + series = {SMP New Books 1--5}, +} + +@BOOK{SMP-ADVANCED, + editor = {Howson, A.~G. and Dodd, S.~D.}, + title = {The School Mathematics Project Advanced Mathematics}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + year = {1967}, + edition = {(metric)}, + series = {SMP Advanced Mathematics Books 1--5}, +} + +@TECHREPORT{SMP-manipulative, + key = {SMP}, + title = {Manipulative Skills in School Mathematics}, + institution = {The School Mathematics Project}, + year = {1974}, +} + +@article{Stacey2009, + author = {Stacey, K. and Vincent, J.}, + title = {Modes of reasoning in explanations in {Australian} eighth-grade mathematics textbooks}, + year = {2009}, + issn = {0013-1954}, + journal = {Educational Studies in Mathematics}, + volume = {72}, + number = {3}, + pages = {271--288}, + doi = {10.1007/s10649-009-9193-1}, + publisher = {Springer Netherlands}, + keywords = {Modes of reasoning; Proof schemes; Mathematical explanation; Textbooks; Secondary mathematics}, +} + +@article{Steel2002, + title={A new scheme for computing with algebraically closed fields}, + author={Steel, A.}, + journal={Lecture Notes In Computer Science}, + pages={491--505}, + year={2002}, + publisher={Springer} +} + +@UNPUBLISHED{Steele2003, + AUTHOR = {Steele, J.~D.}, + TITLE = {Setting Linear Algebra Problems}, + NOTE = {Preprint, University of New South Wales, PM 97/2. {\tt http://web.maths.unsw.edu.au/$\tilde{\ }$jds/Papers/linalg.pdf}}, + year = {2003}, +} + +@BOOK{Steinberg1984, + AUTHOR = {Steinberg, E.~R.}, + TITLE = {Teaching computers to teach}, + PUBLISHER = {Lawrence Erlnaum Associates}, + YEAR = {1984}, +} + +@ARTICLE{Stenning1995, + author = {Stenning, K. and Cox, R. and Oberlander, J.}, + title = {Contrasting the Cognitive Effects of Graphical and Sentential Logic Teaching: Reasoning, Representation and Individual Differences}, + journal = {Language and Cognitive Processes}, + year = {1995}, + volume = {10}, + number = {3--4}, + pages = {333-354}, + doi = {10.1080/01690969508407099}, +} + +@ARTICLE{Sterling1989, + author = {Sterling, L. and Bundy, A. and Byrd, L. and O'Keefe R. and Silver, B.}, + title = {Solving Symbolic Equations with {PRESS}}, + journal = {J. Symbolic Computation}, + year = {1989}, + volume = {7}, + pages = {71--84}, +} + +@BOOK{Stigler1999, + author = {Stigler J.~W. and Hiebert J.}, + title = {The teaching gap: best ideas from the world's teachers for improving education in the classroom}, + publisher = {Free press, New York}, + year = {1999}, +} + +@ARTICLE{Strickland02, + author = {Strickland, N.}, + title = {Alice interactive mathematics}, + journal = {MSOR Connections}, + year = {2002}, + volume = {2}, + number = {1}, + pages = {27--30}, + note = {\href{http://ltsn.mathstore.ac.uk/newsletter/feb2002/pdf/aim.pdf}{http://ltsn.mathstore.ac.uk/newsletter/feb2002/pdf/aim.pdf} (viewed December 2002)}, +} + +@ARTICLE{Stoutemyer1979, + author = {Stoutemyer, D. R.}, + title = {Computer symbolic math and education: a radical proposal}, + journal = {Bulletin of the Special Interest Group in Symbolic Algebraic Manipulations of the Association of Computing Machinery}, + year = {1979}, + volume = {13}, + number = {2}, + pages = {8--24}, +} + +@ARTICLE{Stoutemyer1991, + AUTHOR = {Stoutemyer, D.~R.}, + TITLE = {Crimes and misdemeanors in the computer algebra trade}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {1991}, + volume = {38}, + number = {7}, + pages = {778--785}, + month = {September}, +} +# Stoutemyer, D. R., (1991). Crimes and misdemeanors in the computer algebra trade. Notices of the American Mathematical Society, 38(7), 778-785. + +@ARTICLE{Stoutemyer2011, + AUTHOR = {Stoutemyer, D.~R.}, + TITLE = {Ten commandments for good default expression simplification}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {2011}, + volume = {46}, + number = {7}, + pages = {859--887}, + month = {July}, + doi = {10.1016/j.jsc.2010.08.017}, +} + +@ARTICLE{Stoutemyer2012, + AUTHOR = {Stoutemyer, D.~R.}, + TITLE = {Simplifying products of fractional powers of powers}, + JOURNAL = {ACM Communications in Computer Algebra}, + YEAR = {2013}, + volume = {47}, + number = {1/2}, + pages = {26--58}, + month = {March/June}, + doi = {10.1145/2503697.2503707}, +} +# http://arxiv.org/pdf/1203.1350v1.pdf + +@ARTICLE{Stylianidesa2009, + author = {Stylianidesa, G.~J.}, + title = {Reasoning-and-Proving in School Mathematics Textbooks}, + journal = {Mathematical Thinking and Learning}, + year = {2009}, + volume = {11}, + number = {4}, + pages = {258--288}, + doi = {10.1080/10986060903253954}, +} + +@ARTICLE{Suppes1967, + AUTHOR = {Suppes, P.}, + TITLE = {Some theoretical models for mathematics teaching}, + JOURNAL = {Journal of research and development in education}, + YEAR = {1967}, + volume = {1}, + pages = {5--22}, +} + +@ARTICLE{Suppes1995, + AUTHOR = {Suppes, P. and Tryg, A.}, + TITLE = {Computer-based advanced placement calculus for gifted students}, + JOURNAL = {Instructional Science}, + YEAR = {1995}, + volume = {22}, + pages = {339--362}, +} + +@TECHREPORT{Sutherland1997, + author = {Sutherland, R.}, + title = {Teaching and Learning Algebra pre-19}, + institution = {The Royal Society and Joint Mathematics Council}, + year = {1997}, +} +#http://royalsociety.org/uploadedFiles/Royal_Society_Content/policy/publications/1997/10183.pdf + +@ARTICLE{Swan2012, + author = {Swan, M. and Burkhardt, H.}, + title = {Designing assessment of performance in mathematics}, + journal = {Educational Designer}, + year = {2012}, + volume = {2}, + number = {5}, + pages = {1--41}, +} +# http://www.educationaldesigner.org/ed/volume2/issue5/article19/index.htm + +@ARTICLE{Sweller2009, + author = {Sweller, J. and Cooper, G.~A.}, + title = {The Use of Worked Examples as a Substitute for Problem Solving in Learning Algebra}, + journal = {Cognition and Instruction}, + year = {2009}, + volume = {2}, + number = {1}, + pages = {59--89}, + doi = {10.1207/s1532690xci0201_3}, +} + +@ARTICLE{Sweller2016, + author = {Sweller, J.}, + title = {Story of a Research Program}, + journal = {Education Review}, + year = {2016}, + volume = {23}, + pages = {1--9}, + doi = {10.14507/er.v23.2025}, +} + +@TECHREPORT{Swinney2016, + Editor = {Swinney, J.}, + TITLE = {Enhancing learning and teaching through the use of digital technology: a digital learning and teaching strategy for {Scotland}}, + INSTITUTION = {{The Scottish Government}}, + YEAR = {2016}, + ISBN = {978-1-78652-473-7}, + address = {Edinburgh, UK} +} + +@BOOK{Taalman2014, + author = {Taalman, L. and Kohn, P.}, + title = {Calculus}, + publisher = {Freeman}, + year = {2014}, + isbn = {978-1-4292-4186-1}, +} + +@BOOK{Tahta1972, + AUTHOR = "Tahta, D.", + TITLE = "A {B}oolean Anthology: Selected Writings of {M}ary {B}oole on Mathematics Education", + PUBLISHER = "Association of Teachers of Mathematics", + YEAR = "1972", + address = "Derby", +} + + +@ARTICLE{TallVinner1981, + author = {Tall, D.~O. and Vinner, S.}, + title = {Concept image and concept definition in mathematics, with special reference to limits and continuity}, + journal = EdStud, + year = {1981}, + volume = {12}, + pages = {151--169}, +} + +@ARTICLE{Tall1975, + author = {Tall, D.}, + title = {A Long-Term Learning Schema for Calculus and Analysis}, + journal = {Mathematical Education for Teaching}, + year = {1975}, + volume = {2}, + number = {2}, +} + +@BOOK{Tall91, + author = {Tall, D.}, + title = {Advanced mathematical thinking}, + publisher = {Dordrecht: Kluwer}, + year = {1991}, + volume = {11}, + series = {Mathematics Education Library}, +} + +@INBOOK{Tall1991, + author = {Tall, D.}, + title = {Visualization in Mathematics}, + chapter = {Intuition and rigour: the role of visualization in the calculus}, + pages = {105--119}, + publisher = {Mathematical Association of America}, + year = {1991}, + number = {19}, + series = {MAA Notes}, +} + + +@ARTICLE{Tall2000a, + author = {Tall, D. and Thomas, M. and Davis, G. and Gray, E.~M. and Simpson, A.}, + title = {What is the object of the encapsulation of a process?}, + journal = {Journal of Mathematical Behavior}, + year = {2000}, + volume = {18}, + number = {2}, + pages = {1--19}, +} + +@ARTICLE{Tall2004a, + AUTHOR = {Tall, D.}, + TITLE = {Introducing Three Worlds of Mathematics}, + JOURNAL = {For the Learning of Mathematics}, + YEAR = {2004}, + volume = {23}, + number = {4}, + pages = {29--33}, +} + +@ARTICLE{Tall2014, + AUTHOR = {Tall, D. and Katz, M.}, + TITLE = {A cognitive analysis of {Cauchy’s} conceptions of function, continuity, limit and infinitesimal, with implications for teaching the calculus}, + JOURNAL = EdStud, + YEAR = {2014}, + volume = {86}, + number = {1}, + pages = {97--124}, + doi = {10.1007/s10649-014-9531-9} +} + +@ARTICLE{Tallman2016, + author = {Tallman, M.~A. and Carlson, M.~P. and Bressoud, D.~M. and Pearson, M.}, + title = {A Characterization of Calculus I Final Exams in {U.S.} Colleges and Universities}, + journal = {International Journal of Research in Undergraduate Mathematics Education}, + year = {2016}, + volume = {2}, + number = {1}, + pages = {105-133}, + month = {April}, + doi = {10.1007/s40753-015-0023-9}, +} + +@ARTICLE{Tanswell2019, + author = {Tanswell, F.~S.}, + title = {Go Forth and Multiply! On Actions, Instructions and Imperatives in Mathematical Proofs}, + journal = {?}, + year = {2019}, +} + +@TECHREPORT{Taylor2008, + author = {Taylor, B.~N. and Thompson, A.}, + title = {The International System of Units {(SI)}}, + institution = {National Institute of Standards and Technology}, + year = {2008}, + type = {Special Publication}, + number = {330}, + address = {Gaithersburg, MD 20899}, +} + +@ARTICLE{Taylor2014, + author = {Taylor, C. and Zingaro, D. and Porter, L. and Webb, K.~C. and Lee, C.~B. and Clancy, M.}, + title = {Computer science concept inventories: past and future}, + journal = {Computer Science Education}, + year = {2014}, + volume = {24}, + number = {4}, + pages = {253--276}, + doi = {10.1080/08993408.2014.970779}, +} + +@ARTICLE{Tedre2008, + author = {Tedre, M. and Sutinen, E.}, + title = {Three traditions of computing: what educators should know}, + journal = {Computer Science Education}, + year = {2008}, + volume = {18}, + number = {3}, + pages = {153--170}, + doi = {10.1080/08993400802332332}, +} + +@TECHREPORT{Terrier2015, + author = {Terrier, C.}, + title = {Giving a Little Help to Girls? Evidence on Grade Discrimination and its Effect on Students’ Achievement}, + institution = {Centre for Economic Performance, London School of Economics and Political Science}, + year = {2015}, + type = {Discussion Paper}, + number = {CEP 1341}, + month = {March}, +} + +@ARTICLE{Traub1977, + author = {Traub, R.~E, and Fisher, C.~W.}, + title = {On the Equivalence of Constructed--Response and Multiple--Choice Tests}, + journal = {Applied Psychological Measurement}, + year = {1977}, + volume = {1}, + number = {2}, + pages = {355--369}, + month = {June}, + doi = {10.1177/014662167700100304}, +} + +@ARTICLE{Trigwell2012, + AUTHOR = {Trigwell, K. and Caballero Rodriguez, K. and Han, F.}, + TITLE = {Assessing the impact of a university teaching development programme}, + JOURNAL = {Assessment and Evaluation in Higher Education}, + YEAR = {2012}, + volume = {37}, + number = {4}, + pages = {499--511}, +} + +@ARTICLE{Trouche2014, + author = {Trouche, L. and Drijvers, P.}, + title = {Webbing and orchestration. Two interrelated views on digital tools in mathematics education}, + journal = {Teaching Mathematics and Its Applications}, + year = {2014}, + volume = {33}, + number = {3}, + pages = {193--209}, + doi = {10.1093/teamat/hru014}, +} + +@INCOLLECTION{Thomas2003, + AUTHOR = {Thomas, M. and Holton, D.}, + TITLE = {Technology as a tool for teaching undergraduate mathematics}, + BOOKTITLE = {Second international handbook of mathematics education}, + PUBLISHER = {Kluwer Academic Publishers}, + YEAR = {2003}, + editor = {Leung, F.~K.~S.}, + volume = {1}, + pages = {351--394}, +} + +@BOOK{Thompson1848, + author = {Thompson, J.~B.}, + title = {Elements of Algebra: An Abridgement of {Day's} Algebra}, + publisher = {Durrie and Peck, Loomis and Peck}, + year = {1848}, + edition = {10th}, +} +# http://books.google.co.uk/books/about/Elements_of_Algebra.html?id=xwsAAAAAYAAJ&redir_esc=y + +@INPROCEEDINGS{Thompson1987, + AUTHOR = {Thompson, P.}, + TITLE = {Computer presentations of structure in algebra}, + booktitle = {Proceedings of the Eleventh Annual Meeting of the International Group for the Psychology of Mathematics Education}, + YEAR = {1987}, + volume = {1}, + pages = {248--254}, +} +#http://pat-thompson.net/PDFversions/1987StrucInAlg.pdf + +@INCOLLECTION{Thompson1994, + author = {Thompson, P.~W.}, + title = {Students, functions and the undergraduate curriculum}, + booktitle = {Research in Collegiate Mathematics Education I}, + publisher = {American Mathematical Society}, + year = {1994}, + editor = {Dubinsky, E. and Schoenfeld, A. and Kaput, J.}, + pages = {21-44}, + series = {CBMS Issues in Mathematics Education}, + volume = {4}, +} + +@TECHREPORT{Thompson2008, + author = {Thompson, A. and Taylor, B.~N.}, + title = {Guide for the Use of the International System of Units ({SI})}, + institution = {National Institute of Standards and Technology}, + year = {2008}, + type = {Special Publication}, + number = {811}, + address = {Gaithersburg, MD 20899}, + month = {March}, +} + +@ARTICLE{Threlfall2007, + author = {Threlfall, J. and Pool, P. and Homer, M. and Swinnerton, B.}, + title = {Implicit aspects of paper and pencil mathematics assessment that come to light through the use of the computer}, + journal = {Educational Studies in Mathematics}, + year = {2007}, + volume = {66}, + number = {3}, + pages = {335--348}, + doi = {10.1007/s10649-006-9078-5}, +} + +@ARTICLE{Thurstone1927, + author = {Thurstone, L.~L.}, + title = {A law of comparative judgment}, + journal = {Psychological Review}, + year = {1927}, + volume = {34}, + number = {4}, + pages = {273--286}, +} + + +@BOOK{Thwaites2012, + author = {Thwaites, B.}, + title = {The School Mathematics Project, 1961--1970: A decade of Innovation and its sequel}, + publisher = {Cambridge University Press}, + address = {Cambridge, UK}, + year = {2012}, +} + +@ARTICLE{Timmis2016, + author = {Timmis, S. and Broadfoot, P. and Sutherland R. and Oldfield, A.}, + title = {Rethinking assessment in a digital age: opportunities, challenges and risks}, + journal = {British Educational Research Journal}, + year = {2016}, + volume = {42}, + number = {3}, + pages = {454--476}, + month = {June}, + doi = {10.1002/berj.3215}, +} + +@ARTICLE{Tirosh1997, + author = {Tirosh, D. and Evan, R.}, + title = {To Define or not to Define: The Case of \((-8)^{\frac{1}{3}}\)}, + journal = {Educational Studies in Mathematics}, + year = {1997}, + volume = {33}, + number = {3}, + pages = {321--330}, + doi = {10.1023/A:100291660}, +} + +@BOOK{Todhunter1858, + AUTHOR = {Todhunter, I.}, + TITLE = {Answer to {Mr Lund's} Attack on {Mr Todhunter}}, + PUBLISHER = {Macmillan and Co}, + address = {London, UK}, + YEAR = {1858}, +} +# Cambridge university library Cam.d.858.2 + +@BOOK{Todhunter1873, + AUTHOR = {Todhunter, I.}, + TITLE = {The Conflict of Studies and other essays}, + PUBLISHER = {MacMillian and Co.}, + address = {London, UK}, + YEAR = {1873}, +} + +@BOOK{Todhunter1885, + AUTHOR = {Todhunter, I.}, + TITLE = {An elementary treatise on the theory of equations: with a collection of examples}, + PUBLISHER = {MacMillian and Co.}, + address = {London, UK}, + YEAR = {1885}, +} + +@BOOK{Todhunter1897, + AUTHOR = {Todhunter, I.}, + TITLE = {Algebra for the use of Colleges and Schools}, + PUBLISHER = {MacMillian and Co.}, + address = {London, UK}, + YEAR = {1897}, + edition = {5th}, +} + +@TECHREPORT{Tomas2005, + author = {Tom\'{a}s, A.~P. and Moreira, N. and Pereira, N.}, + title = {Designing a Symbolic Solver for Arithmetic Constraints to Support Education in Mathematics}, + institution = {Universidade do Porto}, + year = {2005}, + type = {Working paper}, +} +# http://www.dcc.fc.up.pt/~apt/AGILMAT/ + +@ARTICLE{Toom1993, + AUTHOR = {Toom, A.}, + TITLE = {{A Russian Teacher in America}}, + JOURNAL = {Journal of Mathematical Behaviour}, + YEAR = {1993}, + volume = {12}, + number = {2}, + pages = {117--139}, +} +# http://www.de.ufpe.br/~toom/my-articles/engeduc/index.htm + +@BOOK{Toulmin1958, + author = {Toulmin, S.~E.}, + title = {The Uses of Argument}, + publisher = {Cambridge University Press}, + year = {1958}, + address = {Cambridge, United Kingdom}, +} + +@ARTICLE{Trenholm2016, + author = {Trenholm, S. and Alcock, L. and Robinson, C.}, + title = {The Instructor Experience of Fully Online Tertiary Mathematics: A Challenge and an Opportunity}, + journal = {Journal for Research in Mathematics Education}, + year = {2016}, + volume = {47}, + number = {2}, + pages = {147--161}, + month = {March}, +} + +@article{Trumbo2016, + author = {Trumbo, M.~C. and Leiting, K.~A. and McDaniel, M.~A.and Hodge, G.~K.}, + title = {Effects of Reinforcement on Test-Enhanced Learning in a Large, Diverse Introductory College Psychology Course}, + journal = {Journal of Experimental Psychology: Applied}, + number = {2}, + volume = {22}, + pages = {148--160}, + year = {2016}, + doi = {10.1037/xap0000082}, +} + +@BOOK{Tuckey1904, + author = {Tuckey, C.~O.}, + title = {Examples in Algebra}, + publisher = {Bell \& Sons, London}, + year = {1904}, +} + + +@BOOK{Tuckey1934, + author = {Tuckey, C.~O.}, + title = {The teaching of algebra in schools}, + publisher = {G.~Bell \& Sons}, + year = {1934}, + series = {A Report for the Mathematical Association}, +} + +@BOOK{Tuckey1950, + author = {Tuckey, C.~O., and et.al.}, + title = {The teaching of trigonometry in schools: a report prepared for the {M}athematical {A}ssociation}, + publisher = {G.~Bell and sons, Ltd. London}, + year = {1950}, +} + +@ARTICLE{Turing1950, + AUTHOR = {Turing, A.}, + TITLE = {Computing Machines and Intelligence}, + JOURNAL = {MIND, A Quarterly Review of Psychology and Philosophy}, + YEAR = {1950}, + volume = {59}, + number = {236}, + pages = {433--460}, + month = {October}, +} + +@BOOK{Ullrich2008, + author = {Ullrich, C.}, + title = {Pedagogically Founded Courseware Generation for Web-Based Learning: An HTN-Planning-Based Approach Implemented in {PAIGOS}}, + publisher = {Springer-Verlag}, + year = {2008}, + volume = {5260}, + series = {Lecture Notes in Artificial Intelligence}, + address = {Berlin, Heidelberg}, +} + +@BOOK{Urban2005, + AUTHOR = {P.~Urban and J.~Owen and D.~Martin and R.~Haese and S.~Haese and M.~Bruce}, + TITLE = {Mathematics HL (core)}, + PUBLISHER = {Haese and Harris Publications}, + YEAR = {2005}, + series = {Mathematics for the international student}, + edition = {second}, +} + +@ARTICLE{Usener2012, + AUTHOR = {Usener, C.~A. and Majchrzak, T.~A. and Kuchen, H.}, + TITLE = {E-Assessment and Software Testing}, + JOURNAL = {Interactive Technology and Smart Education}, + YEAR = {2012}, + volume = {9}, + number = {1}, + pages = {45--56}, +} +# ISSN: 1741-5659 + +@INBOOK{Usiskin1988, + AUTHOR = {Usiskin, Z.}, + editor = {Coxford, A.}, + TITLE = {Conceptions of school algebra and uses of variables}, + CHAPTER = {Ideas of algebra}, + pages = {8--19}, + PUBLISHER = {NCTM}, + address = {Reston, VA}, + YEAR = {1988}, +} + +@ARTICLE{Upton2013, + author = {Upton, E.}, + title = {Raspberry Pi}, + journal = {Computer}, + year = {2013}, + volume = {46}, + number = {10}, + pages = {14--16}, + month = {October}, + doi = {10.1109/MC.2013.349}, +} + +@MISC{UUK2018, + title = {Patterns and Trends in {UK} Higher Education 2018}, + howpublished = {Universities UK}, + year = {2018}, + month = {September}, + note = {ISBN: 978-1-84036-409-5}, + source = {https://www.universitiesuk.ac.uk/facts-and-stats/data-and-analysis/Documents/patterns-and-trends-in-uk-higher-education-2018.pdf}, +} + + +@ARTICLE{Vahrenhold2014, + author = {Jan Vahrenhold, J. and Paul, W.}, + title = {Developing and validating test items for first-year computer science courses}, + journal = {Computer Science Education}, + year = {2014}, + volume = {24}, + number = {4}, + pages = {304--333}, +} + +@article{Vajda2009, + author = {Vajda, R.}, + title = {An e-learning environment for elementary analysis: combining computer algebra, graphics and automated reasoning}, + language = {English}, + journal = {Teaching Mathematics and Computer Science}, + volume = {7}, + number = {1}, + pages = {13--34}, + isbn_issn = {ISSN 1589 - 7389}, + year = {2009}, +} + +@article{Vajda2009b, + author = {R. Vajda and T. Jebelean and B. Buchberger}, + title = {Combining Logical and Algebraic Techniques for Natural Style Proving in Elementary Analysis}, + journal = {Mathematics and Computers in Simulation}, + volume = {79}, + number = {8}, + pages = {2310--2316}, + publisher = {Elsevier}, + isbn_issn = {ISSN: 0378-4754}, + year = {2009}, + month = {April}, + note = {Special Issue on Nonstandard Applications of Computer Algebra}, +} + +@PHDTHESIS{Vajda2009c, + AUTHOR = {Vajda, R.}, + TITLE = {Supporting Exploration in Elementary Analysis by Computational, Graphical and Reasoning Tools}, + SCHOOL = {Johannes Kepler Universit\"{a}t}, + YEAR = {2009}, + type = {PhD}, +} + +@ARTICLE{Valentine2004, + author = {Valentine, J. C. and DuBois, D. L. and Cooper, H.}, + title = {The relation between self-beliefs and academic achievement: A meta-analytic review}, + journal = {Educational Psychologist}, + year = {2004}, + volume = {39}, + number = {2}, + pages = {111-133}, + doi = {10.1207/s15326985ep3902_3}, +} + +@ARTICLE{Vinner1977, + author = {Vinner, S.}, + title = {The concept of exponentiation at the undergraduate level and the definitional approach}, + journal = {Educational Studies in Mathematics}, + year = {1977}, + volume = {8}, + number = {1}, + pages = {17--26}, +} + +@ARTICLE{Vinner1989, + author = {Vinner, S. and Dreyfus, T.}, + title = {Images and definitions for the concept of function}, + journal = JRME, + year = {1989}, + volume = {20}, + number = {4}, + pages = {356--366}, +} + +@BOOK{Vygotsky1978, + AUTHOR = {Vygotsky, L.~S.}, + TITLE = {Mind in Society: Development of Higher Psychological Processes}, + PUBLISHER = {Harvard University Press}, + YEAR = {1978}, + edition = {14}, +} + + +@INPROCEEDINGS{WalkerDelius04, + author = {Walker, R. and Delius, G.}, + title = {Integrating On-line Assessment with Class-Based Teaching an Learning: A Preliminary Study of the AiM Marking}, + booktitle= {Proceedings of the 8th Annual CAA Conference, Loughborough University, UK}, + pages = {445--452}, + year = {2004}, +} + +@BOOK{Wallis1685, + author = {Wallis, J.}, + title = {A treatise of algebra, both historical and practical}, + publisher = {London, John Playford}, + year = {1685}, +} +#http://data.datacite.org/10.3931/e-rara-8842 +# title = {A treatise of algebra, both historical and practical : with some additional treatises I. of the cono-cuneus; being a body representing in part a conus, an part a cuneus ; II. of angular sections; and other things relating there unto, and to Trigonometry ; III. of the angle of contact; with other things appertaining to the composition of magnitudes, the inceptive of magnitudes, and the composition of motions, with the results thereof ; IV. of combination, alternations, and aliquot parts}, + +@BOOK{Warren1828, + author = {Warren, J.}, + title = {A Treatise on the Geometrical Representation of the Square Roots of Negative Quantities}, + publisher = {Cambridge University Press}, + year = {1828}, +} +# https://books.google.co.uk/books?id=DP9eAAAAcAAJ&lpg=PA1&ots=yRVJRmFIkm&dq=A%20Treatise%20on%20the%20Geometrical%20Representation%20of%20the%20Square%20Roots%20of%20Negative%20Quantities&pg=PA1#v=onepage&q=A%20Treatise%20on%20the%20Geometrical%20Representation%20of%20the%20Square%20Roots%20of%20Negative%20Quantities&f=false +# See also Philosophical Transactions of the Royal Society, 119, 1829, 241–54 and 339–59 + +@ARTICLE{Wason1968, + AUTHOR = {Wason, P.~C.}, + TITLE = {Reasoning about a rule}, + JOURNAL = {Quarterly Journal of Experimental Psychology}, + YEAR = {1968}, + volume = {20}, + pages = {273--281}, +} + +@ARTICLE{Watson02, + author = {Watson, A. and Mason, J.}, + title = {Student-generated examples in the learning of mathematics}, + journal = {Canadian Journal for Science, Mathematics and Technology Education}, + year = {2002}, + volume = {2}, + number = {2}, + pages = {237--249}, +} + +@INPROCEEDINGS{WatsonPME2002, + author = {Watson, A. and Mason, J.}, + title = {Extending example space as a learning/teaching strategy in mathematics}, + booktitle= {Proceedings of the Annual Conference of the International Group for the Psychology of Mathematics Education (PME26, Norwich, United Kingdom)}, + editor = {Cockburn, A.~D. and Nardi, E.}, + year = {2002}, + volume = {4}, + pages = {378--385}, +} + +@ARTICLE{Watson06, + author = {Watson, A. and Mason, J.}, + title = {Seeing an Exercise as a Single Mathematical Object: Using Variation to Structure Sense-Making}, + journal = {Mathematical Thinking and Learning}, + year = {2006}, + volume = {8}, + number = {2}, + pages = {91--111}, +} + +@INCOLLECTION{Watson07, + author = {Watson, A.}, + title = {Paper 7: Modelling, problem-solving and integrating concepts}, + journal = {Mathematical Thinking and Learning}, + BOOKTITLE = {Key understandings in mathematics learning}, + PUBLISHER = {Nuffield Foundation }, + YEAR = {2007}, +} +#http://www.nuffieldfoundation.org/sites/default/files/P7.pdf + +@BOOK{Watson2015, + editor = {Watson, A. and Ohtani, M.}, + title = {Task Design In Mathematics Education: an ICMI study}, + publisher = {Springer International Publishing}, + year = {2015}, + volume = {22}, + series = {New ICMI Study Series}, + address = {Switzerland}, + isbn = {978-3-319-09628-5}, + doi = {10.1007/978-3-319-09629-2} +} + +@ARTICLE{Watson1865, + author = {Watson, W.}, + title = {The Teaching of elementary mathematics}, + journal = {The Educational Times and Journal of the College of Preceptors}, + year = {1865}, + volume = {16}, + number = {55}, + pages = {149--152}, + month = {October}, +} + +@BOOK{Wagon1985, + author = {Wagon, S.}, + title = {The {B}anach-{T}arski paradox}, + publisher = {Cambridge University Press}, + year = {1985}, +} + +@ARTICLE{Weber2004, + AUTHOR = {Weber, K. and Alcock, L.}, + TITLE = {Semantic and Syntactic Proof Productions}, + JOURNAL = {Educational Studies in Mathematics}, + YEAR = {2004}, + volume = {56}, + number = {3}, + pages = {209--234}, + doi = {10.1023/B:EDUC.0000040410.57253.a1}, +} + +@ARTICLE{Weber2014, + author = {Weber, K. and Inglis, M. and Mejia-Ramos, J.~P.}, + title = {How mathematicians obtain conviction: Implications for mathematics instruction and research on epistemic cognition}, + journal = {Educational Psychologist}, + year = {2104}, + volume = {49}, + pages = {36--58}, +} + +@ARTICLE{Weber2015, + author = {Weber, K. and Mejia-Ramos, J.~P.}, + title = {On Relative and Absolute Conviction in Mathematics}, + journal = {For the Learning of Mathematics}, + year = {2015}, + volume = {35}, + number = {2}, + pages = {15--21}, + month = {July}, +} +# https://www-jstor-org.ezproxy.is.ed.ac.uk/stable/44382751 + +@ARTICLE{Weber2015b, + AUTHOR = {Weber, K.}, + TITLE = {Effective Proof Reading Strategies for Comprehending Mathematical Proofs}, + JOURNAL = {International Journal of Research in Undergraduate Mathematics Education}, + YEAR = {2015}, + number = {3}, + volume = {1}, + pages = {289--314}, + doi = {10.1007/s40753-015-0011-0}, +} + +@article{Weinberg2011, + author= {Weinberg, A. and Wiesner, E.}, + title= {Understanding mathematics textbooks through reader-oriented theory}, + year= {2011}, + issn= {0013-1954}, + journal= {Educational Studies in Mathematics}, + volume= {76}, + number= {1}, + pages= {49--63}, + doi= {10.1007/s10649-010-9264-3}, + url= {10.1007/s10649-010-9264-3}, + publisher= {Springer Netherlands}, + keywords= {Mathematics education; Content area reading; Reader-oriented theory; Textbooks}, +} + +@ARTICLE{Weinstein2018, + AUTHOR = {Weinstein, Y. and Madan, C.~R. and Sumeracki, M.~A.}, + TITLE = {Teaching the science of learning}, + JOURNAL = {Cognitive Research: Principles and Implications}, + YEAR = {2018}, + volume = {3}, + number = {2}, + doi = {10.1186/s41235-017-0087-y}, +} + +@BOOK{Weinstein2008, + AUTHOR = {Weinstein, L. and Adam, J.~A.}, + TITLE = {Guesstimation: Solving the World's Problems on the Back of a Cocktail Napkin}, + PUBLISHER = {Princeton University Press}, + YEAR = {2008}, +} + +@ARTICLE{Weiss2009, + author = {Weiss, M. and Herbst, P. and Chen, C.}, + title = {Teachers' perspectives on ``authentic mathematics'' and the two-column proof form}, + journal = {Educational Studies in Mathematics}, + year = {2009}, + volume = {70}, + number = {3}, + pages = {275--293}, + doi = {10.1007/s10649-008-9144-2}, +} + +@ARTICLE{Wells1995, + author = {Wells, C.}, + title = {Communicating Mathematics: useful ideas from computer science}, + journal = {American Mathematical Monthly}, + year = {1995}, + volume = {102}, + number = {5}, + pages = {397--408}, + month = {May}, +} + +@BOOK{Wells2003, + author = {Wells, C.}, + title = {A Handbook of Mathematical Discourse}, + publisher = {Charles Wells}, + year = {2003}, +} +# http://www.abstractmath.org/Handbook/handbook.pdf + +@BOOK{Wenger1987, + AUTHOR = {Wenger, E.}, + TITLE = {Artificial Intelligence and Tutoring Systems}, + PUBLISHER = {Morgan Kaufmann}, + YEAR = {1987}, + address = {Los Altos, CA}, +} + +@BOOK{Wester1999, + author = {Wester, M.}, + title = {Computer Algebra Systems: a Practical Guide}, + publisher = {Wiley}, + year = {1999}, +} + +@TECHREPORT{Wheater2016, + author = {Wheater, R. and Durbin, B. and McNamara, S. and Classick, R.}, + title = {Is mathematics education in England working for everyone? {NFER analysis of the PISA performance of disadvantaged pupils}}, + institution = {National Foundation for Educational Research}, + year = {2016}, + address = {Slough, UK}, + month = {December}, + note = {ISBN: 978-1-911039-35-8}, +} + +@BOOK{Wiener1968, + AUTHOR = {Wiener, N.}, + TITLE = {The human use of human beings: cybernetics and society}, + PUBLISHER = {Sphere Books}, + YEAR = {1968}, + address = {London}, +} + +@BOOK{Wild2009, + AUTHOR = {Wild, I.}, + TITLE = {\href{http://www.packtpub.com/moodle-1-9-math/book}{Moodle 1.9 Math}}, + PUBLISHER = {Packt Publishing}, + YEAR = {2009}, +} + +@ARTICLE{Wiliam1996, + author = {Wiliam, D. and Black, P.~J.}, + title = {Meanings and consequences: a basis for distinguishing formative and summative functions of assessment?}, + journal = {British Educational Research Journal}, + year = {1996}, + volume = {22}, + number = {5}, + pages = {537--548}, +} + +@ARTICLE{Wiliam1999, + author = {Wiliam, D.}, + title = {Formative Assessment in Mathematics: (1) Rich Questioning}, + journal = {Equals: Mathematics and Special Educational Needs}, + year = {1999}, + volume = {5}, + number = {2}, + pages = {15--18}, + month = {Spring}, +} + +@ARTICLE{Wiliam2003, + author = {Wiliam, D. and Black, P.~J.}, + title = {In praise of educational research: formative assessment}, + journal = {British Educational Research Journal}, + year = {2003}, + volume = {29}, + number = {5}, + pages = {623--637}, + doi = {10.1080/0141192032000133721}, +} + +@INBOOK{{Wiliam2007, + author = {Wiliam, D. and Thompson, M.}, + chapter = {Integrating assessment with instruction: what will it take to make it work?}, + title = {The future of assessment: shaping teaching and learning}, + publisher = {Lawrence Erlbaum Associates}, + year = {2007}, + address = {Mahwah, NJ}, +} + +@ARTICLE{Williams2017, + author = {Williams, S.~R. and Leatham, K.~R.}, + title = {Journal Quality in Mathematics Education}, + journal = {Journal for Research in Mathematics Education}, + year = {2017}, + volume = {48}, + number = {4}, + pages = {369--396}, +} + +@ARTICLE{Williams2018, + author = {Williams, K.}, + title = {Specifications-Based Grading in an Introduction to Proofs Course}, + journal = {PRIMUS}, + year = {2018}, + volume = {28}, + number = {2}, + pages = {128--142}, + doi = {10.1080/10511970.2017.1344337}, +} + +@ARTICLE{Wing2006, + author = {Wing, J.~M.}, + title = {Computational Thinking}, + journal = {Communications of the ACM}, + year = {2006}, + volume = {49}, + number = {3}, + pages = {33--35}, +} +# Jeannette M. Wing. Corporate Vice President, Microsoft Research + +@ARTICLE{Wing2008, + author = {Wing, J.~M.}, + title = {Computational thinking and thinking about computing}, + journal = {Philosophical Transactions of the Royal Society A }, + year = {2008}, + volume = {366}, + pages = {3717--3725}, + doi = {10.1098/rsta.2008.0118}, +} +# See also Curzon2014 +# Wing, J. M., (2008). Computational thinking and thinking about computing, Philosophical Transactions of the Royal Society A. 366 (3717--3725), DOI:10.1098/rsta.2008.0118. + +@article{Wittmann2013, + author= {Wittmann, M.~C. and Flood, V.~J. and Black, K.~E.}, + title= {Algebraic manipulation as motion within a landscape}, + year= {2013}, + issn= {0013-1954}, + journal= {Educational Studies in Mathematics}, + volume= {82}, + number= {2}, + pages= {169--181}, + doi= {10.1007/s10649-012-9428-4}, + url= {10.1007/s10649-012-9428-4}, + publisher= {Springer Netherlands}, + keywords= {Gesture analysis; Algebra; Embodied cognition; Physics; Differential equations; Separation of variables}, + language= {English} +} + +@BOOK{Wood1801, + author = {Wood, J.}, + title = {The elements of algebra: designed for the use of students in the University}, + publisher = {Cambridge}, + year = {1801}, + edition = {3rd}, +} + +@ARTICLE{Wood1968, + author = {Wood, R.}, + title = {Objectives in the Teaching of Mathematics}, + journal = {Educational Research}, + year = {1968}, + volume = {10}, + number = {2}, + pages = {83--98}, + doi = {10.1080/0013188680100201}, +} + +@ARTICLE{Wood1977, + author = {Wood, R.}, + title = {Multiple Choice: A State of the Art Report}, + journal = {Evaluation in Education: International Progress}, + year = {1977}, + volume = {1}, + number = {3}, + pages = {191--280}, +} +# http://eric.ed.gov/?id=EJ184136 + +@ARTICLE{Wood2016, + author = {Wood, A.~K., Galloway, R.~K. and Hardy, J.}, + title = {Can dual processing theory explain physics students’ performance on the Force Concept Inventory?}, + journal = {Physical Review Physics Education Research}, + year = {2016}, + volume = {12}, + number = {2}, + pages = {1--5}, + month = {July}, + doi = {10.1103/PhysRevPhysEducRes.12.023101}, +} +# https://journals.aps.org/prper/abstract/10.1103/PhysRevPhysEducRes.12.023101 + +@BOOK{Wolfram2003, + author = {Wolfram, S.}, + title = {The Mathematica Book}, + publisher = {Wolfram Media}, + year = {2003}, + edition = {5th}, +} + +@TECHREPORT{Wong2018, + author = {Wong, C.}, + title = {Mathematics Diagnostic Test Project}, + institution = {University of Edinburgh}, + year = {2018}, +} + +@BOOK{Wrigley1847, + author = {Wrigley, A}, + title = {Examples and Problems in Pure and Mixed mathematics, with answers and occasional hints}, + publisher = {Longman, Brown, Green, and Longmans, London}, + year = {1847}, + edition = {Second}, +} + +@ARTICLE{Xiao2001, + AUTHOR = {Xiao, G.}, + TITLE = {WIMS: an Interactive Mathematics Server}, + JOURNAL = {Journal of online Mathematics and its applications}, + YEAR = {2001}, + note = {{\tt http://www.joma.org/}}, +} + +@ARTICLE{Yerushalmy2017, + author = {Yerushalmy, M. and Nagari-Haddif, G. and Olsher, S.}, + title = {Design of tasks for online assessment that supports understanding of students' conceptions}, + journal = {ZDM}, + year = {2017}, + volume = {49}, + pages = {701--716}, + doi = {10.1007/s11858-017-0871-7}, +} + +@INPROCEEDINGS{Yoshitomi2018, + author = {Yoshitomi, K.}, + title = {Generation of Abundant Multi-choice or {STACK} Type Questions Using CAS for Random Assignments}, + booktitle = {Proc. Mathematical Software --- ICMS 2018}, + year = {2018}, + editor = {Davenport, J.H. and Kauers, M. and Labahn, G. and Urban, J.}, + number = {10931}, + series = {Springer Lecture Notes in Computer Science}, + pages = {492--497}, +} +# https://link.springer.com/content/pdf/10.1007%2F978-3-319-96418-8.pdf + +########################### +# Proceedings of the 1st STACK conference. + +@inproceedings{harterich_jorg_2019_2582874, + author = {H\"{a}rterich, J.}, + title = {Using randomized quizzes in undergraduate linear algebra and multivariable calculus}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2582874}, + url = {https://doi.org/10.5281/zenodo.2582874} +} + +@inproceedings{mai_tobias_2019_2582427, + author = {Mai, T. and Meyer, A.}, + title = {{Sketching functions as a digital task with automated feedback}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2582427}, + url = {https://doi.org/10.5281/zenodo.2582427} +} + +@inproceedings{klischat_cosima_2019_2577116, + author = {Klischat, C. and Becker, P. and Vasko, M.}, + title = {{STACK is more than Maths -- Development of Online Problems for Mechanics and Electrotechnics}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2577116}, + url = {https://doi.org/10.5281/zenodo.2577116} +} + +@inproceedings{kinnear_george_2019_2565969, + author = {Kinnear, G.}, + title = {{Delivering an online course using STACK}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2565969}, + url = {https://doi.org/10.5281/zenodo.2565969} +} + +@inproceedings{bird_anja_2019_2563076, + author = {Bird, A. and Rathmann, W.}, + title = {{Ein Online-Trainingscenter zur St\"{a}rkung der Rechenf\"{a}higkeiten}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2563076}, + url = {https://doi.org/10.5281/zenodo.2563076} +} + +@inproceedings{fath_julia_2019_2565860, + author = {Fath, J. and Hansen, P. and Scheicher, C. and Umbach, T.;}, + title = {{E-homework with individual feedback for large lectures}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2565860}, + url = {https://doi.org/10.5281/zenodo.2565860} +} + +@inproceedings{altieri_mike_2019_2564881, + author = {Altieri, M. and Staupe, M. and Paluch, D. and Schirmer, E.}, + title = {{STACK trifft H5P -- interaktives, audiovisuelles Feedback in STACK -- Aufgaben basierend auf H5P}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + doi = {10.5281/zenodo.2564881}, + url = {https://doi.org/10.5281/zenodo.2564881} +} + +@inproceedings{bach_stephan_2019_2563803, + author = {Back, S.}, + title = {{STACK-Fragen zur Unterst\"{u}tzung der Selbstlernphasen in einem Studienvorbereitungsangebot f\"{u}r beruflich Qualifizierte}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2563803}, + url = {https://doi.org/10.5281/zenodo.2563803} +} + +@inproceedings{miriam_weigel_2019_2563656, + author = {Weigel, M. and H\"{u}bl, R. and Derr, K. and Podgayetskaya, T.}, + title = {{STACK-Aufgaben im formativen eAssessment: Einsatzm\"{o}glichkeiten des Feedbacks}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2563656}, + url = {https://doi.org/10.5281/zenodo.2563656} +} + +@inproceedings{eckhoff_malte_2019_2561190, + author = {Eckhoff, M. and Landenfeld, K.}, + title = {{GoMaxima - Eine performante Verwendung von STACK und Maxima in Lernmanagementsystemen}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2561190}, + url = {https://doi.org/10.5281/zenodo.2561190} +} + +@inproceedings{zerva_2019_2565969, + author = {Zerva, K.}, + title = {{Developing STACK assessments in Edinburgh, 2017-2019}}, + booktitle = {Contributions to the 1st International STACK conference 2018 in F\"{u}rth, Germany}, + year = 2019, + publisher = {Zenodo}, + doi = {10.5281/zenodo.2565969}, + url = {https://doi.org/10.5281/zenodo.2565969} +} diff --git a/CaseStudies/2019/References/references.aux b/CaseStudies/2019/References/references.aux new file mode 100644 index 00000000..1305c7db --- /dev/null +++ b/CaseStudies/2019/References/references.aux @@ -0,0 +1,2 @@ +\relax +\bibstyle{plain} diff --git a/CaseStudies/2019/References/references.log b/CaseStudies/2019/References/references.log new file mode 100644 index 00000000..dbd32f6b --- /dev/null +++ b/CaseStudies/2019/References/references.log @@ -0,0 +1,74 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (MiKTeX 2.9.7140 64-bit) (preloaded format=pdflatex 2019.7.29) 30 JUL 2019 11:09 +entering extended mode +**./references.tex +(references.tex +LaTeX2e <2018-12-01> + +("C:\Users\msporrin\AppData\Local\Programs\MiKTeX 2.9\tex/latex/base\article.cl +s" +Document Class: article 2018/09/03 v1.4i Standard LaTeX document class +("C:\Users\msporrin\AppData\Local\Programs\MiKTeX 2.9\tex/latex/base\size10.clo +" +File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option) +) +\c@part=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +("C:\Users\msporrin\AppData\Local\Programs\MiKTeX 2.9\tex/latex/a4wide\a4wide.s +ty" +Package: a4wide 1994/08/30 + +("C:\Users\msporrin\AppData\Local\Programs\MiKTeX 2.9\tex/latex/ntgclass\a4.sty +" +Package: a4 2004/04/15 v1.2g A4 based page layout +)) +("C:\Users\msporrin\AppData\Local\Programs\MiKTeX 2.9\tex/latex/bibunits\bibuni +ts.sty" +Package: bibunits 2004/05/12 v2.4 Multiple bibliographies in one document. +\@bibunitaux=\write3 +\@bibunitauxcnt=\count88 +) (references.aux) +\openout1 = `references.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 10. +LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 10. +LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 10. +LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 10. +LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 10. +LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 10. +LaTeX Font Info: ... okay on input line 10. + (bu1.aux) +\openout3 = `bu1.aux'. + + (bu1.bbl) (bu1.aux) +No file bu.aux. +(bu2.aux) +\openout3 = `bu2.aux'. + + (bu2.bbl) (bu2.aux) +No file bu.aux. +(bu3.aux) +\openout3 = `bu3.aux'. + + (bu3.bbl) (bu3.aux) +No file bu.aux. +(bu4.aux) +\openout3 = `bu4.aux'. + + (bu4.bbl +! I can't write on file `references.pdf'. +Please type another file name for output: \ No newline at end of file diff --git a/CaseStudies/2019/References/references.pdf b/CaseStudies/2019/References/references.pdf new file mode 100644 index 00000000..738d3a9f Binary files /dev/null and b/CaseStudies/2019/References/references.pdf differ diff --git a/CaseStudies/2019/References/references.tex b/CaseStudies/2019/References/references.tex new file mode 100644 index 00000000..b31c3702 --- /dev/null +++ b/CaseStudies/2019/References/references.tex @@ -0,0 +1,69 @@ +\documentclass[10pt]{article} +\usepackage{a4wide} +\usepackage{bibunits} + +\newcommand{\localputbib}{% +%\putbib[C:/Users/csangwin/Documents/EdWork/Bib/sangwin] +\putbib[sangwin,education,PUS,cate] +} + +\begin{document} +\bibliographystyle{plain} + +\subsection{Introduction} +\begin{bibunit}[unsrt] +\nocite{2015STACKReport}\nocite{2013CAA}\nocite{Goldenberg_2008} +\localputbib +\end{bibunit} + +\subsection{Fundamentals of Algebra and Calculus} +\begin{bibunit}[unsrt] +\nocite{Kinnear2018STACKConf}\nocite{Renkl_2002} \nocite{Roediger_2011} \nocite{Goldenberg_2008}\nocite{Mullet_2014} +\localputbib +\end{bibunit} + +\subsection{Physics Curriculum} +\begin{bibunit}[unsrt] +\nocite{Coletta2010} +\localputbib +\end{bibunit} + +\subsection{Adaptive Self-learning} +\begin{bibunit}[unsrt] +\nocite{Kallweit_2019} \nocite{Hattie_2009} \nocite{Hattie_2007} \nocite{Nicol_2006} \nocite{Bruder_2015} \nocite{Schaub_2018} \nocite{Zech_1978} +\localputbib +\end{bibunit} + +\subsection{Flick Interface} +\begin{bibunit}[unsrt] +\nocite{Nakamura_2017} \nocite{Nielsen_1993} +\localputbib +\end{bibunit} + +\subsection{optes} +\begin{bibunit}[unsrt] +\nocite{cosh} \nocite{Derr_2017} \nocite{Derr_2018} \nocite{2017MCQ} \nocite{sefi} \nocite{Weigel_2019} \nocite{Weigel_2017} +\localputbib +\end{bibunit} + +\subsection{Open University} +\begin{bibunit}[unsrt] +\nocite{Lowe_2019} +\localputbib +\end{bibunit} + +\subsection{ABACUS} +\begin{bibunit}[unsrt] +\nocite{Rasila2007} \nocite{Rasila2010} \nocite{Harjula2008} \nocite{2013CAA} \nocite{Majander2011} \nocite{Rasila2015} \nocite{2018Mastery} \nocite{Rasila2016b} +\localputbib +\end{bibunit} + +\subsection{Edinburgh} +\begin{bibunit}[unsrt] +\nocite{UUK2018} \nocite{2019-STACK-Edinburgh} \nocite{zerva_2019_2565969} \nocite{Lobb2016} +\localputbib +\end{bibunit} + +\bibliography{sangwin,education,PUS,cate} + +\end{document} \ No newline at end of file diff --git a/CaseStudies/2019/References/sangwin.bib b/CaseStudies/2019/References/sangwin.bib new file mode 100644 index 00000000..a98ddf08 --- /dev/null +++ b/CaseStudies/2019/References/sangwin.bib @@ -0,0 +1,1386 @@ +### Common journal names +@string{EdStud = {Educational Studies in Mathematics}} +@string{JRME = {Journal for Research in Mathematics Education}} +@string{IJTME = {The International Journal for Technology in Mathematics Education}} +@string{LaI ={Learning and Instruction}} +@string{TMA ={Teaching Mathematics and its Applications}} +### Cited works + +############## Thesis, books + +@PHDTHESIS{SangwinMSC, + author = {Sangwin, C.~J.}, + title = {Discrete dynamical systems and {C}antor sets in one dimension}, + school = {University of Bath}, + year = {1996}, + type = {{MSc}}, +} + +@PHDTHESIS{SangwinPHD, + author = {Sangwin, C.~J.}, + title = {\href{http://www.lulu.com/content/375594}{Uncertain dynamical systems and nonlinear adaptive control}}, + school = {University of Bath}, + year = {2000}, + type = {{PhD}}, +} + +@BOOK{MathsGalore, + author = {Budd, C.~J. and Sangwin, C.~J.}, + title = {Mathematics Galore! Discovery classes, workshops and team projects in mathematics and its applications}, + publisher = {Oxford University Press}, + address = {Oxford, UK}, + year = {2001, Reprinted 2005}, + month = {3 May}, + isbn = {0-19-850770-4 (Paperback), 0-19-850769-0 (Hardback)}, + note = {ISBN:0-19-850770-4 (Paperback), ISBN:0-19-850769-0 (Hardback)}, +} + +@BOOK{HowRound, + author = {Bryant, J. and Sangwin, C.~J.}, + title = {How round is your circle?: where engineering and mathematics meet}, + publisher = {Princeton University Press}, + address = {Princeton, New Jersey}, + year = {2008}, + isbn = {978-0-691-13118-4}, + note = {ISBN: 978-0-691-13118-4}, +} +# Paperback 0691149925/ +# Bryant, J. and Sangwin, C. J. (2008), How round is your circle?: where engineering and mathematics meet, Princeton University Press, Princeton, New Jersey. ISBN: 978-0-691-13118-4. + + + +@BOOK{2008MYP5, + AUTHOR = {P.~Vollmar and E.~Kemp and M.~Haese and R.~Haese and S.~Haese and M.~Humphries and C.~Sangwin}, + TITLE = {Pre-Diploma SL and HL (MYP 5 Plus) for use with International Baccalaureate Middle Years Programme}, + PUBLISHER = {Haese and Harris Publications}, + address = {Adelaide, Australia}, + YEAR = {2008}, + series = {Mathematics for the international student}, + edition = {second}, + note = {ISBN: 978-1-876543-80-1}, +} + +@BOOK{2013CAA, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Computer Aided Assessment of Mathematics}, + publisher = {Oxford University Press}, + address = {Oxford, UK}, + YEAR = {2013}, + isbn = {978-0-19-966035-3}, +} +# Sangwin, C. J. (2013). Computer Aided Assessment of Mathematics, Oxford University Press (ISBN 978-0-19-966035-3) + +@BOOK{2013HL-calculus, + AUTHOR = {Quinn, C. and Sangwin, C.~J. and Haese, R. and Haese, M.}, + TITLE = {IB HL Option: Calculus}, + series = {Mathematics for the International Student (IB Diploma)}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2013}, + isbn = {978-1-921972-33-1}, +} + +@BOOK{2014HL-discrete, + AUTHOR = {Quinn, C. and Blythe, P. and Sangwin, C.~J. and Haese, R. and Haese, M.}, + TITLE = {IB HL Option: Discrete Mathematics}, + series = {Mathematics for the International Student (IB Diploma)}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2014}, + isbn = {978-1-921972-34-8}, +} + +@BOOK{2013HL-sets, + AUTHOR = {Quinn, C. and Sangwin, C.~J. and Haese, R. and Haese, M.}, + TITLE = {IB HL Option: Sets, Relations and Groups}, + series = {Mathematics for the International Student (IB Diploma)}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2014}, + isbn = {978-1-921972-32-4}, +} + +@BOOK{2014AdditionalMaths, + AUTHOR = {Haese, M. and Haese, S. and Humphries, M. and Sangwin, C.~J.}, + TITLE = {Cambridge Additional Mathematics}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2014}, + isbn = {978-1-921972-42-3}, +} + +# IN PURE +@BOOK{2017ASMaths, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Advanced Mathematics for AS and A level 1}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2017}, + isbn = {978-1-925489-30-9}, +} + +# IN PURE +@BOOK{2018AMaths, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Advanced Mathematics for AS and A level 2}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2018}, + isbn = {978-1-925489-32-3}, +} + +@BOOK{2018GCSEFoundations, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {{GCSE} Mathematics Foundation}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2018}, + isbn = {978-1-925489-61-3}, +} + +@BOOK{2019CoreSL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Core Topics SL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-55-2}, +} + +@BOOK{2019CoreHL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Core Topics HL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-58-3}, +} + +@BOOK{2019AA-SL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Analysis and Approaches SL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-56-9}, +} + +@BOOK{2019AA-HL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Analysis and Approaches HL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-59-0}, +} + +@BOOK{2019AI-SL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Applications and Interpretation SL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-57-6}, +} + +@BOOK{2019AI-HL, + AUTHOR = {Haese, M. and Humphries, M. and Sangwin, C.~J. and Vo, N.}, + TITLE = {Mathematics: Applications and Interpretation HL}, + publisher = {Haese Mathematics}, + address = {Adelaide, Australia}, + YEAR = {2019}, + isbn = {978-1-925489-60-6}, +} + +######### Edited works ######### + +@BOOK{StudySkills2004, + editor = {Sangwin, C. and Nicholas, L.}, + TITLE = {Study Skills for Undergraduate Mathematics}, + PUBLISHER = {Perpetuity Press}, + YEAR = {2004}, +} + +@BOOK{EulerAlgebra2006, + AUTHOR = {Euler, L.}, + TITLE = {Elements of Algebra}, + PUBLISHER = {Tarquin Publications}, + YEAR = {2006}, +} +# note = {ISBN 978-1-89961-873-6}, +# editor = Me, + +## PUBLISHER = {\href{http://www.lulu.com/content/309038}{{\tt http://www.lulu.com/}}}, +## YEAR = {2006}, +## note = {ISBN 978-1-84728-647-5}, + + +@UNPUBLISHED{Kamenetskii-trans-1947, + AUTHOR = {I.~M. Kamenetski{\u\i}}, + TITLE = {Solution of a geometric problem of L. Lyusternik}, + NOTE = {This paper is a translation of Kamenetski\u{\i}, I.~M.: +1947, Re\v{s}enie geometriceskoi zada\v{c}i {L}.~{L}yusternika, +{\em Uspekhi matematicheskikh nauk} {\bf 2}(2),~199--202.}, +} + +############## Control & Mathematics + +# In PURE +@ARTICLE{RS99, + author = {Ryan, E.~P. and Sangwin, C.~J.}, + title = {Controlled functional differential equations and adaptive stabilization}, + journal = {International Journal of Control}, + year = {2001}, + volume = {74}, + number = {1}, + pages = {77-90}, + doi = {10.1080/00207170150202698}, +} + +# In PURE +@ARTICLE{IRS00, + author = {Ilchmann, A. and Ryan, E.~P. and Sangwin, C.~J.}, + title = {Systems of controlled functional differential equations and adaptive tracking}, + journal = {SIAM Journal of Control \& Optimization, (SICON)}, + year = {2002}, + volume = {40}, + number = {6}, + pages = {1746--1764}, + doi = {10.1137/S0363012900379704}, +} + +# In PURE +@ARTICLE{RS01, + author = {Ryan, E.~P. and Sangwin, C.~J.}, + title = {Controlled functional differential equations and adaptive tracking}, + journal = {Systems and Control Letters}, + year = {2002}, + volume = {47}, + pages = {365--374}, + doi = {10.1016/S0167-6911(02)00232-3}, +} + +# In PURE +@ARTICLE{IRS01, + author = {Ilchmann, A. and Ryan, E.~P. and Sangwin, C.~J.}, + title = {Tracking with prescribed transient behaviour}, + journal = {European Series in Applied and Industrial Mathematics: Control, Optimisation and Calculus of Variations (ESAIM:COCV)}, + year = {2002}, + volume = {40}, + number = {6}, + pages = {471--493}, + doi = {10.1051/cocv:2002064}, +} + +# In PURE +@ARTICLE{IS04, + author = {Ilchmann, A. and Sangwin, C.~J.}, + title = {Output feedback stabilisation of minimum phase systems by delays}, + journal = {Systems and Control Letters}, + year = {2004}, + volume = {52}, + number = {3--4}, + pages = {233--245}, + doi = {10.1016/j.sysconle.2004.02.001}, +} + +# In PURE +@ARTICLE{2009RST, + AUTHOR = {Ryan, E.~P. and Sangwin, C.~J. and Townsend, P.}, + TITLE = {Controlled Functional Differential Equations: Approximate and Exact Asymptotic Tracking with Prescribed Transient Behaviour}, + JOURNAL = {ESAIM: Control, Optimisation and Calculus of Variations}, + YEAR = {2009}, + volume = {15}, + number = {4}, + pages = {745--762}, + note = {10.1051/cocv:2008045} +} + +# In PURE +@ARTICLE{2008Roundness, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Deceiving the V-block Method for Assessment of Departure from Roundness}, + JOURNAL = {International Journal of Computational Geometry and Applications}, + YEAR = {2009}, + volume = {19}, + number = {6}, + pages = {521--532}, + month = {December}, + note = {10.1142/S0218195909003106} +} + +############## Control conferences + +@INPROCEEDINGS{Cont98, + author = {Ryan, E.~P. and Sangwin, C.~J.}, + title = {Adaptive control of systems described by nonlinear functional differential equations}, + booktitle= {UKACC International Conference on CONTROL '98}, + series = {IEE Conference Publications 455}, + volume = {I}, + pages = {763--768}, + year = {1998}, +} + + +@article{Greece99, + author = {Sangwin, C.~J.}, + title = {Functional differential inclusions and adaptive stabilization}, + journal= {Proc. NCN Pedagogical School}, + pages = {463--464}, + year = {1999}, +} + +@INPROCEEDINGS{ECC01, + author = {Ilchmann, A. and Ryan, E.~P. and Sangwin, C.~J.}, + title = {Adaptive tracking for systems described by functional differential equations}, + booktitle= {European Control Conference, Porto, Portugal}, + pages = {763--768}, + month = {4--7 September}, + year = {2001}, +} +# Reviewers comments: "Nice paper. Well written, to the point and clear." That's all. + +############### Education research + +# In PURE +@ARTICLE{Pointon02, + author = {Pointon, A. and Sangwin, C.~J.}, + title = {An analysis of undergraduate core material in the light of hand held computer algebra systems}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2003}, + volume = {34}, + number = {5}, + pages = {671--686}, + month = {September}, + doi = {10.1080/0020739031000148930}, +} + +@ARTICLE{MacBean01, + author = {MacBean, J. and Graham, T. and Sangwin, C.~J.}, + title = {Group Work in Mathematics: A Survey of Students' Experiences and Attitudes}, + journal = TMA, + year = {2004}, + month = {June}, + volume = {23}, + number = {2}, + pages = {49--68}, +} + +# In PURE +@ARTICLE{GW1, + author = {MacBean, J. and Graham, T. and Sangwin, C.~J.}, + title = {Guidelines for introducing Group Work in Undergraduate Mathematics}, + journal = {Learning and Teaching Mathematics Statistics and Operational Research}, + year = {2001}, + month = {November}, + volume = {2}, +} + +# In PURE +@ARTICLE{SangwinHSkills02, + author = {Sangwin, C.~J.}, + title = {New opportunities for encouraging higher level mathematical learning by creative use of emerging computer aided assessment}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2003}, + volume = {34}, + number = {6}, + pages = {813--829}, + month = {November}, + doi = {10.1080/00207390310001595474}, +} + +# In PURE +@ARTICLE{SangwinTMA03, + author = {Sangwin, C.~J.}, + title = {Assessing mathematics automatically using computer algebra and the internet}, + journal = {Teaching Mathematics and its Applications}, + year = {2004}, + volume = {23}, + number = {1}, + pages = {1--14}, + doi = {10.1093/teamat/23.1.1}, +} + +@ARTICLE{Sangwin2004CABLE, + author = {Sangwin, C. and Naismith, L.}, + title = {Implementing computer algebra enabled questions for the assessment and learning of mathematics}, + journal = IJTME, + year = {2008}, + volume = {15}, + issue = {1}, + pages = {4--18} +} + +@ARTICLE{SangwinRamsden2006, + AUTHOR = {Sangwin, C.~J. and Ramsden, P.}, + TITLE = {Linear syntax for communicating elementary mathematics}, + JOURNAL = {Journal of Symbolic Computation}, + YEAR = {2007}, + volume = {42}, + number = {9}, + pages = {902--934}, + doi = {10.1016/j.jsc.2007.07.002}, +} + +# In PURE +@ARTICLE{Sangwin2006CASAlgebra, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Assessing Elementary Algebra with {STACK}}, + JOURNAL = {International Journal of Mathematical Education in Science and Technology}, + YEAR = {2008}, + volume = {38}, + number = {8}, + pages = {987--1002}, + month = {December}, + doi = {10.1080/00207390601002906}, +} + +@ARTICLE{Sangwin2009Equality, + AUTHOR = {Bradford, R. and Davenport, J.~H. and Sangwin, C.~J.}, + TITLE = {A Comparison of Equality in Computer Algebra and Correctness in Mathematical Pedagogy (II)}, + JOURNAL = IJTME, + YEAR = {2010}, + volume = {17}, + number = {2}, + pages = {93--98} +} + +# In PURE +@ARTICLE{Sangwin2011AMS, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Modelling the journey from elementary word problems to mathematical research}, + JOURNAL = {Notices of the American Mathematical Society}, + YEAR = {2011}, + volume = {58}, + number = {10}, + pages = {1436--1445}, + month = {November}, +} + +# In PURE +@ARTICLE{Sangwin2015Inequalities, + author = {Sangwin, C.~J.}, + title = {Inequalities, assessment and computer algebra}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2015}, + doi = {10.1080/0020739X.2014.941424}, + pages = {76--93}, + number = {1}, + volume = {46} +} + +@ARTICLE{2019-AlgebraTexts, + author = {Sangwin, C.~J.}, + title = {Textbook accounts of the rules of indices with rational exponents}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2019}, +} + +# In PURE +@ARTICLE{2017MCQ, + author = {Sangwin, C.~J. and Jones, I.}, + title = {Asymmetry in student achievement on multiple choice and constructed response items in reversible mathematics processes}, + journal = {Educational Studies in Mathematics}, + year = {2017}, + volume = {94}, + doi = {10.1007/s10649-016-9725-4}, + pages = {205--222}, +} + +# In PURE (partial 27.11.15) +@ARTICLE{2016AutomationExaminations, + author = {Sangwin, C.~J. and K\"{o}cher, N.}, + title = {Automation of mathematics examinations}, + journal = {Computers and Education}, + year = {2016}, + volume = {94}, + pages = {215--227}, + doi = {10.1016/j.compedu.2015.11.014} +} +# ISSN: 0360-1315 +# http://authors.elsevier.com/sd/article/S0360131515300865 + +# In PURE +@ARTICLE{2017ComputingCurriculum, + author = {Sangwin, C.~J. and O'Toole, C.}, + title = {Computer programming in the {UK} undergraduate mathematics curriculum}, + journal = {International Journal of Mathematical Education in Science and Technology}, + year = {2017}, + doi = {10.1080/0020739X.2017.1315186}, +} + +# In PURE +@ARTICLE{2017STACKUnits, + author = {Sangwin, C.~J. and Harjula, M.}, + title = {Online assessment of dimensional numerical answers using {STACK} in science}, + journal = {European Journal of Physics}, + year = {2017}, + volume = {38}, + doi = {10.1088/1361-6404/aa5e9d}, +} + +@ARTICLE{2018Mastery, + author = {Pelkola, T. and Rasila, A. and Sangwin, C.~J.}, + title = {Investigating {Bloom's} Learning for Mastery in Mathematics with Online Assessment}, + journal = {Informatics in Education}, + year = {2018}, + volume = {17}, + number = {2}, + pages = {363--380}, + doi = {10.15388/infedu.2018.19}, +} + +@ARTICLE{Wood2018, + author = {Wood, A.~K. and Bailey, T.~N. and Galloway, R.~K. and Hardy, J.~A. and Sangwin, C.~J. and Docherty, P.~J.}, + title = {Lecture capture as an element of the digital resource landscape - a qualitative study of flipped and non-flipped classrooms}, + journal = {Computers and Education}, + year = {2018}, +} + +@ARTICLE{CODEX2019, + author = {Sangwin, C.~J. and Kinnear, G.}, + title = {Coherently organised digital exercises and expositions}, + journal = {For the Learning of Mathematics}, + year = {?}, +} + +############### Education: contributions to edited works. + +@INCOLLECTION{SangwinICM02, + author = {Sangwin, C.~J.}, + title = {Encouraging higher level mathematical learning using computer aided assessment}, + booktitle= {Trends and Challenges in Mathematics education}, + publisher = {East China Normal University Press}, + year = {2004}, + editor = {Wang, J. and Xu, B.}, + chapter = {20}, + pages = {255--265}, +} +# booktitle= {Proceedings of the International Congress of Mathematicians Satellite Conference on Mathematics Education, Lhasa, Tibet, August 12--17}, +# year = {2002}, + + +@INCOLLECTION{Sangwin2006PrePME, + author = {Sangwin, C.~J.}, + title = {Computer Algebra through a Proceptual Lens}, + booktitle= {Retirement as Process and Concept: a Festschrift for {E}ddie {G}ray and {D}avid {T}all}, + editor = {Simpson, A.}, + year = {2006}, + pages = {215--222}, +} + +@INCOLLECTION{Sangwin2009ICMI, + author = {Sangwin, C. and Cazes, C. and Lee, A. and Wong, K.~L.}, + title = {Micro-Level Automatic Assessment Supported by Digital Technologies}, + booktitle= {Mathematics Education and Technology-Rethinking the Terrain}, + year = {2009}, + publisher = {Springer}, + volume = {13}, + pages = {227--250}, + series = {New ICMI Study Series}, + doi = {10.1007/978-1-4419-0146-0} +} + +@INCOLLECTION{Sangwin2010MMG, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Automating the marking of core calculus and algebra: eight years on}, + BOOKTITLE = {Maths at University}, + PUBLISHER = {More Maths Grads}, + YEAR = {2010}, + editor = {Robinson, M. and Challis, N. and Thomlinson, M.}, + pages = {135--139}, +} + + +@INCOLLECTION{Sangwin2010IGI, + AUTHOR = {Badger, M. and Sangwin, C.J.}, + TITLE = {My equations are the same as yours!: computer aided assessment using a {Gr\"{o}bner} basis approach}, + BOOKTITLE = {Teaching Mathematics Online: Emergent Technologies and Methodologies}, + PUBLISHER = {IGI Global}, + YEAR = {2011}, + editor = {Juan, A.~A. and Huertas, M.~A. and Steegmann, C.}, + pages = {259--273}, + doi = {10.4018/978-1-60960-875-0.ch013}, +} +## research\2010IGI-book\2010BadgerSangwinIGI-book.tex + +@INBOOK{2015Transitions, + author = {Sangwin, C.~J.}, + title = {Technology-led teaching: the role of mathematical software}, + chapter = {11}, + pages = {126--139}, + publisher = {Higher Education Academy}, + year = {2015}, +} + +@INBOOK{2017Retention, + author = {Sangwin, C.~J.}, + editor = {Wood, L. and Breyer, Y.}, + title = {Success in Higher Education: Transitions to, within and from University}, + chapter = {Practice and Practise in University: What Defines Success and how Does Online Assessment Support Achieving This?}, + year = {2017}, + pages = {111-130}, + publisher = {Springer}, + address = {Singapore}, + doi = {10.1007/978-981-10-2791-8}, +} + +@INBOOK{2018Sangwin-equivalence-proof, + author = {Sangwin, C.~J.}, + title = {Proof Technology in Mathematics Research and Teaching}, + chapter = {Reasoning by equivalence: the potential contribution of an automatic proof checker}, + publisher = {Springer International}, + year = {2019}, + series = {Mathematics education in the digital era}, +} + +#Methodological Advances +@INBOOK{2018Corpus, + author = {Mej\'{\i}a-Ramon, P. and Alcock, L. and Lew, K. and Rago, P. and Sangwin, C.~J. and Inglis, M.}, + title = {Using corpus linguistics to investigate mathematical explanation}, + year = {?}, +} + +############### Education conferences + +# In PURE +@INPROCEEDINGS{SangwinEMAC2003, + author = {Sangwin, C.~J.}, + title = {Assessing higher mathematical skills using computer algebra marking through {AIM}}, + booktitle= {Proceedings of the Engineering Mathematics and Applications Conference (EMAC03, Sydney, Australia)}, + pages = {229--234}, + year = {2003}, +} + +@INPROCEEDINGS{UMTC2003, + author = {Sangwin, C.~J. and Cooker, M. and Hamden, M. and Iannone, P. and Nardi, E.}, + title = {Mathematicians as Educational Co-Researchers: Report on Work in Progress}, + booktitle= {Proceedings of the Undergraduate Mathematics Teaching Conference, {S}eptember 1--3, The {U}niversity of {B}irmingham, {B}irmingham, {UK}}, + year = {2003}, + pages = {93--107} +} + +@INPROCEEDINGS{BSRLM2003, + author = {Sangwin, C.~J.}, + title = {Providing Feedback to Students' Assignments}, + booktitle= {Proceedings of British Society for Research into Learning Mathematics, {N}ovember 15, The {U}niversity of {B}irmingham, {B}irmingham, {UK}}, + year = {2003}, + pages = {55--60}, +} + +@INPROCEEDINGS{CAA2004, + author = {Naismith, L. and Sangwin, C.~J.}, + title = {Computer algebra based assessment of mathematics online}, + booktitle= {Proceedings of the \href{http://www.caaconference.com/}{8th CAA Conference 2004}, 6th and {7}th July, The {U}niversity of {L}oughborough, {UK}}, + year = {2004}, + pages = {}, +} + +@INPROCEEDINGS{IMS2005, + author = {Ramsden, P. and Sangwin, C. J.}, + title = {A liberalised mathematical syntax for computer-aided assessment}, + booktitle= {\href{http://ftp.physics.uwa.edu.au/pub/IMS/2005/Proceedings/Proceedings/}{Proceedings of the International Mathematica Symposium, Perth, Australia}}, + year = {2005}, + pages = {}, +} + +@INPROCEEDINGS{ICTMT2005, + author = {Sangwin, C.~J.}, + title = {{Making Mathematical Distinctions in CAA with Computer Algebra}}, + booktitle= {7th International Conference on Technology in Mathematics Teaching, Bristol}, + year = {2005}, + pages = {}, +} + +# In PURE +@INPROCEEDINGS{WebALT2006, + author = {Sangwin, C.~J. and Grove, M.~J.}, + title = {{STACK}: addressing the needs of the ``neglected learners"}, + booktitle= {Proceedings of the First {WebALT} Conference and Exhibition January 5--6, Technical University of Eindhoven, Netherlands}, + year = {2006}, + pages = {81--95}, + publisher = {Oy WebALT Inc, University of Helsinki, ISBN 952-99666-0-1} +} + +@INPROCEEDINGS{ICTM2006, + author = {Kyle, J. and Sangwin, C.~J.}, + title = {To simplify or not to simplify: that is the question in the CAA of mathematics}, + booktitle= {3rd International Conference on the Teaching of Mathematics}, + year = {2006}, + pages = {}, +} + + +@INPROCEEDINGS{Sangwin2006QSpace, + author = {Sangwin, C.~J.}, + title = {Mathematical Question Spaces}, + booktitle= {Proceedings of the \href{http://www.caaconference.com/}{10th CAA Conference 2006}, The {U}niversity of {L}oughborough, {UK}}, + year = {2006}, + pages = {377--386}, +} + +@INPROCEEDINGS{ICMI2006, + author = {Sangwin, C.~J.}, + editor = {Le Hung Son and Sinclair, N. and Lagrange, J.~B. and Hoyles, C.}, + title = {Assessment within computer algebra rich learning environments}, + booktitle= {Proceedings of the ICMI 17 Study Conference: background papers for the ICMI 17 Study}, + year = {2006}, + pages = {C79}, + publisher = {Hanoi University of Technology}, +} + + +@INPROCEEDINGS{Sangwin2006UniServe, + author = {Keady, G. and Fitz-Gerald, G. and Gamble, G. and Sangwin, C.}, + title = {Computer-aided assessment in mathematical sciences}, + booktitle= {UniServe Science Symposium, University of Sydney}, + year = {2006}, + pages = {69--73}, +} + + +@INPROCEEDINGS{Sangwin2007CAME, + author = {Sangwin, C.~J.}, + title = {\href{http://web.mat.bham.ac.uk/C.J.Sangwin/Publications/2007CAME_Sangwin.pdf}{STACK: making many fine judgements rapidly}}, + booktitle= {CAME}, + year = {2007}, +} + +@INPROCEEDINGS{Sangwin2008ICME, + AUTHOR = {Cerval-Pe\~{n}a, E.~R. and Hermans, D. and Sangwin, C.~J.}, + TITLE = {Developing automatic assessment of steps in students' work}, + BOOKTITLE = {Proceedings of ICME, TSG-22}, + YEAR = {2008}, +} + +@INPROCEEDINGS{Sangwin2009Calculumus, + AUTHOR = {Bradford, R. and Davenport, J.~H. and Sangwin, C.~J.}, + TITLE = {A Comparison of Equality in Computer Algebra and Correctness in Mathematical Pedagogy}, + BOOKTITLE = {Proceedings of Calculemus}, + YEAR = {2009}, + series = {Lecture Notes in Artificial Intelligence}, + number = {5625}, + pages = {75--89}, + doi = {10.1007/978-3-642-02614-0_11}, +} + +@INCOLLECTION{Sangwin2010MSOR, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Stimulating Techniques in Entry-level Mathematics}, + BOOKTITLE = {Proceedings of the CETL-MSOR Network Conference}, + PUBLISHER = {MSOR Network}, + YEAR = {2011}, + editor = {Kyle, J.}, + pages = {64--69}, +} +## \conferences\2010\2010-9-MSOR\2010-9-MSOR-Sangwin.tex + +@INPROCEEDINGS{Sangwin2012ICME, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Computer Aided Assessment of Mathematics Using {STACK}}, + BOOKTITLE = {Selected Regular Lectures from the 12th International Congress on Mathematical Education}, + YEAR = {2012}, + pages = {695--715}, +} + +@INPROCEEDINGS{Sangwin2013SAVI, + AUTHOR = {Sangwin, C.J.}, + TITLE = {Assessment and reporting with STACK}, + BOOKTITLE = {Proceedings of Assessment and Effective Teaching of Calculus, NSF-Academy of Finland SAVI Workshop Tallahassee, Florida}, + YEAR = {2013}, + month = {March}, +} +## \conferences\2013\2013-4-Florida\ + +@INPROCEEDINGS{Sangwin2013HEA, + AUTHOR = {Butcher, P. and Sangwin, C.~. and Hunt, T.}, + TITLE = {Embedding and enhancing eAssessment in the leading open source {VLE}}, + BOOKTITLE = {Proceedings of the Higher Education Academy Conference, Birmingham}, + YEAR = {2013}, +} + +@INPROCEEDINGS{Sangwin2013HEAb, + AUTHOR = {Thomas, C. and Sangwin, C.~. and Ventura-Medina, E. and Badger, M.}, + TITLE = {Puzzle-based learning of mathematics in STEM subjects}, + BOOKTITLE = {Proceedings of the Higher Education Academy Conference, Birmingham}, + YEAR = {2013}, +} + +@INPROCEEDINGS{Sangwin2014ICMTRD, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Rules of Indices in {United Kingdom} Textbooks, 1800--2000}, + BOOKTITLE = {Proceedings of the International Conference on Mathematics Textbook Research and Development}, + YEAR = {2014}, + pages = {421--426}, +} +# http://eprints.soton.ac.uk/374809/ + +@INPROCEEDINGS{Sangwin2015KHDM, + author = {Sangwin, C.~J.}, + title = {Undergraduates' attempts at reasoning by equivalence in elementary algebra}, + booktitle= {Didactics of Mathematics in Higher Education as a Scientific Discipline: Conference Proceedings}, + year = {2016}, + pages = {335--341}, + series = {khdm-Report 16-05}, + address = {Universit\"{a}t Kassel, Leuphana Universit\"{a}t L\"{u}neburg, Universit\"{a}t Paderborn}, +} + +@INPROCEEDINGS{2016-RUME-contrib4, + author = {Alcock, L. and Inglis, M. and Lew, K. and Mejia-Ramon, P. and Rago, P. and Sangwin, C.~J.}, + title = {Comparing Expert and Learner Mathematical Language: A Corpus Linguistics Approach}, + booktitle= {Research in Undergraduate Mathematics Education: Conference Proceedings}, + year = {2016}, +} + +@INPROCEEDINGS{Sangwin2018CMEEI, + author = {Sangwin, C.~J.}, + title = {High stakes automatic assessments: developing an online linear algebra examination}, + booktitle = {Proceedings of 11th Conference on Intelligent Computer Mathematics}, + year = {2018}, + pages = {}, + address = {Hagenberg, Austria}, +} + +@INPROCEEDINGS{Sangwin2019CERME, + author = {Sangwin, C.~J.}, + title = {Developing and evaluating an online linear algebra examination for university mathematics}, + year = {2019}, + booktitle = {Proceedings of CERME 11}, + number = {TWG 21: Assessment in Mathematics Education}, + pages = {}, +} + +#CIEAEM71 (CIEAEM71: Connections and understanding in mathematics education: Making sense of a complex world) +@INPROCEEDINGS{Sangwin2019CIEAEM71, + author = {Klymchuk, S. and Sangwin, C.~J.}, + title = {Provocations in Mathematics: Teachers’ Attitudes}, + year = {2019}, + booktitle = {Proceedings of CERME CIEAEM71}, + pages = {}, +} + +############### Education contributed conference papers + +## in pubs + electronic +@INPROCEEDINGS{Sangwin2007JEM, + author = {Sangwin, C.~J.}, + title = {What is a Mathematical Question?}, + booktitle= {Proceedings of the JEM conference, Lisbon, Feb 2007}, + year = {2007}, +} + +## in pubs +@INPROCEEDINGS{Kyle02a, + author = {Kyle, J. and Sangwin, C.~J.}, + title = {{\tt AIM} -- a parable of dissemination}, + booktitle= {Proceedings of the 2nd International Conference on the Teaching of Mathematics, Hersonissos, Crete, Greece, July 1--6}, + year = {2002}, +} + + + +############### Mathematics education: contributions to working party reports + +@TECHREPORT{2011JMC, + AUTHOR = {Clark-Wilson, A. and Oldknow, A. and Sutherland, R.}, + TITLE = {Digital technologies and mathematics education}, + INSTITUTION = {Joint Mathematical Council of the {United Kingdom}}, + YEAR = {2011}, + month = {September}, +} +# https://www.ncetm.org.uk/public/files/8437569/ICT+report+Exec+Summary.pdf + + +@BOOK{2012PBL, + AUTHOR = {Badger, M. and Sangwin, C.~J. and Ventura-Medina, E. and Thomas, C.~R.}, + TITLE = {A guide to puzzle-based learning in {STEM} subjects}, + INSTITUTION = {University of Birmingham}, + isbn = {978-0-9567255-9-2}, + YEAR = {2012}, +} + + +@TECHREPORT{2012Problem-Solving, + AUTHOR = {Badger, M. and Sangwin, C.~J. and Hawkes, T.~O.}, + TITLE = {Teaching Problem-solving in Undergraduate Mathematics}, + INSTITUTION = {National HE STEM Programme, University of Birmingham}, + YEAR = {2012}, +} +# http://www.lulu.com/shop/christopher-sangwin-and-matthew-badger-and-trevor-hawkes/teaching-problem-solving-in-undergraduate-mathematics/paperback/product-20405493.html +# + +############### Education other + +@ARTICLE{Curric2000, + author = {Sangwin, C.~J.}, + title = {\href{http://ltsn.mathstore.ac.uk/newsletter/aug2001/pdf/curric2000booklet.pdf}{AS: Use of mathematics}}, + journal = {MSOR Connections}, + year = {2001}, + volume = {1}, + number = {3}, + pages = {43--45}, + note = {Also in Learning and Teaching in Mathematics, Statistics and Operational Research, 1(1), (2001)}, +} + +@Article{Sangwin2001, + author = {MacBean, J. and Graham, T. and Sangwin, C.~J.}, + title = {\href{http://ltsn.mathstore.ac.uk/newsletter/aug2001/pdf/groupworkreluctance.pdf}{Group work in mathematics: a survey of students' experiences and attitudes}}, + journal = {Learning and Teaching in Mathematics, Statistics and Operational Research}, + year = {2001}, + volume = {1}, + number = {2}, +} +# http://ltsn.mathstore.ac.uk/newsletter/aug2001/pdf/groupworkreluctance.pdf + + +@ARTICLE{SangwinJISC02, + author = {Sangwin, C.~J.}, + title = {Assessing higher skills with computer algebra marking}, + journal = {JISC Technology and Standards Watch}, + year = {2002}, + volume = {TSW 02--04}, + month = {September}, + note = {\href{http://www.jisc.ac.uk/techwatch/}{\tt http://www.jisc.ac.uk/techwatch/} (viewed September 2002)}, +} + +@ARTICLE{SangwinJISC05, + author = {Sangwin, C.~J.}, + title = {Serving Mathematics in a distributed e-learning environment}, + journal = {MSOR Connections}, + year = {2005}, + volume = {5}, + number = {2}, + pages = {24--27}, +} + +@ARTICLE{GeoGebra2006, + author = {Sangwin, C.~J.}, + title = {\href{http://ltsn.mathstore.ac.uk/newsletter/}{A brief review of GeoGebra: dynamic mathematics}}, + journal = {MSOR Connections}, + year = {2007}, + volume = {7}, + number = {2}, + pages = {36--38}, +} + +@ARTICLE{SangwinAuzGaz2009, + AUTHOR = Me, + TITLE = {\href{http://www.austms.org.au/Publ/Gazette/2009/Sep09/Letter.pdf}{Sophisticated computer-aided assessment is certainly possible, but what are we trying to achieve?}}, + JOURNAL = {Gazette of the Australian Mathematical Society}, + YEAR = {2009}, + volume = {36}, + number = {4}, + pages = {233-234}, + month = {September}, +} + +@TECHREPORT{2010STACKReport, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Who uses {STACK}? A report on the use of the {STACK CAA} system}, + INSTITUTION = {The Maths, Stats and OR Network, School of Mathematics, The University of Birmingham}, + YEAR = {2010}, +} + +@ARTICLE{2013STACK-Brum, + AUTHOR = {Sangwin, C.~.J. and Hermans, D.~F.~M.}, + TITLE = {A report on the use of STACK in Mathematics at Birmingham 2012--2013}, + YEAR = {2013}, + journal = {Community for Undergraduate Learning in the Mathematical Sciences}, + volume = {8}, + pages = {16--30}, + month = {December}, +} + +@TECHREPORT{2015STACKReport, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Who uses {STACK}? A report on the use of the {STACK CAA} system}, + INSTITUTION = {Loughborough University}, + YEAR = {2015}, + address = {Loughborough, UK}, +} + +@INBOOK{Nakamura2010, + AUTHOR = {Nakamura, Y.}, + TITLE = {The STACK e-Learning and Assessment System for mathematics, science and engineering education through Moodle}, + CHAPTER = {Preface}, + pages = {vi--vii}, + PUBLISHER = {Tokyo Denki University Press}, + YEAR = {2010}, + note = {In Japanese. ISBN 978-4-501-54820-9}, +} + +@ARTICLE{2010Truth, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {The truth, nothing but the truth ... but not the whole truth!}, + JOURNAL = {MSOR Network Connections}, + YEAR = {2010}, + volume = {10}, + number = {3}, + pages = {29--32}, +} + +@ARTICLE{2011Alevels, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Criteria-based and norm-referenced information on {GCE A-level} outcomes}, + JOURNAL = {Mathematics Today}, + YEAR = {2011}, + volume = {47}, + number = {3}, + month = {June}, + pages = {140--141} +} + +@ARTICLE{2012DragMath, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {The {DragMath} equation editor}, + JOURNAL = {MSOR Network Connections}, + YEAR = {2012}, + volume = {12}, + number = {2}, + pages = {5--8}, +} + +@ARTICLE{2018-MathsToday, + author = {Lowe, T. and Sangwin, C.~J. and Jones, I. and Hunt, T.}, + title = {Success for {STACK}}, + journal = {Mathematics Today}, + year = {2018}, + month = {October}, +} + +@ARTICLE{2019-Ording-Review, + AUTHOR = {Sangwin, C.~J.}, + title = {Book review: 99 Variations on a Proof, by {P.~Ording}}, + journal = {London Mathematical Society Newsletter}, + year = {2019}, + month = {November}, +} + +@ARTICLE{2019-STACK-Edinburgh, + author = {Sangwin, C.~J. and Zerva, K.}, + title = {Developing Online Learning Materials to Support Undergraduate Education at the {University of Edinburgh}}, + journal = {Mathematics Today}, + year = {2019}, +} + +############### Public understanding / Other + +@UNPUBLISHED{Underposter, + author = {Maths Connects}, + title = {Posters in the {L}ondon Underground}, + note = {EPSRC project for Maths Year 2000}, + month = {June}, + year = {2000}, +} + +@ARTICLE{PlusMaths11, + author = {Budd, C.~J. and Sangwin, C.~J.}, + title = {Analemmatic Sundials: how to build one and why they work}, + journal = {Plus Maths online magazine}, + year = {2000}, + volume = {11}, + note = {\href{http://plus.maths.org.uk/issue11/}{\tt http://plus.maths.org.uk/issue11/}}, +} + +@ARTICLE{PlusMaths14, + author = {Budd, C.~J. and Sangwin, C.~J.}, + title = {Maths a{M}azes}, + journal = {Plus Maths online magazine}, + year = {2001}, + volume = {14}, + note = {\href{http://plus.maths.org.uk/issue14/}{\tt http://plus.maths.org.uk/issue14/}}, +} + +@ARTICLE{PlusMaths19, + author = {Sangwin, C.~J.}, + title = {An infinite series of surprises}, + journal = {Plus Maths online magazine}, + year = {2002}, + volume = {19}, + note = {\href{http://plus.maths.org.uk/issue19/}{\tt http://plus.maths.org.uk/issue19/}}, +} + +@ARTICLE{JOSNewton, + author = {Sangwin, C.~J.}, + title = {Newton's polynomial solver}, + journal = {Journal of the Oughtred Society}, + year = {2002}, + volume = {11}, + number = {1}, + pages = {3--7, Figure on Cover}, + note = {ISSN 1061-6292}, +} + +@ARTICLE{PlusMaths27, + author = {Sangwin, C.~J.}, + title = {Making the grade}, + journal = {Plus Maths online magazine}, + year = {2003}, + volume = {27}, + note = {\href{http://plus.maths.org.uk/issue27/}{\tt http://plus.maths.org.uk/issue27/}}, +} + +@ARTICLE{PlusMaths28, + author = {Sangwin, C.~J.}, + title = {Finding the gradient of a curve {II}}, + journal = {Plus Maths online magazine}, + year = {2004}, + volume = {28}, + note = {\href{http://plus.maths.org.uk/issue28/}{\tt http://plus.maths.org.uk/issue28/}}, +} + +@ARTICLE{PlusMaths29, + author = {Budd, C.~J. and Sangwin, C.~J.}, + title = {101 uses of a quadratic equation: Part {I}}, + journal = {Plus Maths online magazine}, + year = {2004}, + volume = {29}, + note = {\href{http://plus.maths.org.uk/issue29/}{\tt http://plus.maths.org.uk/issue29/}}, +} + +@ARTICLE{PlusMaths30, + author = {Budd, C.~J. and Sangwin, C.~J.}, + title = {101 uses of a quadratic equation: Part {II}}, + journal = {Plus Maths online magazine}, + year = {2004}, + volume = {30}, + note = {\href{http://plus.maths.org.uk/issue30/}{\tt http://plus.maths.org.uk/issue30/}}, +} + +@ARTICLE{JOSNelson, + author = {Sangwin, C.~J.}, + title = {Non-logarithmic slide rules}, + journal = {Journal of the Oughtred Society}, + year = {2005}, + volume = {14}, + number = {1}, + pages = {16--17}, + note = {ISSN 1061-6292}, +} + +# In PURE +@ARTICLE{BuildPoly05, + author = {Sangwin, C.~J.}, + title = {On Building Polynomials}, + journal = {The Mathematical Gazette}, + year = {2005}, + month = {November}, + number = {516}, + volume = {89}, + pages = {441-451} +} + +@ARTICLE{Integrometer2006, + author = {Sangwin, C.~J.}, + title = {Locating the centre of mass by mechanical means}, + journal = {Journal of the Oughtred Society}, + year = {2006}, + volume = {15}, + number = {2}, + pages = {16--18}, + note = {ISSN 1061-6292}, +} +## Sent to Gazette, 11 May 2006. Rejected 24 July 2006. +## Sent to JOS, 24 July 2006. Accepted + +# In PURE +@ARTICLE{2008WattLinkages, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Revisiting {J}ames {W}att's linkage with implicit functions and modern techniques}, + JOURNAL = {Mathematics Magazine}, + YEAR = {2008}, + volume = {81}, + number = {2}, + pages = {116--126}, + month = {April}, +} +## Accepted: mathematics magazine 16/8/7 +## 2006functions, submitted 1/11/6 ref MM 06-269 + + +@ARTICLE{2008HowThisButton, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {\href{http://mathdl.maa.org/mathDL/4/?pa=content&sa=viewDocument&nodeId=1606}{How does this button work?} GeoGebra from the point of view of {E}uclidean Constructions}, + JOURNAL = {\href{http://mathdl.maa.org/mathDL/4/}{Journal of Online Mathematics and its Applications}}, + YEAR = {2007}, + volume = {7}, + month = {July}, + note = {Article ID: 1606}, +} +## Email directory geogebra +## Submitted to JOMA 27/4/2007, Accepted 9/8/2007. Files sent 21/8/7 +## http://www.maa.org/joma/Volume7/Sangwin/index.html + +@ARTICLE{PlusMaths44, + author = {Sangwin, C.~J.}, + title = {Arithmetic, Bones and Counting}, + journal = {Plus Maths online magazine}, + year = {2007}, + volume = {44}, + note = {\href{http://plus.maths.org.uk/issue44}{\tt http://plus.maths.org.uk/issue44}}, +} +## Submitted +## Email directory: plus + +@ARTICLE{2007-Best-of-times, + author = {Sangwin, C.~J.}, + title = {A tale of two curricula: Euler's algebra text book}, + journal = {Plus Maths online magazine}, + year = {2007}, + volume = {45}, + note = {\href{http://plus.maths.org.uk/issue45}{\tt http://plus.maths.org.uk/issue45}}, +} +## Email directory: plus + +@ARTICLE{WonkyTrammel, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {The wonky trammel of {A}rchimedes}, + JOURNAL = TMA, + YEAR = {2009}, + volume = {28}, + number = {1}, + pages = {48--52}, + month = {March}, + note = {DOI: 10.1093/teamat/hrn019} +} +## http://teamat.oxfordjournals.org/cgi/reprint/hrn019?ijkey=z00g6j6j1f9xqB7&keytype=ref +# 25 Jul 2008 sent to TMA, part B. +# email: 2007wonkey +# 24/9/2008 Accepted in TMA + +@ARTICLE{GeoGebra2008, + author = {Sangwin, C.~J.}, + title = {Geometrical functions: tools in GeoGebra}, + journal = {MSOR Connections}, + year = {2008}, + volume = {8}, + number = {4}, + pages = {17--20}, +} + +@ARTICLE{Integrals2010, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Intriguing integrals}, + journal = {Plus Maths online magazine}, + YEAR = {2010}, + volume = {54}, + note = {\href{http://plus.maths.org.uk/issue54}{{\tt http://plus.maths.org.uk/issue54}}}, +} + +# IN PURE +@ARTICLE{LimitFree2010, + AUTHOR = {Sangwin, C.~J.}, + TITLE = {Limit-free derivatives}, + JOURNAL = {The Mathematical Gazette}, + YEAR = {2011}, + month = {November}, + volume = {95}, + number = {534}, + pages = {469--482}, +} + +# In PURE +@INBOOK{2014IMA, + author = {Budd, C.~J. and Sangwin, C.~J.}, + TITLE = {50 Visions of Mathematics - celebrating 50 years of the IMA}, + CHAPTER = {9: What's the use of a quadratic equation?}, + pages = {32--36}, + PUBLISHER = {Oxford University Press}, + YEAR = {2014}, +} + +# In PURE +@ARTICLE{2014ASE, + author = {Sangwin, C.~J.}, + title = {Shape is as important as size: roundness and the science of measurement}, + journal = {School Science Review}, + year = {2014}, + volume = {95}, + number = {353}, + pages = {115--122}, + month = {June}, +} +# Sangwin, C. J., (2014) Shape is as important as size: roundness and the science of measurement, School Science Review, 95(353) 115-122. + +@ARTICLE{2015Snapshot, + author = {Sangwin, C.~J.}, + title = {Curriculum development in university mathematics: where mathematicians and education collide}, + journal = {Snapshots of modern mathematics from {Oberwolfach}}, + number = {11/2015}, + year = {2015}, + doi = {10.14760/SNAP-2015-011-EN}, +} + +@ARTICLE{2015Hanoi, + author = {Sangwin, C.~J.}, + title = {The Tower of Hanoi -- Myths and Maths (book review)}, + journal = {The Mathematical Intelligencer}, + year = {2015}, + doi = {10.1007/s00283-015-9552-y}, +} +# Article: 9552 +# DOI: 10.1007/s00283-015-9552-y + +# IN PURE +@ARTICLE{2015Audited, + author = {Sangwin, C.~J.}, + title = {An Audited Elementary Algebra}, + journal = {The Mathematical Gazette}, + year = {2015}, + month = {July}, + volume = {99}, + number = {545}, + pages = {290--297}, + doi = {http://dx.doi.org/10.1017/mag.2015.37}, +} + +@ARTICLE{2015MathematicsToday, + author = {Sangwin, C.~J.}, + title = {Mountains in mathematics}, + journal = {Mathematics Today}, + year = {2015}, + volume = {51}, + number = {6}, + pages = {300--305}, +} + +@ARTICLE{2015-TEAMAT-CAA-editorial, + author = {Sangwin, C.~J.}, + title = {Editorial}, + journal = {Teaching Mathematics and its Applications}, + year = {2015}, + volume = {34}, + number = {2}, + pages = {1--2}, + doi = {doi: 10.1093/teamat/hrv014}, +} + +@ARTICLE{2017SMC-hex, + author = {Sangwin, C.~J.}, + title = {Engaging students with the game of Hex}, + journal = {Scottish Mathematics Council Journal}, + year = {2017}, + volume = {47}, + pages = {60--64}, + month = {December}, +} + +@ARTICLE{2018-Contrapositive, + author = {Kinnear, G. and Sangwin, C.~J.}, + title = {Contradiction and contrapositive, what is the difference?}, + journal = {Scottish Mathematics Council Journal}, + year = {2018}, + volume = {48}, + month = {December}, + pages = {84--90}, +} + +@ARTICLE{2018-ComplexQuestions, + author = {Sangwin, C.~J.}, + title = {Complex Questions}, + journal = {Scottish Mathematics Council Journal}, + year = {2019}, + volume = {49}, + month = {December}, + pages = {??}, +} diff --git a/CaseStudies/2019/StackAtScale/index.html b/CaseStudies/2019/StackAtScale/index.html new file mode 100644 index 00000000..edaf0043 --- /dev/null +++ b/CaseStudies/2019/StackAtScale/index.html @@ -0,0 +1,415 @@ + + + + + + + + + + + + STACK at Scale: The Open University - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

STACK at Scale: The Open University

+

+

The Open University.

+

Tim Lowe, School of Mathematics and Statistics, +Tim Hunt, Information Technology.

+

Introduction

+
+
+The Open University. +
Figure: The Open University. +
+
+

The Open University is the UK’s largest academic institution. In 2017/18 there were approximately 175,000 students studying with the University, mainly part time, making approximately 65,000 full-time equivalent students. Students combine their study with work, family, caring and other responsibilities. Students study from home, at a distance, guided by the University’s Moodle-based VLE and using a combination of online and printed materials. Students are supported by a tutor who provides individual support to a group of typically 20 students and usually offers a combination of face-to-face and online tutorial support.

+

The School of Mathematics and Statistics offers a number of undergraduate qualifications in mathematics (with a total intake of approximately 1300 each year) and a taught MSc, which is the largest such course in the UK. In addition, students throughout the University can take one or more mathematics modules in support of their main subject of study. There are approximately 13,000 student-module combinations within mathematics and statistics each year.

+

STACK is an ideal tool to support the distance-learning of mathematics, as it enables students to practice key techniques from home whilst receiving immediate feedback on their answers. Students can attempt different randomised variants of questions to support their learning and development.

+

Execution

+
+
+A STACK question on finding the magnitude of friction force on a box resting on an incline. +
Figure: A typical OU STACK question. +
+
+ +

STACK was first used in the curriculum in 2014 with the launch of a new introductory calculus module: MST124 "Essential Mathematics I", which is currently studied by approximately 2,800 students per year. Since then, STACK has been taken up by many modules at all levels. The main use is for formative “practice quizzes” allowing students to practice the important techniques taught. At lower levels, it is also used for summative assignments, which both encourage students to use the formative quizzes to prepare for the assignment and practice their mathematics, and help students keep on pace with their study by providing deadlines. At the postgraduate level, a series of linked-STACK questions has been developed to guide students through more complex mathematical arguments in the calculus of variations [1].

+

The School of Mathematics and Statistics have been supporting colleagues in the School of Engineering and Innovation who use STACK to support their teaching of mathematically-based topics. The School is also using STACK to support students between formal module study, and in preparation for study as a key component of online “Revise and Refresh” support materials.

+

STACK is currently used in at least 10 modules providing at total of 330 CATS credits and reaching over 6,500 students annually. Over one million STACK questions are answered by students each year, which is approximately 18% of all quiz questions answered by OU students.

+

Server

+

STACK is supported by the University Information Technology department as part of the Moodle installation. This consists of 11 load-shared Apache Web Servers supported by 2 MaximaPool servers to service the use of Maxima by STACK. Despite the high level of use, STACK has been robust in performance with no unplanned service outages during the period of use. All question authors are strongly encouraged to include Question tests as part of each STACK question, which helps ensure that the integrity of the questions is maintained over time. Before each STACK upgrade, IT checks the question tests of all STACK questions to ensure none are affected by the upgrade. If any tests fail, the questions are corrected by the appropriate module staff before the upgrade is applied to the live system.

+

Feedback

+

Students’ engagement with the quizzes is often demonstrated by comments posted in online forums, for example questioning details of the worked solution provided. Students are often not content with just being able to answer every question in a quiz, but continue to try to correctly answer the quiz in the minimum time.

+

Student feedback on the use of STACK quizzes has been positive, with many choosing to praise them in the unprompted open comments of the university module feedback survey. Conversely, negative comments are received where a module does not have STACK quizzes. Typical student comments include the following:

+
    +
  • I do value the practice quizzes because you do get practice, the feedback explanations are very good and detailed.
  • +
  • [I] have done two runs of the practice quiz which has made a big difference for me and will become something I will be doing much more as [it] helps so much.
  • +
  • I have been doing the practice quiz every morning now for 2 weeks ... I managed 100% on one of the quizzes and over 90% now on all of them so my confidence level is going up!
  • +
  • The practice quizzes were excellent and I think absolutely essential for consolidating your understanding of the subject.
  • +
+

What's Next

+

The School currently plans to introduce STACK quizzes into additional modules as they are updated. Future plans include extending the use of STACK to further, higher level modules and to expand the use of STACK to support students in checking their preparedness for the study of various modules.

+

References

+

[1] T. W. Lowe and B. M. Mestel. Using STACK to support student learning at masters level: a case study. Teaching Mathematics and its Applications: An International Journal of the IMA, 2019.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2019/optes/index.html b/CaseStudies/2019/optes/index.html new file mode 100644 index 00000000..80444de9 --- /dev/null +++ b/CaseStudies/2019/optes/index.html @@ -0,0 +1,433 @@ + + + + + + + + + + + + optes: Optimising Self-study With STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

optes: Optimising Self-study With STACK

+

DHBW Mannheim

+

Miriam Weigel, Katja Derr, Reinhold Hübl

+

Abstract

+

The optes project uses STACK in their pre-course, designed to help students improve their self-studying skills for their first year at university. The tests were developed and maintained at DHBW Mannheim. Here, students take a diagnostic test, and based on their results are given access to various learning modules, comprising text, graphs, animations, examples and exercises. An analysis of data gathered from the first evaluation phase of the project shows that the pre-course is effective at bridging gaps in school knowledge: at-risk students who end up scoring highly in the pre-course show improved performance in their first year mathematics courses.

+

Introduction

+

Students entering higher education are a diverse group and many students have considerable gaps in school knowledge, putting additional pressure on their first year at university. This particularly applies to mathematics, as basic skills in this subject are considered a prerequisite to successfully complete a course in STEM subjects. As a consequence, many universities provide preparatory courses in mathematics, either face-to-face, web-based, or in blended learning scenarios.

+

The joint research project optes, funded by the German Federal Ministry of Education and Research (BMBF), develops and evaluates learning materials and tools that help students “refresh” their basic knowledge in mathematics and support the development of learning strategies. optes stands for “Optimierung der Selbststudiumsphase”, which translates to "optimisation of the self-study phase".

+

Over the course of eight years, optes developed a comprehensive web-based pre-course consisting of diagnostic tests, learning modules and concepts for web-based student support, and tested it at the participating universities. The partner universities include Baden-Wuerttemberg Cooperative State University (DHBW) Karlsruhe, DHBW Mannheim, DHBW Mosbach, University of Applied Sciences and Arts Ostwestfalen-Lippe, Universität Hamburg; Cooperating universities: Julius-Maximilians-Universität Würzburg, University of Education Heidelberg.

+

Why Use STACK?

+

The project put a strong focus on the development of self-tests that enable learners to apply their knowledge and provide them with meaningful feedback. This required a sophisticated CAA system, especially one that allowed students to enter an algebraic input. Since optes results are published under Creative Commons or General Public licenses, it was also important that the system was open source. To find the most suitable CAA system, the researchers analysed and compared many existing mathematical tools and in 2013, STACK was chosen. One of the reasons for choosing STACK, is that STACK uses the Learning Management System (LMS) Moodle and the Computer Algebra System (CAS) Maxima, both of which are supported by large communities. This gave the researchers confidence that STACK would also be used and developed further. Additionally, STACK is flexible enough to allow researchers to design very different types of mathematical problems. The only barrier was that STACK was not available for the LMS ILIAS at the time, a system widely used in Germany. However a crowd funding initiative was successful in gathering enough funds to implement STACK into ILIAS.

+

Execution

+

The partner university DHBW Mannheim was responsible for the development of tests and self-assessments. Here, a very basic version of the pre-course was implemented in 2013, and based on repeated evaluations, the different tests and learning modules were successively built and improved upon [2]. While some learning resources already existed in the form of printed scripts and paper versions of tests, the complete course material had to be rewritten and typed into ILIAS. In 2019, the course held ten interactive learning modules, with more than 1500 mathematics test items, 140 of which use STACK.

+

Figure 1 shows an overview of the course structure as executed at DHBW Mannheim since 2014. The programme runs in the months leading up to a new semester, and starts with a diagnostic self-test covering the entire pre-course's syllabus. See also recommendations by SEFI mathematics working group [6], and cosh [1].

+

Depending on their diagnostics test results, students may access the different learning modules. Each course provides text, graphs, animations, examples and exercises, and at the end of each module, students can take a subject-related test consisting of 10 to 15 randomised questions. Students who want additional support can enrol in e-tutored courses, where their learning process is structured and monitored by e-tutors. Students can then discuss problems and test results with peers and e-tutors, and are required to upload completed exercise sheets.

+

During induction week, all participating first year students take a final test at the University’s computer laboratories. Since 2014, more than 2800 students have participated in the diagnostic pre-test and the pre-course at DHBW Mannheim. This corresponds to approximately 560 students per year, which is around 80% of the cohort.

+
+
+A question about a pole-vaulter beginning a jump with a running start, then rotating his body about the other end. Students must give an expression for the speed. +
Figure: Course design at DHBW Mannheim. +
+
+ +

While the diagnostic self-test aims at informing learners of their level of knowledge in relation to the curriculum, the self-tests provided in the ten different courses are designed to encourage learners to independently practice their skills.

+

Question Construction

+

Figure 2 shows an example of an optes question in ILIAS. Students can click the checkmark next to the input box to have their answers validated by the system. On top of the question, the student can click to pop-out an explanation of the input syntax. The question is graded by clicking on “Rückmeldung anfordern”, which means "Request feedback".

+

In this example, the student is asked to give an example of a function with three given zeroes. There are no other constraints, and in particular the function can also have more zeroes. The given zeroes are randomly generated, so the student can restart the test to try a variant of the problem with different constants.

+
+
+An optes question about giving an example of a function with given zeroes. +
Figure: An optes question about giving an example of a function with given zeroes. +
+
+ +

optes questions focus on providing good feedback to students [8]. Feedback incorporates partial marks, if the student for example entered a function with only one or two of the given zeroes, and visuals, by for example graphing the student's answer (in red) against a correct answer (in blue). The student is also shown the value of their function at the three given points and given a model solution. optes questions are great examples of effective use of STACK's feedback features.

+
+
+Feedback to the previous question. It is algebraically explained why the student's zeroes are wrong, and their answer is graphed against the model answer. +
Figure: Feedback to the example question shown above. +
+
+ +

Results

+

The major goal of the optes project was to improve students‘ self-study abilities in mathematics related subjects. Using data collected from the first evaluations phase of the project, the researchers studied the influence of taking the pre-course on different variables. They found that the biggest factor in study success was a student's previous knowledge and secondary school scores. However, they also found that the pre-course could be very effective at improving first-year performance. Of the students whose performance were at risk, those who scored highly in the pre-course also did better in their first year of study. These were the students with poor prior study success or little domain-related knowledge. Self-test engagement was also found to have significance, as they were related to both pre-course gains and first-year performance.

+

Challenges

+

A major advantage of learning management systems is their ability to provide automated feedback to students. Instructors are hence relieved from the load of marking hundreds of exercises, and students appreciate the immediate response of the system. However, writing feedback for web-based mathematical problems is time-consuming, and these efforts may grow exponentially when the questions have multiple correct answers. To help soften this burden, it is important to share STACK questions, not only across pre-course projects but also across universities and e-learning platforms.

+

Enablers

+

A major enabler for the project was the initiative to integrate STACK into ILIAS. If this crowd funding initiative had failed, optes may have had to choose a less suited CAA system.

+

Furthermore, a lot of institutional support enabled this project. While all resources developed by optes are Open Educational Resources (OER), the implementation of the learning material at third party universities or educational institutions demanded staff and technical infrastructure to install ILIAS and STACK. Staff and technical support helped administer the pre-course and adapt the learning material to each university’s needs. Furthermore, the e-tutor system was enabled by lecturers and older students who took the time to learn to use STACK so they could help pre-course participants as e-tutors.

+

What's Next?

+

Since 2019, the rollout of optes to other universities and institutions has begun, and as more and more lecturers use the optes resources, the STACK community in Germany continues to grow. This community is largely represented by the working group "Mathe digital". Lecturers are encouraged to develop and contribute their own questions, resulting in a growing and improving database of available STACK questions.

+

The researchers continue to evaluate the data from the project. When this analysis is finished, it will be possible to better identify the strengths and weaknesses of the course structure.

+

Like all projects funded by the German BMBF programme "Quality pact for teaching", optes will be finished by the end of 2020. The developed concepts and course material, however, will be used and developed further at the optes partner universities and at all universities and institutions that share the material. Future plans include incorporating adaptive testing and expanding the work to other subjects and topics, such as mathematics for business and psychology courses.

+

References

+

[1] COSH Cooperation Schule Hochschule. Mindestanforderungskatalog mathematik. 2014.

+

[2] K. Derr. Identifying consistent variables in a heterogeneous data set. Electronic Journal of e-Learning EJEL, 15(1):82-93, 2017.

+

[3] K. Derr, R. Hubl, and M. Z. Ahmed. Prior knowledge in mathematics and study success in engineering. informational value of learner data collected from a web-based pre-course. European Journal of Engineering Education, 10(3):1-16, 2018.

+

[4] C. J. Sangwin and I. Jones. Asymmetry in student achievement on multiple choice and constructed response items in reversible mathematics processes. Educational Studies in Mathematics, 94:205-222, 2017.

+

[5] B. Alpers. A framework for mathematics curricula in engineering education. 2013.

+

[6] M. Weigel, K. Derr, R. Hubl, and T. Podgayetskaya. Stack-aufgaben im formativen eassessment: Einsatzmoglichkeiten des feedbacks. Zenodo, 2019.

+

[7] M. Weigel, K. Derr, R. Hubl, E. Mechelke-Schwede, and T. Podgayetskaya. Inhaltliche und technische aspekte des automatisierten feedback. einsatz des fragetyps stack im formativen eassessment. Beitrage zum Mathematikunterricht 2017, 1185-1192, 2017.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2020/Images/BWFGB.png b/CaseStudies/2020/Images/BWFGB.png new file mode 100644 index 00000000..e5799672 Binary files /dev/null and b/CaseStudies/2020/Images/BWFGB.png differ diff --git a/CaseStudies/2020/Images/HAW.png b/CaseStudies/2020/Images/HAW.png new file mode 100644 index 00000000..fad5791e Binary files /dev/null and b/CaseStudies/2020/Images/HAW.png differ diff --git a/CaseStudies/2020/Images/HCU_en.jpg b/CaseStudies/2020/Images/HCU_en.jpg new file mode 100644 index 00000000..1c6f85d4 Binary files /dev/null and b/CaseStudies/2020/Images/HCU_en.jpg differ diff --git a/CaseStudies/2020/Images/MINTFIT-Hamburg.png b/CaseStudies/2020/Images/MINTFIT-Hamburg.png new file mode 100644 index 00000000..bceb7a78 Binary files /dev/null and b/CaseStudies/2020/Images/MINTFIT-Hamburg.png differ diff --git a/CaseStudies/2020/Images/MINTFIT_general_feedback.png b/CaseStudies/2020/Images/MINTFIT_general_feedback.png new file mode 100644 index 00000000..2fda8996 Binary files /dev/null and b/CaseStudies/2020/Images/MINTFIT_general_feedback.png differ diff --git a/CaseStudies/2020/Images/MINTFIT_specific_feedback.png b/CaseStudies/2020/Images/MINTFIT_specific_feedback.png new file mode 100644 index 00000000..9fa1131f Binary files /dev/null and b/CaseStudies/2020/Images/MINTFIT_specific_feedback.png differ diff --git a/CaseStudies/2020/Images/MINTFIT_thumbnail.png b/CaseStudies/2020/Images/MINTFIT_thumbnail.png new file mode 100644 index 00000000..f4947654 Binary files /dev/null and b/CaseStudies/2020/Images/MINTFIT_thumbnail.png differ diff --git a/CaseStudies/2020/Images/OTH_1.jpg b/CaseStudies/2020/Images/OTH_1.jpg new file mode 100644 index 00000000..5f7c5b83 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_1.jpg differ diff --git a/CaseStudies/2020/Images/OTH_2.png b/CaseStudies/2020/Images/OTH_2.png new file mode 100644 index 00000000..c97b73d9 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_2.png differ diff --git a/CaseStudies/2020/Images/OTH_3.png b/CaseStudies/2020/Images/OTH_3.png new file mode 100644 index 00000000..a6130113 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_3.png differ diff --git a/CaseStudies/2020/Images/OTH_4.png b/CaseStudies/2020/Images/OTH_4.png new file mode 100644 index 00000000..e92260e7 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_4.png differ diff --git a/CaseStudies/2020/Images/OTH_5.png b/CaseStudies/2020/Images/OTH_5.png new file mode 100644 index 00000000..d94bbe18 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_5.png differ diff --git a/CaseStudies/2020/Images/OTH_6.png b/CaseStudies/2020/Images/OTH_6.png new file mode 100644 index 00000000..e15608db Binary files /dev/null and b/CaseStudies/2020/Images/OTH_6.png differ diff --git a/CaseStudies/2020/Images/OTH_7.png b/CaseStudies/2020/Images/OTH_7.png new file mode 100644 index 00000000..06af7c4b Binary files /dev/null and b/CaseStudies/2020/Images/OTH_7.png differ diff --git a/CaseStudies/2020/Images/OTH_logo.png b/CaseStudies/2020/Images/OTH_logo.png new file mode 100644 index 00000000..e5c2fdef Binary files /dev/null and b/CaseStudies/2020/Images/OTH_logo.png differ diff --git a/CaseStudies/2020/Images/OTH_thumbnail.png b/CaseStudies/2020/Images/OTH_thumbnail.png new file mode 100644 index 00000000..70f99940 Binary files /dev/null and b/CaseStudies/2020/Images/OTH_thumbnail.png differ diff --git a/CaseStudies/2020/Images/TUHH.png b/CaseStudies/2020/Images/TUHH.png new file mode 100644 index 00000000..8d05f369 Binary files /dev/null and b/CaseStudies/2020/Images/TUHH.png differ diff --git a/CaseStudies/2020/Images/UHH.png b/CaseStudies/2020/Images/UHH.png new file mode 100644 index 00000000..5cd15fad Binary files /dev/null and b/CaseStudies/2020/Images/UHH.png differ diff --git a/CaseStudies/2020/Images/UKE.png b/CaseStudies/2020/Images/UKE.png new file mode 100644 index 00000000..0e378749 Binary files /dev/null and b/CaseStudies/2020/Images/UKE.png differ diff --git a/CaseStudies/2020/MINTFIT/index.html b/CaseStudies/2020/MINTFIT/index.html new file mode 100644 index 00000000..fc17eb0b --- /dev/null +++ b/CaseStudies/2020/MINTFIT/index.html @@ -0,0 +1,430 @@ + + + + + + + + + + + + Diagnostics Testing With STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Diagnostics Testing With STACK

+

University of Technology, Hamburg

+

Helena Barbas

+

https://orcid.org/0000-0002-2384-8042

+
+ + + + + + + + + + + + + + +
+ +

Abstract

+

The MINTFIT Math Test is an online test for high school students, or anyone interested in a university STEM degree programme. It is provided by the MINTFIT project based in the universities HafenCity Universität Hamburg (HCU), Universität Hamburg (UHH), University of Applied Sciences Hamburg (HAW Hamburg), University Medical Center Hamburg-Eppendorf (UKE) and University of Technology Hamburg (TUHH) and funded by the Hamburg Ministry of Science, Research, Equalities and Districts (Behörde für Wissenschaft, Forschung, Gleichstellung und Bezirke Hamburg, BWFGB). The MINTFIT Math Test, as well as the MINTFIT online tests in physics, chemistry and informatics, run on a Moodle system. The STACK plugin offers many benefits to the Math Test, both when used at home and in different university settings.

+

Introduction

+

The MINTFIT Math Test is a free diagnostic online test that lets participants check their mathematics skills for a successful start to a STEM degree programme. It is part of the MINTFIT tests and courses programme on the subjects mathematics, physics, chemistry and informatics, accessible on the MINTFIT platform https://www.mintfit.hamburg/. Participants get instant feedback on their results after finishing the Math Test. They can then use two online mathematics bridging courses (OMB+ and viaMINT) to fill the gaps in their mathematics knowledge as identified by the test. The MINTFIT Math Test is available in German and in English. For more information see [1].

+
+
+ +
Figure: After taking the MINTFIT test, students are advised on which topics to revise. +
+
+ +

STACK offers many advantages in the setting of diagnostics testing for both participants and organisers.

+

A STACK question's potential response tree helps diagnose the errors committed by the participants, as it is possible to compare the entered solution with incorrect solutions that arise from known common mistakes. It is also possible to provide partial credit for partially correct answers, or for errors carried forward.

+

Additionally, it is possible to generate many random variants of a question. If for example, the question is to find the derivative of a polynomial, the system can randomly draw its coefficients from a specified set. Variants that are either too difficult or too easy can then be deleted by hand. At the universities in Hamburg, the MINTFIT Math Test is used in exam-like situations as a part of university entrance tests, a module requirement or as an opportunity to collect bonus points for the first term exams. The possibility to generate different questions of the same difficulty level is invaluable here.

+
+
+ +
Figure: Students are given partial credit for partially correct answers, and specific feedback on their mistakes. +
+
+ +

Execution

+

The STACK questions in the MINTFIT Math Test were written by a scientific assistant (the author) and a student helper in 2014/2015, supported by an IT assistant. New STACK questions were easily generated by for example copying an existing question with a similar structure and looking up the coding structure of Maxima. This way, with just a small starting set of exemplary questions, it was possible to quickly get comfortable with STACK without any help from other sources or training.

+

The questions in the MINTFIT Math Test can be done by mental arithmetic or by calculating using pen and paper – a calculator is not necessary and should not be used (neither at home nor in exam-like situations). However, since the general approach of MINTFIT and the Math Test particularly is the voluntariness of its users, participants are not controlled (with the exception of some settings, like the university entrance test, where they are seated in an exam room). However, they are informed before starting the test that their results are representative for their math skills only if they complete it without using a calculator or looking the answers up on a webpage like Wolfram Alpha.

+

About 50 questions in the question pool of the Math Test are implemented with STACK. The MINTFIT Math Test has been accessible since June 2015.

+

Results

+

It is difficult to measure the precise impact of the MINTFIT Math Test on students' study skills. Nonetheless, there is student feedback from a form offered after the test. Of all those who answered the question: "Do you think that the test is helpful for you or freshmen in general?", 66% answered with a clear "yes". Answers were given in a range from 1 ("yes") to 5 ("absolutely not"), with a mean response of 1.5. Of all those who answered the question "Do you feel fairly rated?", 61% answered "yes". With possible answers as in the previous question, this one had a mean answer of 1.62.

+

Challenges

+

The main challenges of using STACK were of technical nature. Keeping up with the updates of Moodle and STACK means you have to keep a close eye on the appearance of the test. Moodle itself offers many possibilities, so one needs time to make the optimal adjustments there.

+

Enablers

+

MINTFIT is a project by the universities HafenCity Universität Hamburg (HCU), Universität Hamburg (UHH), University of Applied Sciences Hamburg (HAW Hamburg), University Medical Center Hamburg-Eppendorf (UKE) and the University of Technology Hamburg (TUHH) in Hamburg, Germany. It is funded by the Hamburg Ministry of Science, Research, Equalities and Districts (Behörde für Wissenschaft, Forschung, Gleichstellung und Bezirke Hamburg, BWFGB).

+

What's Next?

+

The MINTFIT test and courses programme will be completed with regard to the content by the end of 2020. From 2021 on, the service is going to be maintained for current and future applications, and tests and courses will be refined and enhanced.

+

References

+

[1] Barbas, H.; Schramm, T.: The Hamburg Online Math Test MINTFIT for prospective Students of STEM Degree Programs. MSOR Connections, S. 43-51, 2018.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2020/OTH/index.html b/CaseStudies/2020/OTH/index.html new file mode 100644 index 00000000..60364bd1 --- /dev/null +++ b/CaseStudies/2020/OTH/index.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + Extra-occupational bridging courses for non-traditional students - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Extra-Occupational Bridging Courses for Non-Traditional Students

+

+

OTH Amberg-Weiden

+

Stephan Bach

+

Abstract

+

The Ostbayerische Technische Hochschule Amberg-Weiden (OTH - Technical University of Applied Sciences) offers extra-occupational mathematical bridging courses for non-traditional students with little prior knowledge. In a blended-learning scenario, the self-study component includes quizzes with STACK questions. These questions were implemented with a specific focus on the needs of non-traditional students, e.g. providing support for dealing with input syntax and using partial crediting. The questions use several of STACK's input types, including multiple-choice questions, which help establish successful mathematical practice. Both lecturers and students emphasize the importance of STACK for the program's success.

+

Introduction

+
+
+ +
Figure: A statue near OTH Amberg-Weiden. +
+
+ +

In Germany, there are various opportunities to enrol at universities to study a vocational qualification instead of a higher education degree.¹ For example, people with certain professional degrees, such as technicians, get a general university entrance qualification. Often these students do not have the mathematical prior knowledge which is expected by universities in STEM and business fields. Furthermore, the widespread bridging courses are usually not enough for this audience, and they require more extensive extra-occupational mathematics courses. At the Ostbayerische Technische Hochschule (OTH) Amberg-Weiden there is a long tradition of preparation courses for students with vocational backgrounds. Over time these courses have been adapted to changes in the legal framework and were further developed between 2016 and 2018 into the program BeVorStudium. The joint project "OTH mind", funded by the German Federal Ministry of Education and Research, developed a blended learning scenario that included STACK quizzes.

+

A majority of participants are in their mid-twenties, have a vocational education in the technical area and aim for studies like mechanical or electrical engineering or computer science. Institutions who are offering preparation courses for this audience face several challenges. One is the high number of topics to be covered in just a few months. Another is the limited number of time slots for in-person courses, with participants typically having a full-time job. This makes the self-study component an important part of the course. STACK is well-suited for the self-study environment, helping students apply new notions to routine problems and get individual feedback.

+

Execution

+

BeVorStudium consists of two mathematics modules (plus one module in physics). Mathematics I contains topics typically included in middle grade syllabi, in particular elementary algebra. Mathematics II deals with important content from senior grades, especially calculus. In-person courses take place every other weekend, combined with an online based self-study component in between. Students are encouraged to complete regular online quizzes with STACK questions, discussed in detail in [2].

+

Each quiz consists of six to ten normally multi-part STACK questions. When designing the quizzes, the following criteria were followed to meet the needs of non-traditional students:

+
    +
  • Input support. Some participants, being out of school for many years, consistently struggle with the input syntax. Therefore quizzes always provide syntax hints, and make use of STACK's tools for syntax validation. For example, answers are not accepted unless they are of the same type (e.g. equation, number, etc.) as the model answer.
  • +
  • +

    Partial credits. Partial credit is used extensively to keep students motivated, and reward correct ideas where possible.

    +
  • +
  • +

    Specific feedback. Questions put an emphasis on "specific feedback" rather than "general feedback". Specific feedback addresses individual mistakes, and provides positive feedback on correct ideas. If a question includes general feedback too, this usually provides an illustration of the correct answer or a hint to the approach but not a model solution. Questions and model solutions can be discussed in class, which, according to the lecturer, usually takes a significant amount of "well invested" time.

    +
  • +
  • +

    Variety of input types. In mathematical practice it is important to have a variety of material, approaches and perspectives [3]. To support this idea, the quizzes use a variety of input types. Besides a majority of questions with algebraic input there are also interactive JSX-Graphs and regular multiple-choice questions (MCQs).

    +
  • +
+
+
+ +
Figure: A question about differentiating. The student is given partial credits for finding a correct numerator and incorrect denominator. +
+
+ +

Multiple-Choice Questions

+

Although there are a number of problems connected to the use of MCQs in the assessment of STEM subjects - for example, when dealing with reversible mathematical processes - there are situations when this question format is more appropriate than others [4, 5]. In the preparation program, BeVorStudium MCQs serve various purposes:

+
    +
  • Avoiding syntax issues. As mentioned previously, some participants struggle with input syntax. MCQs give students the option to just focus on the (new) mathematics first, without worrying about the syntax.
  • +
  • Addressing different learning objectives. While questions with algebraic input often assess mathematical skills, MCQs are suitable for the assessment of conceptual and procedural knowledge as well as conceptual understanding.
  • +
  • Establishing high quality practice. Different input types help establish a variety of perspectives and connections in practice (see above) and meet the needs of different types of learners.
  • +
+
+
+ +
Figure: In this question, students are asked to select all odd functions. The functions can be randomly generated and the feedback is specific to the student's individual selection. +
+
+ +

Since Moodle has built-in support for MCQs, it might seem unnecessary to use STACK for these questions. However, STACK comes with its own set of MCQ input types. Besides having a consistent layout in all questions, STACK's MCQs have several features that improve the didactical quality of the questions:

+
    +
  • +

    Developing interesting question formats. STACK enables authors to implement multiple-choice formats which are recommended for university level assessment [6] like multiple True/False or matching questions.

    +
  • +
  • +

    Using typical STACK features. Many STACK features such as randomization, partial crediting and in particular differentiated feedback can also be used in MCQs. For example, it is possible to give feedback on options of a checkbox question which are not chosen, or to point out contradictions between certain options.

    +
  • +
  • +

    Implementing multi-part questions. There are typical mathematics problems which not only require a numerical or algebraic answer but also some verbal addition ("What is the type of the extremum?", "Is this answer unique?", "What is the monotonic behaviour of the function?" etc.). These questions are implemented well through STACK MCQ.

    +
  • +
  • Efficiency. Using STACK-MCQs can be very efficient, especially when using Maxima plots. An implemented question can be used as a template for similar questions that use another class of functions or another set of propositions.
  • +
+
+
+ +
Figure: A matching question that uses Maxima plots. +
+
+ +

Results

+

The experience at the OTH Amberg-Weiden is that non-traditional students value in-person classes. It is therefore important to maintain a close connection between online quizzes and in-person lectures. By doing so, a majority of students also complete the STACK quizzes. During the trial period of the course in 2018 on average 97.2% (Mathematics I, N=9) and 62.5% (Mathematics II, N=16) of active participants² completed the STACK quizzes. These percentages were similar in subsequent years.

+

The integration of STACK questions led to an increased amount of time used for self-study. In the 2018 evaluation of the module Mathematics II, eight out of ten respondents said they invested more than three hours per week on self-study - in addition to a full-time job and extensive in person lectures. Both students and lecturers acknowledge the importance of STACK as a part of the preparation program. Individual feedback of alumni shows that some participants pass their math exam at the end of the first term with a good or even very good result.

+

What's next?

+

After three years of using STACK within BeVorStudium, questions have been consistently improved. There are however some approaches for further development:

+
    +
  • +

    Extending the specific feedback. The specific feedback still mainly focuses on deficits ("You have done something wrong"), and should be extended to address correct ideas as well.

    +
  • +
  • +

    Making exercises problem oriented. Problem orientation is a principle of successful mathematical practice [3], and means to give exercises a superordinate perspective. This can be achieved by adding reflective MCQs.

    +
  • +
  • +

    Considering different approaches. Currently most of the questions focus on the result rather than the approach. Implementing questions that focus on the approach could help students better understand mathematical methods and identify mistakes. This could be implemented by asking for certain extensions or using the "Equivalence reasoning" input type.

    +
  • +
+

References

+

[1] Kultusministerkonferenz. Hochschulzugang für beruflich qualifizierte Bewerber ohne schulische Hochschulzugangsberechtigung. https://www.kmk.org/fileadmin/veroeffentlichungen_beschluesse/2009/2009_03_06-Hochschulzugang-erful-qualifizierte-Bewerber.pdf, 2009.

+

[2] S. Bach. STACK-Fragen zur Unterstützung der Selbstlernphasen in einem Studien-vorbereitungsangebot für beruflich Qualifizierte. In: Contributions to the 1st International STACK conference 2018, DOI: 10.5281/zenodo.2563803, 2019.

+

[3] H. Winter. Begriff und Bedeutung des Übens im Mathematikunterricht. In: Mathematik lehren, 2, pp. 4-16, 1984.

+

[4] C. J. Sangwin, I. Jones. Asymmetry in student achievement on multiple-choice and constructed-response items in reversible mathematics processes. In: Educational Studies in Mathematics, 94, pp. 205--222, DOI: 10.1007/s10649-016-9725-4, 2016.

+

[5] S. Bach. Using multiple-choice questions in STACK -- reasons and examples. In: Contributions to the 3rd International STACK Conference 2020, DOI: 10.5281/zenodo.3945809, 2020.

+

[6] M. A. Lindner, B. Strobel, O. Köller. multiple-choice Prüfungen an Hochschulen? Ein Literaturüberblick und Plädoyer für mehr praxisorientierte Forschung. In: Zeitschrift für Pädagogische Psychologie, 29 (3-4), pp. 133-149, 2015.

+


+

¹ The legal framework for the current arrangement was given by a decision of the Standing Conference of the Ministers of Education and Cultural Affairs (KMK) in 2009 [1].

+

² Active participants are considered to be those who attended at least half of the lectures.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2021/HELM/index.html b/CaseStudies/2021/HELM/index.html new file mode 100644 index 00000000..f6d98e51 --- /dev/null +++ b/CaseStudies/2021/HELM/index.html @@ -0,0 +1,432 @@ + + + + + + + + + + + + Translating the HELM workbooks to STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Translating the HELM workbooks to STACK

+

University of Edinburgh

+

Konstantina Zerva, Ilyas Nicholson, Adrián Doña Mateo

+

+

Context

+

HELM (Helping Engineers Learn Mathematics) is a collection of 50 workbooks developed by five English universities – Loughborough, Hull, Reading, Sunderland and Manchester – that covers the curriculum of first- and second-year mathematics courses for engineering undergraduates. They were designed as flexible learning resources and have been used by an estimate of 12,000 students in 55 UK higher and further education sites [1].

+

During the ongoing pandemic, as more and more teaching moves to online spaces, the universities of Edinburgh and Loughborough, with the help of several other institutions, have undertaken an effort of translating the HELM materials into Moodle quizzes. This effort was supported with funding from the U21 Global Educational Enhancement Fund [2], which mainly enabled interns (including Ilyas and Adrián) to be employed on the project.

+

The newly-created Moodle quizzes very much follow the spirit of the original workbooks but provide the added value of interactivity through STACK questions. The result will be released as an Open Educational Resource (OER) on the University of Edinburgh website.

+

Execution

+

So far, about half of the workbooks have been made into Moodle quizzes. Most of the quizzes corresponding to workbooks 1–19 and 35–39 were created during the summer of 2020. These include all the exposition and worked examples as description boxes, and STACK versions of most of the tasks and exercises in each workbook. The materials covered by these quizzes include:

+
    +
  • Basic algebra and elementary functions
  • +
  • Linear algebra
  • +
  • Complex numbers
  • +
  • Calculus and differential equations
  • +
  • Probability
  • +
+

Feedback from students and lecturers was gathered and acted upon during an extensive revision of the material during the summer of 2021, prior to their public release. This also ensured consistency of style and resulted in the creation of new quizzes and addition of interactive graphs to some questions using JSXGraph.

+

Currently, there are over 90 quizzes with an average of 6–8 STACK questions each. Most questions have algebraic or numerical inputs, but some are implemented as multiple choice questions, which better suit the nature of the original HELM exercise. Except where it was not possible, question statements were randomised so that students can practice with different versions of the same exercise. Special care was taken to set up relevant tests, to ensure each question is working as expected and to flag issues in future edits.

+

The following screenshots provide some highlights from the HELM quizzes.

+
+
+An interactive plot in a STACK question about Riemann sums. +
+Interactive plot with JSXGraph. Students can change the number of rectangles in the left Riemann sum to help them understand the definition of an integral an answer the question. +
+
+
+ +
+
+An interactive plot in a STACK question about the Newton–Raphson method. +
+Interactive plot with JSXGraph. Students can pan and zoom to explore how the Newton–Raphson method works. +
+
+
+ +
+
+A question that walks the student through the derivation of the vector equation of a plane in 3-dimensional space. +
+HELM task as a STACK question. Part (b) is assessed with the SysEquiv answer test to allow for different equivalent forms of the correct equation. +
+
+
+ +

Putting the quizzes to work

+

The HELM quizzes have been used in the Engineering Mathematics 1A and 1B (360 students) and Mathematics for Natural Sciences 1A and 1B (130 students) courses at the University of Edinburgh during the 2020/21 academic year. The courses also had online lectures and tutorials, and the HELM quizzes were mostly used for self-study. Each week, 3 or 4 quizzes were made available to students, which would serve as an introduction to the topics to be covered. These were intended as formative feedback and thus did not impact the student’s final grade, but they could be used as practice for the assessed quiz due at the beginning of the following week.

+

Student reception

+

The students’ engagement with the HELM materials was encouraging. In the Engineering Mathematics courses, each quiz typically received between 250 and 300 complete attempts on the week it was released. Feedback was overwhelmingly positive – some students found the HELM quizzes to be the most valuable part of the course. They particularly appreciated being able to work at their own pace and how the quizzes assumed little or no previous knowledge, a trait inherited from the original workbooks. Students also pointed to some areas that needed improvement, such as worked solutions, which were addressed during the 2021 summer revision.

+

Conclusion

+

Bringing new life to the HELM workbooks in the form of STACK quizzes has proved to be a very fruitful activity. The upfront effort to develop STACK questions has added great value to the online learning experience, through question randomisation and immediate feedback. The quizzes created so far cover most of the contents of first year engineering mathematics, applicable also to other subjects, and demonstrate how STACK can be used to teach a wide variety of topics.

+

The work is nevertheless far from over. Around half of the HELM workbooks are yet to be translated into Moodle. Several other universities are interested in using the existing materials in their courses, and further progress will be made prioritising the workbooks that would be of most use to course organisers. In addition to this, it would be interesting to explore the use of interactive graphs as question inputs, which would enable certain types of ‘sketch’ questions in the original workbooks to be transferred to STACK.

+

Lastly, the quizzes will soon be released as an OER, which will allow students all over the world to use them for self-study.

+

References

+

[1] https://www.lboro.ac.uk/departments/mlsc/student-resources/helm-workbooks/past-present-future/

+

[2] https://universitas21.com/news-and-events/news/u21s-new-global-education-enhancement-fund-winners-announced

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2021/Images/HELM_1.png b/CaseStudies/2021/Images/HELM_1.png new file mode 100644 index 00000000..a2c22440 Binary files /dev/null and b/CaseStudies/2021/Images/HELM_1.png differ diff --git a/CaseStudies/2021/Images/HELM_2.png b/CaseStudies/2021/Images/HELM_2.png new file mode 100644 index 00000000..7fc7c88d Binary files /dev/null and b/CaseStudies/2021/Images/HELM_2.png differ diff --git a/CaseStudies/2021/Images/HELM_3.png b/CaseStudies/2021/Images/HELM_3.png new file mode 100644 index 00000000..e651ceeb Binary files /dev/null and b/CaseStudies/2021/Images/HELM_3.png differ diff --git a/CaseStudies/2021/Images/HELM_thumbnail.png b/CaseStudies/2021/Images/HELM_thumbnail.png new file mode 100644 index 00000000..e768d68a Binary files /dev/null and b/CaseStudies/2021/Images/HELM_thumbnail.png differ diff --git a/CaseStudies/2021/Images/War-Fig1.png b/CaseStudies/2021/Images/War-Fig1.png new file mode 100644 index 00000000..66e21a6c Binary files /dev/null and b/CaseStudies/2021/Images/War-Fig1.png differ diff --git a/CaseStudies/2021/Images/War-Fig2.png b/CaseStudies/2021/Images/War-Fig2.png new file mode 100644 index 00000000..2f83f3df Binary files /dev/null and b/CaseStudies/2021/Images/War-Fig2.png differ diff --git a/CaseStudies/2021/Images/War-Fig3a.png b/CaseStudies/2021/Images/War-Fig3a.png new file mode 100644 index 00000000..d3472d87 Binary files /dev/null and b/CaseStudies/2021/Images/War-Fig3a.png differ diff --git a/CaseStudies/2021/Images/War-Fig3b.png b/CaseStudies/2021/Images/War-Fig3b.png new file mode 100644 index 00000000..5ba76a31 Binary files /dev/null and b/CaseStudies/2021/Images/War-Fig3b.png differ diff --git a/CaseStudies/2021/Images/Warwick_thumbnail.png b/CaseStudies/2021/Images/Warwick_thumbnail.png new file mode 100644 index 00000000..d3b14a43 Binary files /dev/null and b/CaseStudies/2021/Images/Warwick_thumbnail.png differ diff --git a/CaseStudies/2021/Warwick/index.html b/CaseStudies/2021/Warwick/index.html new file mode 100644 index 00000000..cdf63fe8 --- /dev/null +++ b/CaseStudies/2021/Warwick/index.html @@ -0,0 +1,443 @@ + + + + + + + + + + + + Using STACK in Real Analysis - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Using STACK in Real Analysis

+

University of Warwick

+

Siri Chongchitnan

+

Context

+

The onset of the Covid-19 pandemic in 2020 urgently forced us to rethink how we assess mathematics at university level. In the summer of 2020, we turned to STACK with the goal of creating self-assessed online quizzes in real analysis that would supplement traditional problem sheets. We wanted to see how far STACK could be used in a heavily proof-based pure mathematics undergraduate course.

+

Time line

+
    +
  • Coding phase: June - August 2020
  • +
  • Testing phase: September - December 2020
  • +
  • Launch: January to March 2021
  • +
  • Feedback and data analysis: April 2021
  • +
+

We worked on the module Analysis II - a core first-year module for maths undergraduates at Warwick. The intake was about 400. This is second course in real analysis follows from the foundation in numbers, sequences and series in Analysis I. Teaching materials, including online quizzes, were to be created on the Moodle virtual learning environment. Here is the weekly scope of the course given over 10 weeks.

+
    +
  1. + definition of continuity
  2. +
  3. Sequential definition of continuity
  4. +
  5. Continuity on an interval, Intermediate Value Theorem
  6. +
  7. Limits
  8. +
  9. Inverse Function Theorem
  10. +
  11. Differentiation, Carathéodory’s theorem
  12. +
  13. Mean Value Theorem, L’Hôpital’s Rule
  14. +
  15. Taylor’s Theorem, Lagrange form of the remainder
  16. +
  17. Radius of convergence
  18. +
  19. Differentiation of power series
  20. +
+

Our goal was to create one set of STACK assessment for each week’s material. Each set should take around 30-40 minutes to complete.

+

Execution

+

In the previous year, students had to submit problem sheets weekly, However, Covid-related uncertainties meant that we had to cut this number down to only 4 problem sheets, which counted for 10% of the final grade.

+

To supplement the above, we created 11 sets of STACK quizzes, two of which were not counted (one on syntax training, and one on Analysis I revision). They were practice quizzes, in the sense that students could do them an unlimited number of times before the deadline, each attempt building on the last. Each quiz had a pass mark of around 85% (not uniform across the quizzes). Passing 6 out of 9 quizzes gave the student a flat 5% for the module.

+

We used STACK to create over 40 multi-part questions over 4 weeks. We are grateful for George Kinnear’s talk on JSXGraph at previous STACK conferences, and to Chris Sangwin and Robbie Bickerton, both of whom gave us inspirations to apply their scaffolding and proof-comprehension techniques to Analysis II.

+

We used STACK in conjunction with Moodle-type questions (STACK integrated seamlessly with our Moodle virtual learning environment). We particularly found JSXGraph helpful in creating interactive graphics that visualise and explain tricky analysis concepts better than static media could. Highlights include the questions shown in these figures.

+
+
+ +
+ ε-δ definition of continuity visualised with JSXgraph and slider. +
+
+ +
+
+ +
+ Counterexamples in analysis can be visualised with JSXgraph’s zoom function (e.g. to explore local behaviour of a function). +
+
+ +
+
+ + +
+ A proof of the Chain Rule is implemented using Moodle’s ‘drag and drop’ question type together with STACK-coded scaffolded proof. +
+
+ +

Results

+

We set the pass mark for each assignment quite high (>80%) but most students achieved >90%. On average students submitted between 2 and 3 attempts per quiz, with over 90% of students passing all quizzes. These engagement statistics are all encouraging.

+

Student feedback

+

When asked: “Apart from the lecture notes and videos, what other resources are useful for the understanding of Analysis II?”, we found that almost 90% of respondents rated the quizzes as useful. As many students rated the problem sheets as useful. This is evidence that when implemented properly, the learning gains from STACK quizzes are comparable to those of traditional pen-and-paper assignments.

+

When asked to “Name one thing about the module which has had the most impact on your learning in this course”, a number of students thought the STACK quizzes were the most impactful element of the course. Some comments include:

+

“The quizzes were helpful and the infinite attempts ensured that I did not feel pressured while doing them, allowing me to focus on understanding the content."

+

“The quizzes have been a very useful interactive learning tool."

+

“The alternating assessment format between quizzes and written assignments is nice and helped reduce stress."

+

Summary

+

STACK can be successfully applied to a wide range of mathematics content, including pure mathematics at university level as our work has demonstrated. We have shown that it is possible to turn proofs in existing lecture notes and problem sheets into interactive online quizzes, even in pure proof-heavy courses like ours. The interactivity in the STACK quizzes also meant that students understood the proofs much more clearly than when the proofs were recited during lectures.

+

Although STACK was the primary tool for question creation, we also found it useful to mix STACK with other native Moodle-type questions for a varied diet. Creating questions on STACK is an ideal co-creation project which can be done as a summer internship. There are long-term benefits for everyone involved.

+

All in all, we found STACK to be highly flexible and adaptable to help us achieve our teaching-and-learning goals. At Warwick we are continuing to expand the use of STACK to other maths modules.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2022/HonoursComplexVariables/index.html b/CaseStudies/2022/HonoursComplexVariables/index.html new file mode 100644 index 00000000..af76b117 --- /dev/null +++ b/CaseStudies/2022/HonoursComplexVariables/index.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + Use of STACK in Honours Complex Variables - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Use of STACK in Honours Complex Variables

+

Context

+

Complex analysis is a classical branch of pure mathematics, and one of the high points of human intellectual achievement. The University of Edinburgh complex analysis course, Honours Complex Variables, is typically taken by around 250 students annually, mostly in Year 3 of Mathematics BSc/MMath degrees. The course covers the following topics:

+
    +
  • holomorphic functions, the Cauchy-Riemann equations, and multivalued functions;
  • +
  • conformal maps, the extended complex plane, Riemann sphere, and Möbius transformations;
  • +
  • Cauchy's Integral Theorem, and the (Generalized) Cauchy Integral Theorem;
  • +
  • Liouville's Theorem and the Maximum Modulus Principle;
  • +
  • Taylor and Laurent Series;
  • +
  • zeros, singularities, residues, and the Cauchy Residue Theorem; and
  • +
  • evaluation of real integrals using contour integrals.
  • +
+

The course content is based on an established set of course notes (around 80 pages) written by Dr Richard Gratwick, the current course organiser. The notes contain the background theory, proofs, examples and some exercises for the students to practise. +Students were expected to work on them while they were studying each lecture's content. In addition to the exercises there are also tasks used in face to face workshops.

+

Execution

+

Traditionally, the course would have had three 50-minute whole-class lectures and one 50-minute workshop each week. In the academic year 2021-22, the course was redesigned in response to constraints imposed by pandemic restrictions.
+The course ran with two 50-minute synchronous digital lectures each week, in which the lecturer used a form of flipped classroom with polling in Zoom, and one 50-minute in-person workshop. The notes were converted from a static PDF to a collection of quizzes in the STACK service.
+Each week the students had 3-4 STACK quizzes, and taking into consideration the design of the quizzes, we estimate that the students would need 1-2 hours to work through each of them. So, each week we expect the students to spend 10-12 hours on the course in total (contact hours, quizzes, workshop, assignments). +The STACK quizzes were used for practise and they didn't contribute towards the final mark of the course.

+

This redesign was influenced by the previous work at the University of Edinburgh developing two fully online courses Fundamentals of Algebra and Calculus (FAC) and Introductory Mathematics and its Applications (IMA) [1].
+The resources for Honours Complex Variables were created by Richard Gratwick, Steven O’Hagan, the postgraduate intern Ivona Gjeroska and the undergraduate interns Maddy Baron and Xie Jin Ng, in collaboration with Giampaolo D’Alessandro (University of Southampton). The redesign aimed to be future-proof in the sense that materials created should be suitable for reuse in subsequent years, with iterated improvements, even when a return to fully on-campus teaching is possible.

+

Results

+

A typical pattern of content from the resource is shown in following figure. We see a definition followed a short discussion and video clip of a worked example by the lecturer. Then we have a STACK question inviting the student to check their own understanding of the material. In addition, each unit of work started with a video of the lecturer giving a high-level overview and motivation of the material to come.

+
+
+A screenshot of the content of a typical quiz +
Figure: Example of content of a typical quiz.
+
+ +

Here are some examples of notable questions created for this course.

+
+
+A screenshot of a STACK question with some feedback +
Figure: A question asking to construct the harmonic conjugate of a function. The fully worked solution appears immediately after the students submit their answer.
+
+ +
+
+A screenshot of a STACK question on Taylor series. +
Figure: A Taylor series question.
+
+ +
+
+A screenshot of a STACK question which asks to classify singularities. The classification of each singularity appears as a drop-down list. +
Figure: A question asking to classify singularities.The classification of each singularity appears as a drop-down list.
+
+ +
+
+A screenshot of a multipart STACK question on trigonometric integrals. +
Figure: A multipart STACK question on trigonometric integrals.
+
+ +

In the future, such sessions could easily translate to on-campus activities using peer instruction, which had been an established practice in the School before the pandemic.

+

Students' engagement

+

Student feedback on the course was overwhelmingly positive, with one student responding to the end-of-course survey as follows.

+
+

“Genuinely this course has been the perfect mix of activities for my learning, I’d go as far say to the best organised course I’ve taken in SoM, certainly this year anyway. The notes being delivered in stack are great and much more engaging than a pdf (the supplementary pdf is much more easy to navigate for finding Theorems etc. however), which actually makes me do all the reading before lectures so I gain so much more from them. Stack is good in part because of the instant feedback on most exercises which are immediately relevant to what you’re learning, but also because it breaks the material up well. Stack being the main resource works in perfectly with the 2 lectures delivered a week and the tutorial. SoM should considering delivering all courses in this fashion.”

+
+

The course organiser, Richard Gratwick, said:

+
+

“I believe the redesign of this course has been highly successful, and I like to consider the mode of delivery as a prototype for courses of the future. The motivation was to reflect on the innovations forced upon on us during the pandemic and attempt to implement in a considered way those that proved valuable. Recording short videos of examples and calculations allowed me to present these items “dynamically”, rather than as plain text, but freed up time in synchronous lectures for me to engage with more conceptual high-level discussion of the material. The Stack questions for self-assessment were largely based on exercises included in the previous version of the written notes, but students engaged with them much more regularly when they were presented in the online workbooks – my impression was that in previous years these written exercises were largely ignored.

+
+

Challenges

+

Redesigning a 3rd Year course, so that it contains a substantial amount of online components, was a challenging procedure.

+
    +
  • Authoring questions from scratch: a lot of the STACK questions had to be created completely from scratch because we didn't have any similar questions used in other courses.
  • +
  • Deciding how to deliver each part of the course: it required careful though to decide which of the questions included in the lecture notes to have as exercise for students to solve or as a written example or as a worked example in a video.
  • +
  • Some parts of the course can not be assessed automatically. After some consideration the lecturer decided to move some of the easy workshop questions into STACK and used the workshop time to address more complicated questions.
  • +
+

Conclusions

+

Online assessment it typically used for larger classes in early years of a university mathematics degree, such as calculus or linear algebra. These courses have a strong methods component. As the subject progresses, especially where there is a focus on mathematical proof, it is harder to write online questions which assess the key concepts. As a community we are gaining experience in using quizzes to structure learning materials (rather then traditional lectures), and in supporting more advanced courses. For example the University of Warwick used self-assessed online quizzes in real analysis that would supplement traditional problem sheets. In this course we have demonstrated that STACK can be successfully applied to a higher-level course to promote students' engagement with the content of the course. This is not as straightforward as in calculus and linear algebra, but nevertheless with careful design of materials it is possible to support students online with STACK in advanced courses such as complex analysis.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2022/Images/Classify_singularities.png b/CaseStudies/2022/Images/Classify_singularities.png new file mode 100644 index 00000000..d5a3679c Binary files /dev/null and b/CaseStudies/2022/Images/Classify_singularities.png differ diff --git a/CaseStudies/2022/Images/D3.png b/CaseStudies/2022/Images/D3.png new file mode 100644 index 00000000..3664fc4a Binary files /dev/null and b/CaseStudies/2022/Images/D3.png differ diff --git a/CaseStudies/2022/Images/Ex1_4_15ii.png b/CaseStudies/2022/Images/Ex1_4_15ii.png new file mode 100644 index 00000000..09ec92cd Binary files /dev/null and b/CaseStudies/2022/Images/Ex1_4_15ii.png differ diff --git a/CaseStudies/2022/Images/HCoVsequence.png b/CaseStudies/2022/Images/HCoVsequence.png new file mode 100644 index 00000000..3c090750 Binary files /dev/null and b/CaseStudies/2022/Images/HCoVsequence.png differ diff --git a/CaseStudies/2022/Images/HonoursComplexVariables_thumbnail.png b/CaseStudies/2022/Images/HonoursComplexVariables_thumbnail.png new file mode 100644 index 00000000..c7c10e3b Binary files /dev/null and b/CaseStudies/2022/Images/HonoursComplexVariables_thumbnail.png differ diff --git a/CaseStudies/2022/Images/IntRatFunc.png b/CaseStudies/2022/Images/IntRatFunc.png new file mode 100644 index 00000000..c4ecd3a9 Binary files /dev/null and b/CaseStudies/2022/Images/IntRatFunc.png differ diff --git a/CaseStudies/2022/Images/Maseno1.png b/CaseStudies/2022/Images/Maseno1.png new file mode 100644 index 00000000..31a98324 Binary files /dev/null and b/CaseStudies/2022/Images/Maseno1.png differ diff --git a/CaseStudies/2022/Images/MasenoWorkshop_thumbnail.png b/CaseStudies/2022/Images/MasenoWorkshop_thumbnail.png new file mode 100644 index 00000000..a9cbb3d0 Binary files /dev/null and b/CaseStudies/2022/Images/MasenoWorkshop_thumbnail.png differ diff --git a/CaseStudies/2022/Images/StiftungInnovation.jpg b/CaseStudies/2022/Images/StiftungInnovation.jpg new file mode 100644 index 00000000..51b7b4f6 Binary files /dev/null and b/CaseStudies/2022/Images/StiftungInnovation.jpg differ diff --git a/CaseStudies/2022/Images/StringSimilarity_thumbnail.png b/CaseStudies/2022/Images/StringSimilarity_thumbnail.png new file mode 100644 index 00000000..2b30f77a Binary files /dev/null and b/CaseStudies/2022/Images/StringSimilarity_thumbnail.png differ diff --git a/CaseStudies/2022/Images/Taylor_series_Ws9_3a.png b/CaseStudies/2022/Images/Taylor_series_Ws9_3a.png new file mode 100644 index 00000000..3cd0e843 Binary files /dev/null and b/CaseStudies/2022/Images/Taylor_series_Ws9_3a.png differ diff --git a/CaseStudies/2022/Images/logo_claim_de.neu.svg b/CaseStudies/2022/Images/logo_claim_de.neu.svg new file mode 100644 index 00000000..a2ba3c3c --- /dev/null +++ b/CaseStudies/2022/Images/logo_claim_de.neu.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CaseStudies/2022/Images/string-similarity-examples.ggb b/CaseStudies/2022/Images/string-similarity-examples.ggb new file mode 100644 index 00000000..9ed589bf Binary files /dev/null and b/CaseStudies/2022/Images/string-similarity-examples.ggb differ diff --git a/CaseStudies/2022/Images/string-similarity-examples.svg b/CaseStudies/2022/Images/string-similarity-examples.svg new file mode 100644 index 00000000..f4548445 --- /dev/null +++ b/CaseStudies/2022/Images/string-similarity-examples.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + +Segment f +Segment f: Segment A, B + + + + + + + + + +Segment g +Segment g: Segment B, C + + + + + + + + + +Segment h +Segment h: Segment C, A + + + + + + + + + +Point A +A = (2.5, 3.62) + + + + + + + + + +Point A +A = (2.5, 3.62) + + + + + + + + + +Point B +B = (0.12, -0.1) + + + + + + + + + +Point B +B = (0.12, -0.1) + + + + + + + + + +Point C +C = (5.62, 0.84) + + + + + + + + + +Point C +C = (5.62, 0.84) + + + + + + + + + +Circle +text1 = “Circle” + + + + + + + + + +Triangle +text2 = “Triangle” + + + + + + + + + +Rectangle +text3 = “Rectangle” + + + + + + + + + +7 / 0.22 +text4 = “7 / 0.22” + + + + + + + + + +5 / 0.38 +text5 = “5 / 0.38” + + + + + + + + + +4 / 0.56 +text6 = “4 / 0.56” + + + + + + diff --git a/CaseStudies/2022/Images/string-similarity-input.png b/CaseStudies/2022/Images/string-similarity-input.png new file mode 100644 index 00000000..064d13e2 Binary files /dev/null and b/CaseStudies/2022/Images/string-similarity-input.png differ diff --git a/CaseStudies/2022/Images/string-similarity-results.png b/CaseStudies/2022/Images/string-similarity-results.png new file mode 100644 index 00000000..7a438602 Binary files /dev/null and b/CaseStudies/2022/Images/string-similarity-results.png differ diff --git a/CaseStudies/2022/Images/string-similarity.png b/CaseStudies/2022/Images/string-similarity.png new file mode 100644 index 00000000..0bdf51e0 Binary files /dev/null and b/CaseStudies/2022/Images/string-similarity.png differ diff --git a/CaseStudies/2022/MasenoWorkshop/index.html b/CaseStudies/2022/MasenoWorkshop/index.html new file mode 100644 index 00000000..85aeaec2 --- /dev/null +++ b/CaseStudies/2022/MasenoWorkshop/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + Maseno University Workshop 2022 - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Maseno University Workshop 2022

+

Abstract

+

Maseno University has continually worked with IDEMS International to create online STACK assessment resources for nine courses over the last four years. Lecturers at Maseno, and from other universities within East Africa; Strathmore University, Kenya, University of Dar es Salaam, Tanzania, and Bahir Dar University, Ethiopia, have successfully used STACK in students' assessments as part of formative and summative assessment in the form of CAT contributions in their courses. The School of Mathematics Statistics and Actuarial Science (SMSAS), at Maseno, intends to create STACK quizzes for all of their courses as one of their long-term goals. This is a report on a 5-day STACK workshop held at Maseno in July 2022, from the 4th to the 8th. The goal of the workshop was to share resources developed at Maseno University with learning institutions in East Africa, and establish a community of users who can collaborate on the same to improve mathematics education. The workshop drew a total of 48 participants from various institutions both locally within Kenya and from Tanzania and Ethiopia, and more expressed interest. During the workshop, there was a discussion about an ambitious plan by INNODEMS (IDEMS affiliate) to recruit recent college graduates as interns, and train them in authoring STACK question types so as to help lecturers implement STACK in their courses.

+
+
+Attendees of the Maseno University Workshop 2022 +
Figure: Attendees of the Maseno University Workshop 2022. +
+
+ +

Introduction

+

As reported in a previous Case study report Innovating Education in Maseno, Kenya, Maseno University held a workshop on electronic assessment in mathematics in August 2019, with participants from Kenya, Ethiopia, Rwanda, Tanzania, and Uganda in attendance. The primary goal of that workshop was to train lecturers on how to use STACK in formative and summative assessment of students. Since then, Bahir Dar University (Ethiopia), has used STACK for practice without giving credit to students for engaging with the resources. However, after the 2022 workshop held at Maseno, there have been plans in using STACK at Bahir Dar for formative assessment as from September 2022. Apart from Maseno University, the University of Dar es Salaam (Tanzania), has also successfully used STACK in formative and summative continuous assessment since the 2019 workshop in three of its courses, Numerical Analysis, Calculus of One Variable and Differential Equations for Non-Majors. Some Kenyan universities have been inconsistent with using STACK in assessment, which is what this 2022 workshop hoped to address. In Uganda and Rwanda, there has been no feedback on the use of STACK.

+

STACK resources developed at Maseno were uploaded in the IDEMS server to allow participants in the workshop to access them.

+
    +
  1. Calculus I & Calculus II
  2. +
  3. Descriptive Statistics
  4. +
  5. Basic Mathematics
  6. +
  7. Vector Analysis
  8. +
  9. Complex Analysis 1 & Complex Analysis II
  10. +
  11. Measure Theory
  12. +
  13. Linear Algebra 1
  14. +
+

Resources in these courses are also being reviewed to improve the quality of feedback provided to students for the next semester, which begins in September 2022. Probability Theory and Foundations of Pure Mathematics are two more courses under development.

+

The 5 day workshop attracted participants from the following learning institutions;

+
    +
  1. African Maths Initiative Interns, Kenya - 9
  2. +
  3. INNODEMS, Kenya - 3
  4. +
  5. Alupe University, Kenya- 2
  6. +
  7. Bahir Dar University, Ethiopia - 2
  8. +
  9. Kaimosi Friends University College, Kenya - 4
  10. +
  11. Kisii University, Kenya- 1
  12. +
  13. Maseno University, Kenya - 8
  14. +
  15. Masinde Muliro University of Science and Technology, Kenya- 9
  16. +
  17. Rongo University, Kenya - 1
  18. +
  19. Strathmore University, Kenya- 4
  20. +
  21. Turkana University, Kenya - 2
  22. +
  23. University of Eastern Africa, Baraton, Kenya - 1
  24. +
  25. University of Dar es Salaam, Tanzania - 1
  26. +
  27. Kibabii University, Kenya - 1
  28. +
+

Objectives of the Workshop

+

The main goal of the 5-day workshop was divided into the following objectives;

+
    +
  1. Increase the awareness of STACK through presentations on how to use it, its benefits, and the freely available resources tailored to teaching and assessment of undergraduate mathematics courses. Furthermore, to also inform participants on the possibility of IDEMS, INNODEMS, and AMI assistance, as implementing partners when it comes to supporting the use of STACK and the creation of resources.
  2. +
  3. Give lecturers practical experience with STACK and Moodle course organization through working on a course they intend to teach in the coming academic year, most likely to commence on the September of 2022.
  4. +
  5. Create a community of STACK users in Kenya and East Africa as a whole, who will work together on improving undergraduate mathematics education through open initiatives, creating new materials and sharing the available resources, besides networking.
  6. +
+

Summary of the Workshop Program

+

This section summarizes the daily events that took place as part of the workshop from 4th to 8th July, 2022. On the first day, a presentation on the features of STACK and its usage at Maseno University was done by Dr. Isaac Owino (The Chair of the Math Department). Lecturers in the workshop were then allowed to peruse the available courses created by Maseno and IDEMS international, identify a course they’d be working on to ready it for delivery in their various institutions, and form collaborative groups during the workshop. Copies of the courses were then created and participants enrolled in readiness for the next agenda, customizing the existing content to suit individual needs. Organizing content in the course, structuring resources into logical topics, and creating various types of quizzes for different types of assessments were done in an open working session, during the second day.

+

The better part of day three was spent on hands-on authoring of STACK questions and identifying other textbook questions that can be added to create a bank of questions for various uses. More hands-on activities like exporting questions from other courses followed during the fourth day of the workshop. Idrissa Said, from University of Dar es Salaam, gave a presentation on various step-by-step working questions he has been using to teach mathematics. He offered to provide two of the courses he created, Numerical Analysis, Calculus of One Variable and Differential Equations for Non-Majors, to be added to the pool of courses participants can borrow resources from. Juma, A Master’s student at Maseno who did a study on STACK, also gave a brief presentation on how learners have been engaging with STACK at Maseno, taking a case study of Complex Analysis 1 courses, a third-year course for all mathematics students.

+

The last day of the workshop was mainly an open working session with Q&A from the newly recruited AMI interns, and lecturers who were working on their courses in preparation for delivery.

+

Execution

+

Copies of the courses developed by Maseno University were created in the IDEMS moodle site. Participants were asked to select course(s) that they would like to develop in readiness for teaching in September 2022 or January 2023 semester. The Courses selected by participants were then created under the category of their university on the IDEMS Moodle site. Participants were given managerial rights in their courses with a short training on course management in Moodle, STACK question architecture and importing questions from other courses from the list of courses they were enrolled in (to which we gave read-only access to everyone).

+

Below is a list of courses selected by lecturers from universities that attended the workshop. These courses are what they selected to work on with readily available resources and support when it comes to implementing STACK.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UniversityCourse
Maseno UniversityDescriptive statistics
Masinde Muliro University of Science and Technology (MMUST)Linear Algebra, Calculus 1,Calculus 2, Complex Analysis 1, Complex Analysis 2, Vector Analysis
Strathmore UniversityLinear Algebra, Calculus 1, Calculus 2, Basic Mathematics, Measure Theory
Kaimosi Friends University College (KAFUCO)Linear Algebra, Calculus 1, Calculus 2, Measure Theory
University of KabiangaDescriptive Statistics
Turkana University CollegeBasic Mathematics
Alupe University CollegeVector Analysis, Descriptive Statistics
The University of Dar es Salaam (Tanzania)Linear Algebra, Calculus 1, Calculus 2
Bahir Dar University (Ethiopia)Basic Mathematics
Kisii UniversityCalculus 2
Kibabii UniversityComplex Analysis 1
Rongo UniversityMeasure Theory
+

Feedback from Participants

+

The five-day event was interactive, with participants sharing experiences and reflections on what areas they'd like to spend more time on during the following day. We were able to gather the following feedback from the daily reflections, which helped direct the agenda and objectives of that session based on participant requests.

+
    +
  1. It was clear to all facilitators in the workshop that after the second day, lecturers desired to learn more about authoring STACK questions. This was not the main objective of the workshop during the initial planning, but we had to adjust and give a step-by-step guide on authoring STACK questions on the third day.
  2. +
  3. Authoring STACK questions was well received by participants, who got excited the entire session from conceptualization of textbook questions and taking it to STACK. This session brought together lecturers and interns, the recent graduates who’ll form the task force that will provide technical support to lecturers who’ll be using STACK by creating more STACK resources.
  4. +
  5. At the end of the workshop, lecturers from Rongo, Kiisi, KAFUCO, Kabiang’a, Turkana, Alupe and Kibabii pointed out that that their universities did not have the Moodle online Learner Management System (LMS). IDEMS promised to step in and allow them to run the courses on their servers, the same way it has been supporting University of Dar es Salaam and Maseno when it began using STACK in 2019.
  6. +
  7. Representatives from Masinde Muliro University mentioned that after the last upgrade of their Moodle LMS, the STACK plugin was not configured. They were asked to write to IDEMS for support and in the meantime to also run their courses on the IDEMS servers.
  8. +
  9. Some lecturers identified that authoring STACK questions is time-consuming, requires a little bit of ICT experience and hard work. This sparked a discussion on the various available resources IDEMS and INNODEMS as collaboratively making to assist in ensuring such challenges are taken care of. This was also discussed, although as an inhouse agenda by INNODEMS to recruit recent graduates, who’ll be trained on authoring of STACK question types to provide more man power that can support lecturers using STACK.
  10. +
  11. Idrissa Said, a lecturer from the University of Dar es Salaam shared sample step-by-step randomized STACK question types he is using in teaching mathematics in an engineering course. This sparked positive reviews from participants on the potential of STACK in teaching, learning and assessment of STEM.
  12. +
+

Challenges in the workshop

+

One of the main challenges we had was that courses for the 2022/2023 academic year had not been allocated to lecturers in most universities. Hence lecturers were not certain that they would teach the course they were developing. Lecturers however expressed optimism that either they could persuade their heads of departments to assign them the courses they were creating, or that they could, if given a new course, develop it with the help of IDEMS and INNODEMS in time for the start of classes. Another challenge was that we could not accept all applications (more than 60) due to limited funding and not having enough facilitators to cater for the large group. We however felt that the number we had (49) was optimal for the available funding and manageable for the 8 facilitators in the workshop.

+

Inadequate equipment was also a major challenge. There were some participants who would have liked the workshop to be online. This is because of finances on their part, teaching and departmental duties at their institutions and flexibility offered by online workshops. We however did not have equipment that would have made giving an online workshop possible. Giving an online workshop would have forced us to reformulate our objectives for the workshop because support would be less efficient. We also believed that personal interactions with other participants, facilitators and interns was important in creating a STACK community. This is one challenge we would like to address in the coming years and with adequate funding.

+

Inadequate institutional support remains a challenge at Maseno. Even though the workshop had full blessings and support of the Vice Chancellor, getting lecturers in the School of Mathematics to commit to using STACK for online assessment remains a challenge. It would be more efficient if more lecturers are involved through discussions on what kind of support they need to allow them to integrate online assessment with STACK seamlessly.

+

Enablers

+

One of the main collaborators of the 2022 Maseno STACK workshop was IDEMS International. Apart from providing financial backing, they paid for travel of Georg Osang (one of their employees) to Maseno to help facilitate the workshop as well as train interns on authoring of STACK questions. IDEMS International also provided direct support in the planning and execution of the workshop as well as coordinating travel for international participants.

+

The university of Geneva through a research fund for Danilo Lewanski and his research partners was also a key funder for the workshop. Indeed, we were able to increase participation from an initial estimate of 20 to 50 largely because of the funding from the University of Geneva. +INNODEMS recruited 4 graduate students from Maseno as prospective interns who are currently undergoing training on authoring STACK question types and quality control of the existing materials, with the help of IDEMS International. With the support of the African Maths Initiative, this is done with the aim of providing support to various lecturers to integrate STACK in their courses. Furthermore, INNODEMS was also a key supporter in terms of handling finances, providing logistics and Internet supply for the entire week. Aside from the INNODEMS interns who participated in the workshop, there were other employees who attended the workshop and helped in coordinating events and logistics.

+

Lastly Maseno University was integral in providing support in the even, through the Vice Chancellor Prof. Nyabundi, who personally opened the event on day one and pledged to give full support of any kind to see it a success in future. In his speech, the Vice Chancellor expressed optimism that the myth mathematics is a difficult subject could be demystified through improvements in the teaching and learning. The Vice Chancellor also expressed his desire to see more STACK workshops held at Maseno University.

+

What Next?

+

We have learned some valuable lessons in organizing and giving this workshop. One of the main lessons learned is that planning has to start early in order to attract international participation and facilitation. We missed out on having a number of international facilitators because the planning of the workshop was not concretized early enough. Applications for funding have to be made in a timely manner, and even prior to setting workshop structures in place, there must be clear details on available finances and expected expenditures. This year's workshop was largely successful due to funding from IDEMS and the University of Geneva. Application for the funding was not made in a timely manner which almost derailed the organization of the workshop. Management of funding was another important lesson. We managed to have a workshop with 49 participants from three different countries on a budget of less than 10,000USD. Of the participants, only two paid the application fee of less than 200USD, while most participants paid for their own travel and accommodation.

+

With this hard lesson learned, we have started organizing the 2023 workshops with tentative venues being Masinde Muliro University Kenya, Bahir Dar university Ethiopia and the university of Dar es Salaam in Tanzania. There is even a discussion of having three local and more impactful workshops in the three countries.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2022/StringSimilarity/index.html b/CaseStudies/2022/StringSimilarity/index.html new file mode 100644 index 00000000..a00e6618 --- /dev/null +++ b/CaseStudies/2022/StringSimilarity/index.html @@ -0,0 +1,435 @@ + + + + + + + + + + + + Question Answering in STACK Applying String Similarity - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Question Answering in STACK Applying String Similarity

+

+

Hochschule Esslingen

+

Achim. Eichhorn and Andreas Helfrich-Schkarbanenko

+

Abstract

+

We present a method to evaluate fill-in-the-blank student answers in STACK using a string metric. To increase the quality of the evaluation, we use two lists: allowlist and denylist instead of a single teacher's answer. We also show a STACK question equipped with a string metric, by evaluating its use in mathematics courses.

+

String similarity

+

The fill-in-the-blank questions are important from a didactic point of view. But they can be hardly implemented, since typing and spelling errors, synonyms and geuine alternatives have to be taken into account when evaluating the students' answers.

+

To automatically mark fill-in-the-blank questions we used one of the string metrics for measuring the distance between two strings: the Damerau-Levenshtein distance [1, 2], which plays an important role in natural language processing. Informally, this distance is the minimum number of single-character edits (insertion, deletion, substitution, transition) required to change one string sequence into the other. Note that this distance is a metric in mathematical sense, in particular it satisfies the triangle inequality. This enables a suitable string evaluation.

+

To increase the quality of the assessment, we extended the basic metric function by the adding the components: allowlist and denylist. To have a relative measure of the difference between two strings, we convert the distance to similarity. Applying the similarity on allowlist and denylist we define an acceptance domain for the students' answers. Here we need an empirically determined threshold parameter.

+

Note that the presented method is, strictly speaking, not only based on the strings, but also on semantics, because by introducing the denylist and allowlist respectively, a (trivial) semantic graph consisting of two clusters is set up. For the sake of +simplicity, the evaluation of a student's answer does not take place by means of a semantic distance, but using the string distance to the respective cluster as a whole (single linkage, minimum distance, nearest neighbour, see for example [3]).

+

The Mathematics

+

If the Damerau-Levenshtein distance between strings and is then the similarity is defined as + +Given lists + + +then + +We then have an acceptance domain in which + +for some chosen similarity tollerance .

+

Here are some examples using the strings "Circle", "Triangle" and "Rectangle", together with their Damerau-Levenshtein distance / similarity.

+
+
+ +
Figure: illustrating the Damerau-Levenshtein distance / similarity of example stings. +
+
+ +

Experiments

+

We asked students for a suitable solution method by using a fill-in-the-blank question when given a differential equation, see subtask a). +This task was used in the winter semester 2021/22 as part of a mini-test for the lecture Mathematics 2. It was completed by 53 students and all student answers were scored error-free.

+
+
+An example question with a string input +
Figure: An example question with a string input. +
+
+ +

We implemented a string metric directly in the computer algebra system MAXIMA and placed the corresponding function in the Question Variables field of the STACK question concerned. The corresponding XML file can be downloaded from this link (June 2022).

+

In the bottom figure we see 18 different student answers (in German) which are positioned in a coordinate system according to both similarities and are classified without errors. The radii of the disks represent the number of equal student answers. In total, this task was processed 263 times. The acceptance domain for correct answers is white-marked.

+
+
+ +
Figure: Results of running the sample task. +
+
+ +

Note that for this STACK question and the given allowlist resp. denylist, only the consideration of the allowlist similarity would be sufficient for the evaluation. However, there are situations where the denylist is necessary.

+

The authors would like to thank Stiftung Innovation in der Hochschullehre for supporting the project "Digitalisierung Didaktisch Denken".

+
+
+ +

Implemention notes

+

This feature has been added to STACK 4.0 in 2022 as an answer test.

+

References

+

[1] F. J. Damerau: A technique for computer detection and correction of spelling errors, Communications of the ACM, 7 (3): 171-176 (1964)

+

[2] Vladimir I. Levenshtein: Binary codes capable of correcting deletions, insertions, and reversals, Soviet Physics Doklady, 10 (8): 707-710, (1966)

+

[3] A. Eichhorn, A. Helfrich-Schkarbanenko: Question Answering in STACK Applying String Similarity. Private communication, (2022)

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2023/African_STACK_Conference_2023/index.html b/CaseStudies/2023/African_STACK_Conference_2023/index.html new file mode 100644 index 00000000..25117b00 --- /dev/null +++ b/CaseStudies/2023/African_STACK_Conference_2023/index.html @@ -0,0 +1,540 @@ + + + + + + + + + + + + The First African STACK Conference for Undergraduate Mathematics - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

The first African STACK Conference for Undergraduate Mathematics

+

Authors: Prof George Lawi, Mr Santiago Borio, Dr Michael Obiero Oyengo and Mr Juma Zavick.

+

Abstract

+

The first African STACK Conference for Undergraduate Mathematics took place at Masinde Muliro University of Science and Technology (MMUST), Kenya, from 19 to 23 June 2023. The aim of the conference was to enable African educators to define a roadmap for the transformation of African Undergraduate Mathematics education through STACK. A total of 66 individuals from 16 institutions participated in the conference. The proceedings included five Keynote speeches, 21 presentations, 10 hours of workshop, and a panel discussion with key African stakeholders from various institutions that attended. The conference successfully raised the profile of STACK within MMUST, with the Vice Chancellor openly supporting its institutionalisation in the Mathematics department. Additionally, participants gained awareness and understanding of how STACK is being used and its impact in African and European universities, started designing STACK integration to courses using the IDEMS Open Question Banks, gained insight into potential technical challenges and how to tackle them, and recognised the need for additional support for full curriculum coverage. Finally, initial steps were taken in the creation of an African STACK Community Leadership Team to drive STACK work in the continent and implement the roadmap discussed during the conference.

+
+
+ Conference participants +
Conference Participants
+
+
+ +

Context and Motivation

+

Faced with the ever-increasing challenges such as large class sizes, inadequate teaching personnel, and limited teaching and learning resources, amongst others, African universities have been forced to innovate so as to provide a good education to their students. One such innovation has been incorporating STACK assessments in undergraduate STEM courses since 2019. These STACK assessments have enabled students to be given continuous assessments with immediate formative feedback, which has improved learning and student achievements. IDEMS (Innovations in Development, Education and the Mathematical Sciences) International, a not-for-profit UK-registered community-interest-company has collaborated with a group of African universities to integrate STACK to selected courses and develop a set of open question banks, with the long term objective of achieving full curriculum coverage in undergraduate mathematics.

+

STACK integration started through a partnership between IDEMS and Maseno University in 2019, with IDEMS authoring questions for two courses for the second semester of the 18-19 academic year, and an additional two courses for the first semester of the 19-20 academic year. The benefits of STACK became apparent to address some of the mentioned challenges and Maseno University held the first IDEMS-run African STACK workshop in 2019, which led to STACK integration in BDU, Ethiopia, University of Dar es Salaam, Tanzania, and MMUST, Kenya. IDEMS supported this through further question authoring and hosting of courses for these universities. In 2022 Maseno University hosted a second African STACK workshop and in 2023 BDU hosted the third.

+

In parallel, other African universities integrated STACK to some courses, work that increased in priority due to the need for remote learning during the Covid-19 pandemic. Most notably, The University of Nairobi, Kenya, expanded their STACK integration to include formal assessments and exams in some undergraduate mathematics courses.

+

The natural next step to share experiences and define a collaborative effort for increased STACK integration was the organisation of the first African STACK Conference for Undergraduate Mathematics. This conference served as a platform for educators who have used STACK to share their experiences, methodologies, ideas, and the impact of incorporating STACK into their courses, and those who have not used STACK to learn of its potential in promoting learning and research. It also provided an opportunity for key stakeholders in institutions that do not have STACK to explore ways in which they could get support in integrating STACK at their institutions. Additionally, the final day included a panel discussion involving key stakeholders that formed the basis of the establishment of the African STACK Community Leadership Team to implement the key plans defined during the conference.

+

Conference Proceedings

+

The conference brought together educators, researchers, and other stakeholders to explore the challenges, experiences, and potential of STACK in supporting mathematics undergraduate education. A total of 66 individuals from 16 institutions participated in the conference. This includes three Ethiopians, one Togolese, one Namibian, one Tanzanian, one Italian and three British participants, with the remaining from Kenya.

+

The first four days were split into keynote speeches, followed by discussions, presentations, and ending with afternoon workshops. The final day included a final keynote speech and a panel discussion with key stakeholders. Presentations were categorised into five themes: Motivation, New Avenues, International Views, MMUST Institutionalisation and Paving the Road for STACK integration, and are outlined below.

+

Over ten hours of practical workshops over the first four days gave participants an opportunity to start working or expand their work on STACK integration in their courses. Most workshops were led by Mr Santiago Borio, with support from Mr Juma Zevick, Mr Montognon Wastalas Dogbalou, Ms Celestine Atieno Oliewo and the INNODEMS STACK Intern team. The first workshop focused on exploring the IDEMS Open Question Banks. The second introduced how to use the open questions and how to share resources effectively. The third presented mechanisms to start creating courses for use in the 23-24 academic year. The final workshop was split into two options: basic authoring, led by Prof Chris Sangwin, and finalising course preparation with STACK questions. The overall outcome of the workshop was an insight into authoring and openly available resources, how to access and how to use them.

+

Day 1: Motivation

+

The theme of the first day (June 19th) was Motivation. After the opening ceremony, Dr David Stern delivered a keynote speech discussing the challenges faced by African institutions, the use of STACK as a tool to address these challenges, and the importance of empowering educators through technology. He compared STACK with the printing press in terms of making education more equitable, particularly in challenging contexts.

+

In the presentations, Dr Idrissa Said Amour shared the challenges and opportunities faced in implementing STACK at the University of Dar es Salaam, Tanzania, while Dr Abdu Mohammed Seid discussed a STACK pilot in Bahir Dar University (BDU), Ethiopia, and presented the plan to use STACK as a tool for preparing students for the national exit exam and the remedial programme. Dr Jared Ongaro shared his experience of using STACK at the University of Nairobi, Kenya, emphasising that STACK is not solely focused on testing memorisation, outlining the challenges he had to overcome, and detailing his and his colleagues’ achievements in integrating STACK for formative and summative assessment. Finally, Mr Santiago Borio conducted interviews with current undergraduate students and recent graduates from MMUST and Maseno University, discussing their experiences taking courses with STACK questions, the positive impacts of using STACK, the challenges faced, and overall feedback.

+

Day 2: New Avenues

+

The second day (June 20th) highlighted areas that are being explored for potential STACK integrations, with some examples of exploratory work undertaken. Dr James Kaleli Musyoka, vice chair of the International Association of Statistics Education, discussed the use of STACK to introduce basic statistical concepts and skills. He highlighted the need for data skills in a data-centred world and the role of STACK in transforming statistics education. He identified areas for improvement including: prioritising prerequisites, focusing on understanding rather than formulas, and developing technological skills for data handling. He then led a discussion of new courses and innovations; topics included accuracy for engineers, making question-writing easier, addressing specific needs of different groups, and bridging theoretical teachings with practical applications.

+

The presentations highlighted two key areas where innovative use of STACK could be highly impactful, particularly in the African continent: statistics education and secondary schools. Ms Celestine Atieno Oliewo demonstrated three types of statistics questions she worked on in partnership with IDEMS and Maseno University and outlined their individual value and various formats. Mr Zach Mbasu, director of INNODEMS, Kenya, discussed the potential use of STACK in Kenyan schools to help support high school teachers bridge the gap on inequitable resources between public schools and private schools under the new Competency Based Curriculum, particularly in the early secondary grades where mathematics is taught by non-specialists. Additionally, Ms Christine Laetitia presented a collaboration between IDEMS, SAMI (Supporting African Maths Initiatives), a UK-registered charity, and INNODEMS to create a bridging course for secondary school mathematics used in the UK and mostly developed in Kenya. Dr Idrissa Said Amour showcased the progress made in STACK, focusing on developing high-quality questions and exploring alternative grading methods. Prof Mandirevesa Martin Mugochi outlined the context in Namibian universities and the potential impact of STACK in The University of Namibia. Finally, Mr Montognon Wastalas Dogbalou and Dr Herine Adhiambo Otieno discussed the use of technology in teaching STEM subjects in Africa, emphasising how STACK allows students to interact and engage with the content.

+

Day 3: International Views

+

During the third day (June 21st), international perspectives were the focus. Prof Chris Sangwin, the founder and one of the main developers of STACK, gave the keynote speech, in which he highlighted his motivation for creating STACK and its components. He presented the long-term objectives for STACK, including its application in various subjects. He also outlined a three-stage cycle for successful course development using STACK: testing, consolidating and improvement of questions using data from student responses. Finally he outlined The University of Edinburgh’s pilot of using STACK for a Linear Algebra exam.

+

In the presentations, Mr Juma Zevick outlined an international collaborative study on the impact of feedback provided by STACK in addressing common misconceptions in introductory integral calculus. Secondly, a group of Kenyan interns presented their insights from the INNODEMS STACK Internship programme, supported by IDEMS, and Mr Santiago Borio outlined the programme in detail and presented a potential model of African STACK professionals that organisations and institutions could take for smooth STACK integration, as well as the support that IDEMS could provide. Dr Danilo Lewanski shared the initial steps of STACK integration in The University of Trieste, Italy, outlined the plans for expansion, and shared research opportunities available. Dr Herine Adhiambo Otieno reflected on careful considerations in the implementation, design, and deployment of educational technology in mathematics, particularly focusing on STACK drawing from past research findings and theoretical foundations.

+

Day 4: MMUST Institutionalisation

+

The theme of the fourth day (June 22nd) was the institutionalisation of STACK in the mathematics department at MMUST. In his keynote speech, Prof George Lawi outlined the MMUST experience over the previous two years and the ongoing journey towards full undergraduate curriculum coverage. He recognised the support provided by IDEMS and the INNODEMS STACK interns which facilitated smooth workflow in transitioning continuous assessments from a small number of pen-and-paper assignments to a fully online system in eight courses, increasing considerably the amount of work done by students and the feedback they received.

+

There were five presentations by MMUST lecturers that focused on different aspects of the MMUST STACK experience. Dr Mary Okombo outlined how she used STACK analytics to identify challenging concepts in a course. Dr Fanuel Olege presented student perception of feedback of STACK in general in mathematics courses. Dr Colletta Akinyi analysed the impact of STACK on learner performance in mathematics at MMUST. Dr Duncan Otieno Oganga shared an Analysis of learner engagement with STACK in Analytical Geometry and Advanced Calculus courses. Finally, Dr Annette Okoth discussed the potential of STACK in transforming learner perception in mathematics at low level primary schools in Kenya.

+

Day 5: Paving the Road for STACK integration

+

The format of the final day of the conference (23rd June) was different. Dr Michael Obiero Oyengo opened the day with his keynote speech, in which he drew out the key conclusions of the various presentations, highlighted the challenges he individually faced when returning to Maseno University after completing a doctorate in a top US university and compared them with common challenges faced by African universities in terms of resources and program quality. He also discussed the introduction of STACK at Maseno University and its positive impact on teaching and learning.

+

The last presentation was given by Dr Mary Achieng, who outlined the Strathmore University journey integrating STACK and its preliminary outcomes, as well as highlighting key challenges in creating new content. The closing ceremony took place, in which the Vice Chancellor of MMUST recognised the importance of STACK both for the mathematics department and for STEM-related departments, and highlighted the importance of collaborative innovations, creditting Prof Lawi, the whole mathematics department and the organising committee for the successful conference.

+

The conference culminated with a panel discussion of key African STACK stakeholders: Prof George Lawi, focusing on STACK institutionalisation, Dr Abdu Mohammed Seid, representing Ethiopian universities, Dr Idrissa Said Amour, representing Tanzanian universities, Prof Mandirevesa Martin Mugochi, representing Namibian universities, Dr Herine Adhiambo Otieno, focusing on Ed-Tech research, Dr Annette Okoth, focusing on STACK for statistics and data science education, Dr Beth Kiratu, representing the Kenya Mathematics Society, Dr Mary Ochieng, focusing on the Strathmore International Mathematics Conference and how the African STACK conference could learn from its model, and Dr Michael Obiero Oyengo, a key driver of STACK integration in East Africa. A key conclusion was the need for an African STACK Community Leadership Team to promote and support STACK integration in Africa.

+

Impact and Future Outlook

+

The conference provided a platform for meaningful discussions, knowledge sharing, and collaborations, empowering educators and researchers to explore the role of STACK in transforming mathematics education. Participants in the conference gained valuable insights from presentations, workshops, and discussions, expanding their understanding of STACK and its potential. Organisations involved in the conference, such as IDEMS and the Kenya Mathematics Society, benefited from increased visibility, networking opportunities, and potential collaborations with international partners.

+

To sustain the momentum generated by this conference, future activities have been envisioned. The linkage between the Kenya Mathematical Society (KMS) and the STACK community will create efficiency in driving mathematics education innovation programs within Kenyan local universities. This collaboration will facilitate the integration of cutting-edge technology and pedagogical approaches to enhance teaching and learning experiences. The continued support of IDEMS and INNODEMS will be vital in supporting the adoption of STACK in Kenya and other African countries. The STACK internship program which is led by INNODEMS and supported by IDEMS is playing a crucial role in the development of STACK resources and in the online support for lecturers.

+

Looking ahead, the University of Dar es Salaam and BDU were proposed as the venue for the next workshop and conference respectively. This decision reflects the commitment to inclusivity and the desire to spread the benefits of the conference across different African countries. By rotating the workshop and conference venues, more local educators and researchers from diverse regions will have the opportunity to participate, share their experiences, and contribute to the ongoing integration of STACK in African universities and other educational institutions.

+

The conference set the stage for the future transformation of mathematics education in Africa. Through shared experiences and recommendations, a roadmap to guide the implementation of STACK and improve learning outcomes was adopted. Based on the outcomes and discussions during the conference, the following action points were agreed:

+
    +
  1. +

    African STACK Community Leadership Team (Dr Michael Obiero Oyengo): A proposal was given to establish a team that would play a key role in coordinating STACK activities within Africa, fostering collaborations, and ensuring the effective adoption and utilisation of STACK. This team would serve as a central hub for sharing best practices and knowledge, and coordinating support for African institutions implementing STACK.

    +
  2. +
  3. +

    Suggestions for strengthening collaboration with KMS (Dr Beth Kiratu): The objective to foster a stronger partnership between the Africa STACK community and KMS to accelerate the adoption of maths education innovations in local Kenyan universities and educational institutions was proposed. KMS is committed to take the leadership in organising and coordinating mathematics education activities in Kenya.

    +
  4. +
  5. +

    Continued support for the STACK Internship Programs in Africa (Mr Santiago Borio and Mr Zach Mbasu): IDEMS and INNODEMS agreed to continue supporting the INNODEMS STACK Internship programme. The African STACK Community Leadership team will look for mechanisms to expand this internship model in other contexts and counties.

    +
  6. +
  7. +

    Improvement of existing Question Banks (IDEMS and INNODEMS): All participants agreed to help maintain and improve the IDEMS Open Question Banks. Collaboration will be essential to do so, particularly in question review, requesting new questions, and providing recommendations for improvement of individual questions. Mechanisms to do so were outlined in the conference workshops.

    +
  8. +
  9. +

    Plans for future STACK Conferences in Africa (Dr Michael Obiero Oyengo): There was consensus that there is a need for the African STACK conference to be held yearly. The African STACK Community Leadership Team will take responsibility for deciding host institutions and collaborate with the respective organising committees. The current proposal is for the 2024 conference to be hosted in Ethiopia by BDU and the 2025 conference to be hosted in Tanzania by The University of Dar es Salaam.

    +
  10. +
+

Throughout the conference, several key themes emerged regarding the implementation and adoption of STACK assessments in African institutions. The key points include:

+
    +
  • the need to move away from traditional assessment methods and focus on interactive learning experiences;
  • +
  • challenges and opportunities in implementing STACK, emphasising the importance of empowering educators and promoting a research culture;
  • +
  • discussions and debates around integrating STACK in new courses, bridging theory with practical applications, and equipping educators with the necessary skills to effectively utilise STACK;
  • +
  • need for collaborations, partnerships and research into innovative teaching and assessment methods.
  • +
+

Acknowledgements

+

The conference was made possible by individuals and organisations and deserve clear recognition. First and foremost, the funding organisations: The Swiss National Science Foundation and Université de Genève, The European Mathematical Society, SAMI, IDEMS International and INNODEMS, whose financial support, both direct and indirect, enabled the conference to take place and support a large proportion of the participants who would otherwise not have been able to attend.

+

Secondly, the organising committee members, Prof George Lawi, Mr Santiago Borio, Dr Michael Obiero Oyengo, Ms Christine Laetitia, Mr Juma Zevick, Dr Achiles Nyongesa, Dr Everlyne Odero, Dr Frankline Tireito, Dr David Angwenyi, and Dr Danilo Lewanski. Their dedication, expertise, and tireless work in planning and executing the conference were instrumental in its success.

+

Thirdly, the keynote speakers, Dr David Stern, Dr James Kaleli Musyoka, Prof Chris Sangwin, Prof George Lawi, and Dr Michael Obiero Oyengo, for sharing their insights and expertise on STACK and its impact on mathematics education. Their contributions enriched the conference and provided valuable guidance to the participants.

+

Furthermore, the supporting organisations: MMUST, Maseno University, the Kenya Mathematical Society, IDEMS, INNODEMS, and SAMI, for their collaboration, resources, and commitment to the advancement of mathematics education in Africa.

+

Last but not least, all the participants who attended the conference, and particularly the presenters. Their active engagement, valuable insights, and meaningful contributions made the event a resounding success. Together, the collective efforts and commitment of these individuals and organisations contributed to the groundbreaking success of the Africa STACK conference.

+

Appendix 1: Financial Report

+

This appendix summarises the finances for the first African STACK Conference for Undergraduate Mathematics at Masinde Muliro University for Science and Technology, Kenya, held on 19-23 June 2023. Full financial details can be found here.

+

Funding

+

The conference had four main sources of funding:

+
    +
  • The European Maths Society (EMS) contributed EUR 3,000.00
  • +
  • The University of Geneva contributed USD 4,000.00
  • +
  • SAMI contributed USD 1500 for accommodation of sponsored participants
  • +
  • Conference Fees: most participants received full or partial waivers for the conference fees. In total, the amount received from conference fees was KES 116,489.55 and USD 75.00.
  • +
+

Expenses

+

The total amount spent for the conference was KES 1,349,774.54 (USD 9693.24). This can be classified into the following detailed categories:

+

Flights for supported international participants

+

Nine individuals from non-Kenyan African countries applied for support for flights to participate in the conference. The funding available allowed for five participants to be supported: Abdu Mohammed Seid (Ethiopia), Yassin Tesfaw Abebe (Ethiopia), Mandirevesa Martin Mugochi (Namibia), Idrissa Said Amour (Tanzania), and Aménito Jean Claude Kohoun (Togo). The total spent for this was KES 571,475.79.

+

Accommodation and out of conference meals

+

All sponsored international participants were provided accommodation. Additionally, some local participants and organisers were provided accommodation as it wouldn’t have been possible for them to participate or support the running of the conference otherwise. Accommodation included breakfast and dinner, and additional funds were used for evening tea not included in the accommodation costs and a pre-conference meal on Sunday 18th June. Finally, further accommodation for two sponsored participants and Santiago Borio in Nairobi as part of their return flights was spent. The total spent for this was KES 340,900.00.

+

Conference meals

+

Lunch and morning and afternoon tea were offered by the MMUST catering team for the five conference days. The total amount spent for this category was KES 357,500.00.

+

Local transport

+

Transport costs included transport for sponsored participants from Kisumu airport and back, transport for organisers and supporting team members (e.g. INNODEMS interns, etc), and payment for a MMUST shuttle driver for transport from hotel to venue and back. The total spent for this was KES 28,250.00.

+

Conference preparation

+

The organising and supporting team met daily from Wednesday 14th June to Saturday 17th June and lunch was provided. Accommodation for Santiago Borio for these days was covered. Finally, logistical costs prior to the conference were incurred by Ms Chrisine Laetitia. The total spent in this category was KES 22,014.00.

+

Other Conference expenses

+

Other conference expenses included stationery, welcome packs and certificates, and purchase or miscellaneous items required to run the conference. Additionally, financial costs were covered, which include Mpesa charges and foreign exchange fees. The total spend for this was KES 29,634.75.

+

Surplus

+

There was a surplus of KES 5,597.61 from the conference funds in the INNODEMS account. The remaining KES 1,680.90 should be accounted for from exchange rate fluctuations. The surplus was considered an administrative fee for INNODEMS for managing the accounts.

+

Appendix 2: Participants

+
    +
  • Dr Endalkachew Teshome Ayele, Arbaminch University, Ethiopia
  • +
  • Dr Abdu Mohammed Seid, Bahir Dar University, Ethiopia
  • +
  • Mr Yassin Tesfaw Abebe, Bahir Dar University and Mekdela Amba University, Ethiopia
  • +
  • Dr Danilo Lewanski, University of Trieste and University of Geneva, Italy
  • +
  • Ms Celestine Atieno Oliewo, African Mathematics Initiative, Kenya
  • +
  • Mr Owen Mulinya Kizito, African Mathematics Initiative, Kenya
  • +
  • Mr Dogbalou Motognon Wastalas D., IDEMS International, Kenya
  • +
  • Dr Herine Otieno, IDEMS International, Kenya
  • +
  • Mr Juma Zevick, IDEMS International, Kenya
  • +
  • Ms Adinda Feleria, INNODEMS, Kenya
  • +
  • Ms Emmaculate Atieno Odhiambo, INNODEMS, Kenya
  • +
  • Ms Faith Wambui Mbugua, INNODEMS, Kenya
  • +
  • Mr Godfrey Ouma Wabwire, INNODEMS, Kenya
  • +
  • Ms Jeddidah Ndusya Mbiti, INNODEMS, Kenya
  • +
  • Ms Laetitia Christine, INNODEMS, Kenya
  • +
  • Ms Lucian Talu Mayabi, INNODEMS, Kenya
  • +
  • Ms Mary Sayuni David, INNODEMS, Kenya
  • +
  • Mr Nixson Kiplagat, INNODEMS, Kenya
  • +
  • Mr Samuel Okoth Ogalo, INNODEMS, Kenya
  • +
  • Mr Titus Mburu Kinuthia, INNODEMS, Kenya
  • +
  • Mr Zach Mbasu, INNODEMS, Kenya
  • +
  • Dr Vincent Major Bulinda, Kisii University, Kenya
  • +
  • Dr Stanley Rotich, Machakos University, Kenya
  • +
  • Dr James Kaleli Musyoka, Maseno University, Kenya
  • +
  • Dr Michael Obiero Oyengo, Maseno University, Kenya
  • +
  • Dr Annette Wakaanya Okoth, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Charles Wachira. Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Duncan Otieno Oganga, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Everlyne Akoth Odero, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Frankline kibiwot Tireito, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Prof George O. Lawi, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Joyce Kagendo Nthiiri, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Mary Achungo, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Michael Onyango Ojiema, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Phoebe Auma Amadi, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Sarah Khaindi Wandabwa, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Achiles Nyongesa Simiyu, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Aldrin Wekesa Wanambisi, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Brenda Achieng Onyango, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Colleta Akinyi Okaka, Masinde Muliro University of science and technology, Kenya
  • +
  • Dr David Angwenyi, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Fanuel Olege, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Ms Joy Masika, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Lilian kwamboka Atima, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Ms Mary Immaculate Okombo, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Michael Musyoki, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Mr Noward Obonyo Ali, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Philis Alosa Mukhonyi, Masinde Muliro University of Science and Technology, Kenya
  • +
  • Dr Robert Oryiema, Masinde Muliro University of science and Technology, Kenya
  • +
  • Mr Linus Nyakea Atuya, Ramogi Institute of Advanced Technology, Kenya
  • +
  • Mr James Odongo Ondulo, Ramogi Institute of Advanced Technology, Kenya
  • +
  • Dr Beatrice Adhiambo Obiero, Rongo University, Kenya
  • +
  • Dr Mary Achieng Ochieng, Strathmore University, Kenya
  • +
  • Dr Ben Obiero, Technical University of Kenya, Kenya
  • +
  • Dr Beth Kiratu, Technical University of Kenya, Kenya
  • +
  • Dr Catherine N. Nyaga, Technical University of Kenya, Kenya
  • +
  • Dr Esther Wairimu Njue, Technical University of Kenya, Kenya
  • +
  • Mr Ben Tito Kyalo, University of Nairobi, Kenya
  • +
  • Dr Jared Ongaro, University of Nairobi, Kenya
  • +
  • Dr Wyclife Rao, University of Nairobi, Kenya
  • +
  • Prof Mandirevesa Martin Mugochi, University of Namibia, Namibia
  • +
  • Dr Idrissa Said Amour, University of Dar es Salaam, Tanzania
  • +
  • Mr Aménito Jean Claude Kohoun, HCBIS Lomé, Togo
  • +
  • Dr David Stern, IDEMS International, UK
  • +
  • Mr Santiago Borio, IDEMS International, UK
  • +
  • Prof Chris Sangwin, The University of Edinburgh, UK
  • +
+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2023/Bahir_Dar_University_Workshop/index.html b/CaseStudies/2023/Bahir_Dar_University_Workshop/index.html new file mode 100644 index 00000000..ed83ccd4 --- /dev/null +++ b/CaseStudies/2023/Bahir_Dar_University_Workshop/index.html @@ -0,0 +1,470 @@ + + + + + + + + + + + + Maths in Ethiopian higher education: A moment in time - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Maths in Ethiopian higher education: A moment in time

+

Responding to national educational upheaval with student-centred support for Ethiopia

+

David Stern, Santiago Borio, Georg Osang, David Whittaker, Getachew Mehabie Mulualem, Abdu Mohammed Seid, Mebratu Fenta Wakeni, Michael Obiero

+
+
+ Figure 1: Worshop group photo +
Figure 1: Worshop group photo
+
+
+ +

Challenges and priority actions from the Bahir Dar STACK Workshop 19-23 March 2023

+

Higher education in Ethiopia is currently responding to multiple challenges stemming from national reforms. Bahir Dar University (BDU) is rising to these challenges by seizing the opportunity for change to improve the provision of student centred learning and support for maths and related courses.

+

The BDU Mathematics Department recognises the leadership role it has, specifically as a role model for other Ethiopian Universities. In March 2023 the BDU Mathematics Department brought together 49 people from 12 Ethiopian universities to identify priority challenges and actions as foundations for an ambitious, yet achievable, approach to improved quality, consistency and results in mathematics education at this crucial moment in time. This event was co-facilitated by 3 IDEMS International Staff and a Kenyan Educational Innovator who brought in STACK expertise at BDU’s request as this was an open source tool they had identified which could add value to their teaching and learning.

+

This case-study outlines 3 of 15 reported outcomes of the event, described in detail in a draft report. These three highlighted opportunities stand out because of their urgency with all three needing immediate action. Two of the three correspond to supporting students in preparation for unprecedented exams that will take place within the next 4 months. After August, this moment in time will have passed. Supporting student success at this crucial time has institutional and national ramifications.

+
+
+ Dr David Stern leading a discussion + Workshop participants in practical session +
Figure 2: Discussion and practical workshop sessions
+
+
+ +

1. Remedial learning support by July 2023

+

Challenge

+

In 2023 only 3% of school leavers achieved passing grades, leaving thousands without the university place they applied for. All Ethiopian universities have been mandated by the Ministry of Education to provide remedial courses for prospective students to enable them to start their degrees.

+

Delivery for these courses started in early April and is expected to run for 16 weeks, followed by an exam. There is a huge need and potential to significantly alleviate the expanded staff workload imposed by remedial courses and support student learning through STACK.

+

IDEMS and staff at BDU are co-designing a STACK remedial course in maths, in which any university can enrol their students. The course will cover all topics in the remedial course, and provide formative assessment to allow students to gain from personalised feedback and consolidate mastery through repeated attempts of randomly generated versions of each question.

+

Action: Rapid response teaching and learning support for maths

+

The STACK course is in development and each new topic will be released on a weekly basis. If the full course is implemented, students nationally will gain targeted learning and support for remedial maths, increasing the chance of students securing their place at university as planned.

+

Intended outputs and impacts:

+
    +
  1. A single online course with mastery questions for each topic in the curriculum (13 areas of maths in total).
  2. +
  3. Topics available from April 2023 to BDU (and up to 100,000 students at other universities nationally adopting the system).
  4. +
  5. Remove mathematics as a barrier for remedial student success. The shortfall in new students in 2023 could be minimised, reducing the consequent lack of new future graduates as this year’s crisis works through progression rates.
  6. +
+

2. National Exit Exam support by June 2023

+

Challenge

+

The Ethiopian school exit exam is at the forefront of Ethiopian Universities minds at the moment. An institution's future desirability is will be strongly linked to their current students' performance. In Mathematics such an assessment is almost unprecedented and universities are looking to each other for support to ensure their students are prepared.

+

Action: online preparation for the first exit exams in 2023

+

A majority of the mathematics curricula to be tested in exit exams is already available as digital questions from institutions using STACK in Kenya and Tanzania. Importing these existing questions would populate 50-75% of the exit exam blueprints for maths in Ethiopia, reducing development time and costs, and increasing the readiness of universities for exit exams in June 2023. This would serve all BSc/BEd maths students nationally, plus a greater number of others with a maths component to their degree, e.g. accounting, engineering, statistics, data science.

+

The same system would also enable new material for preparation and revision for the exit exams to be re-used among Ethiopian universities, sharing the development resources required and increasing the speed at which outstanding curriculum gaps could be collectively filled. By continuing to develop exit exam revision content, 100% of the blueprint would be available for online preparation in time for the 2024 round of exams.

+

Intended outputs and impacts:

+
    +
  1. Most of the current exit exam blueprints for maths would be available to support students via STACK in May-June 2023.
  2. +
  3. A set of probable exam style questions for practice tests covering the whole blueprint in May-June 2023.
  4. +
  5. All of the current exit exam blueprints for maths would be available to support students via STACK by June 2024.
  6. +
+

3. Maths for Natural & Social Sciences by September 2023

+

Challenge

+

Maths for Natural/Social Sciences is a core course for all university degree programmes in Ethiopia. Nationally, a significant challenge is for Maths departments to coordinate the teaching and learning of thousands of students, with varying levels of interest and enthusiasm, taking this foundational maths course.

+

Action: Make Maths for Natural/Social Sciences into critical building blocks for engagement and achievement for all first year students across disciplines

+

STACK supports both lecturers and learners simultaneously:

+
    +
  1. By automating regular assessment with automated grading, personalised student feedback and support, lecturers’ role can focus on motivating students and building the relevance of the material to students' respective interests.
  2. +
  3. By giving immediate tailored learning feedback on demand, students gain control over how, when and where they engage in learning. This formative assessment approach has been successful at engaging students in other contexts and could reposition first year courses as an engaging foundation for higher education rather than an unwelcome barrier to it.
  4. +
+

Intended outputs and impacts:

+
    +
  1. STACK pilot at BDU starting in April 2023 with up to 1500 students.
  2. +
  3. STACK system available to all undergraduate students nationwide from September 2023.
  4. +
+

An additional opportunity: Ethiopian textbooks for Secondary School Mathematics

+

During the workshop IDEMS staff had the opportunity to interact with a number of members of the BDU Mathematics department who were commissioned by the Ethiopian Ministry of Education to write textbooks for secondary school mathematics. For various circumstances, the decision was made to share these textbooks in electronic format. As such, the textbook authors who attended the workshop were interested in the idea of making the textbooks interactive by integrating STACK questions. An agreement was reached to build a prototype of an interactive textbook for two topics which would demonstrate how students can practice and get relevant feedback on their attempts at questions. IDEMS are working with one of the textbook authors on creating a prototype for the topics of Equations and Vectors which they intend to present within BDU and potentially to the Ministry as an alternative delivery mechanism.

+

Partners

+

The workshop was organised and hosteds by Bahir Dar University, Ethiopia, led by IDEMS International, UK, and supported by INNODEMS, Kenya, and Maseno University, Kenya. Financial support for the participation of key stakeholders was provided by the University of Geneva and the Swiss National Science Foundation.

+
+
+
+
Masinde Muliro University of Science and Technology
+

Bahir Dar University

+
+
+
Maseno University
+

IDEMS International

+
+
+
Kenya Mathematical Society
+

INNODEMS

+
+
+
+
+
+
IDEMS International
+

Maseno University

+
+
+
IDEMS International
+

Swiss National Science Foundation

+
+
+
INNODEMS
+

Université de Genève

+
+
+
+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2023/Edinburgh_Internship/index.html b/CaseStudies/2023/Edinburgh_Internship/index.html new file mode 100644 index 00000000..02e54c88 --- /dev/null +++ b/CaseStudies/2023/Edinburgh_Internship/index.html @@ -0,0 +1,433 @@ + + + + + + + + + + + + Employ.Ed STACK Internship Programme - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

The Employ.Ed STACK Internship Programme: Impact and Reflections

+

University of Edinburgh

+

Konstantina Zerva, Gavin McWhinnie, Maria Christodoulidou

+

+

Introduction:

+

This case study details the work and insights gained from a STACK-based internship during the summer of 2023 at the University of Edinburgh and reflects upon the unique experience of being a dedicated STACK intern. The internship was facilitated by the Employ.Ed on-campus internship program and ran for 12 weeks from June through August. The main aim of the internship was to contribute to the ongoing work in the School of Mathematics of creating and maintaining STACK materials for various undergraduate courses and to further contribute to the ongoing project of translating the HELM workbooks to STACK.

+

Training

+

At the start of this internship, training began with an introductory presentation by Konstantina Zerva, followed by self-study using the materials available online (namely the Quick Start Guide and the Documentation). After being introduced to STACK, the significant range and depth of features available can mean that the training needed to become a proficient question author can pose quite a challenge. Especially during this 12-week internship, it was important to quickly get a strong grasp of the basics. Training continued through the first week with small introductory tasks, such as reviewing and implementing minor modifications to existing STACK question banks.

+

From our experience, the most effective approach to mastering STACK is learning directly from experienced STACK users themselves. Throughout the course of the internship, we were lucky enough to receive guidance and input from multiple STACK professionals working at the university. As an alternative, however, anyone is welcome to join the STACK community on STACK’s free online chat platform.

+

Work and Impact:

+

Undergraduate Courses:

+

Throughout the internship, close collaboration was established with course organisers to develop and refine STACK-based materials for various undergraduate courses within the School of Mathematics. Quality checks, question tidying up and revisions were carried out on the materials designed for the different courses, including:

+
    +
  • Several Variable Calculus and Differential Equations (MATH08063)
  • +
  • Probability (MATH08066)
  • +
  • Functional Analysis (MATH11135)
  • +
  • Mathematical Biology (MATH10013)
  • +
  • Statistics (Year 2) (MATH08051)
  • +
+

In particular, new material was created for the 2nd year Probability course, with an example question shown below.

+
+
+Figure showing a STACK question on Probability. +
+
Probability STACK Question. Marking is correct for any choice of symbols used for the sample space, \(\Omega\).
+
+
+
+ +

HELM

+

Furthermore, an active contribution was made to the ongoing project of translating the HELM workbooks into STACK format (see this case study). This included the incorporation of interactive randomised STACK questions and the addition of comprehensive worked solutions for practice exercises. HELM workbooks 19, 20, 23 and 25 were converted and are to soon be tested and put into use by first and second year engineering mathematics courses at the university.

+
+
+Figure showing a STACK question based of a HELM workbook. +
+
HELM task as a STACK question. Converted from HELM Workbook 20.1 - Casual Functions.
+
+
+
+ +

Uploading to Moodle and latex conversion

+

For the 4th year course Functional Analysis (MATH11135), there was a need to convert LaTeX course notes to html and then upload this to Moodle so that it could be used in conjugation with STACK to create interactive online notes. (For a previous example of this, see the use of STACK in Honours Complex Variables.) This process lends itself to being fully automated, which can be done with a fairly small Python program. Specific problems (with LaTeX to html conversion using Pandoc) encountered whilst developing this program led to the creation of pandoc-math, a Pandoc filter for converting mathematics course notes to html (GitHub repository). By using this tool, the resulting html can then uploaded to Moodle either manually or via a Python script to parse the html and convert it into Moodle XML.

+

AuthOMath LTTA:

+

One of the highlights of the internship was our participation in a 4-day Erasmus+ Meeting at Johannes Kepler University in Linz, Austria. The meeting had a primary focus on the integration of STACK and GeoGebra, leveraging their combined strengths while also emphasising effective didactics in mathematics education.

+

During the meeting, mathematics and teaching students from various European universities came together to combine their skills and collaborate on the creation of digital tasks. These tasks incorporated interactive STACK questions along with GeoGebra applets, enhancing the learning experience. At the conclusion of the conference, each team had the opportunity to present their collaborative work to professors and project leaders, showcasing their innovative ideas and solutions.

+

A report of the conference is published here.

+

Reflection

+

The role of a dedicated STACK intern is undeniably an interesting and enjoyable experience. It's been fulfilling to belong to a global community of users and developers and a privilege to create new high-quality materials for future mathematics students. This section highlights some of the positives, interesting aspects and difficulties of this experience:

+
    +
  • +

    STACK interns can greatly help in creating online content for undergraduate courses and are certainly a worthwhile investment! Provided with good training, interns can give attention to creating engaging, high-quality, and robust STACK questions, a task that academics and course organisers might not have the time or capacity to undertake. Often STACK interns are students themselves who have first-hand experience as STACK users, meaning they have their own insight into what is useful and what might be less engaging or even potentially frustrating for students.

    +
  • +
  • +

    One of the most noticeable difficulties in writing STACK questions for undergraduate STEM courses as a STACK intern or similar, is that there is difficult balance between having the technical knowledge of what is possible in STACK and the pedagogical knowledge and teaching experience needed to create good questions. Often this means there are two people involved in every STACK question: an academic or teaching staff member who writes questions they believe will be possible to implement in STACK, and a teaching assistant or intern who actually creates the question. This can lead to the STACK author on the technical side receiving an (almost) impossible task or creating questions which are technically correct but are flawed from a teaching standpoint.

    +
  • +
  • +

    STACK question authors tend to have their own approach to writing questions, with their own styles and quirks. This is likely due to the wide range and depth of features STACK has, allowing users to use what features suit them best. However, this can make collaboration difficult and reviewing other author's questions occasionally tricky. A potential solution for this issue is given under authoring collaboratively, on the page describing "authoring workflow" in the documentation.

    +
  • +
+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2023/INNODEMS_Internship/index.html b/CaseStudies/2023/INNODEMS_Internship/index.html new file mode 100644 index 00000000..c44c7db8 --- /dev/null +++ b/CaseStudies/2023/INNODEMS_Internship/index.html @@ -0,0 +1,515 @@ + + + + + + + + + + + + The INNODEMS STACK Internship Programme in Africa - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Transforming Mathematics Education in Africa: The Impact of the INNODEMS STACK Internship Programme

+

Authors: Juma Zevick and Santiago Borio.

+

Abstract

+

The adoption of STACK, an online assessment system for mathematics and other STEM courses in African universities, has been driven by the need for efficient assessment solutions, limited resources, and increasing student enrollment. To support the implementation of STACK and enhance mathematics education in Africa, IDEMS International and its Kenyan counterpart INNODEMS have collaborated to establish the INNODEMS STACK Internship Programme. This programme has trained a local team of interns who have successfully integrated STACK into undergraduate courses in universities across Africa. Through their training in STACK question authoring, technical support, and professional skills development, the intern team has played a vital role in the effective implementation of STACK in African universities. The programme has yielded positive results in Kenya, at Maseno University, Masinde Muliro University of Science and Technology, and Ethiopian universities where it is used in supporting students through a remedial program at Bahir Dar University. Challenges such as technical complexities, limited resources, and cultural contextual factors have been overcome through collaboration, regular training, knowledge sharing, and adaptability. The next steps involve expanding the internship programme, continuous capacity building, fostering collaboration and knowledge sharing, and securing additional funding to further support the implementation of STACK in African universities.

+ +

Context and Motivation

+

STACK has gained significant attention and interest in African universities. This growing interest is primarily driven by the system's unique capability to address challenges associated with limited resources, large class sizes, and the demand for effective assessment solutions that enhance student learning. STACK provides African universities a powerful tool to overcome these challenges and improve the quality of mathematics education across the continent. IDEMS International, a UK-registered not-for-profit community interest company, in collaboration with its Kenyan counterpart INNODEMS, has actively supported African universities in adopting and implementing STACK in undergraduate courses.

+ +

The initial observations made during the first IDEMS-led STACK workshop held in Maseno University, Kenya, in 2019, and subsequent workshops in 2022 at Maseno university and in 2023 in Bahir Dar University, Ethiopia, highlighted a growing interest and enthusiasm for the adoption and use of STACK in African academic institutions. These workshops served as valuable platforms for knowledge sharing, collaboration, and capacity building, fostering a supportive environment for STACK implementation.

+ +

Recognising the potential of STACK to transform mathematics education, IDEMS, in collaboration with Maseno University and Masinde Muliro University for Science and Technology (MMUST) in Kenya, identified priority courses where STACK assessments could replace or complement traditional pen and paper assignments. These assignments were challenging to mark and provide timely feedback for due to the large class sizes, sometimes exceeding 1,000 students, with limited or no additional support.

+ +

Initially, IDEMS directly created the STACK resources for these courses. However, as the demand for STACK adoption grew, the need for a local team of experts became evident. To meet this demand, an internship program was implemented, recruiting four Kenyan recent graduates who had prior experience using STACK during their undergraduate studies. These interns, along with two local contractors from IDEMS, formed a team and received comprehensive training from three experienced members of IDEMS to support the integration of STACK in higher learning institutions.

+ +

The adoption of STACK assessments in African universities has emerged as a response to the pressing challenges faced by these institutions. With limited resources and the need for efficient assessment solutions, the collaboration between IDEMS International, INNODEMS, and African universities aims to enhance mathematics education by harnessing the power of STACK to improve learning outcomes and provide a more inclusive and accessible educational experience for students.

+ +

STACK has gained significant attention and interest in African universities. This growing interest is primarily driven by the system's unique capability to address challenges associated with limited resources, large class sizes, and the demand for effective assessment solutions that enhance student learning. STACK provides African universities with the opportunity to overcome these challenges and improve the quality of mathematics education across the continent. IDEMS International, a UK-registered not-for-profit community interest company, in collaboration with its Kenyan counterpart INNODEMS, has actively supported African universities in adopting and implementing STACK in undergraduate courses.

+ +

The initial observations made during the first IDEMS-led STACK workshop held in Maseno University, Kenya, in 2019, and subsequent workshops in 2022 at Maseno University and in 2023 in Bahir Dar University, Ethiopia, highlighted a growing interest and enthusiasm for the adoption and use of STACK in African academic institutions. These workshops served as valuable platforms for knowledge sharing, collaboration, and capacity building, fostering a supportive environment for STACK implementation.

+ +

Recognising the potential of STACK to transform mathematics education, IDEMS, in collaboration with Maseno University and Masinde Muliro University for Science and Technology (MMUST) in Kenya, identified priority courses where STACK assessments could replace or complement traditional pen and paper assignments. These assignments were challenging to mark and provide timely feedback for due to the large class sizes, sometimes exceeding 1,000 students, with limited or no additional support.

+ +

Initially, IDEMS directly created the STACK resources for these courses. However, as the demand for STACK adoption grew, the need for a local team of experts became evident. To meet this demand, an internship program was initiated, recruiting four Kenyan recent graduates with prior experience using STACK while students during their undergraduate studies. These interns, along with two local contractors from IDEMS, formed a team and received comprehensive training from three experienced members of IDEMS to support the integration of STACK in higher learning institutions. +STACK allows educators to automate assessments with immediate feedback, enabling efficient handling of large class sizes and promoting a more engaging learning experience. The collaboration between IDEMS, INNODEMS, and African universities aims to enhance mathematics education by harnessing the power of STACK to improve learning outcomes and provide a more inclusive and accessible educational experience for students.

+ +

Dynamic Training and Capacity Building

+

The one-year-long internship programme started in July 2022 and was managed by INNODEMS with training provided by IDEMS. To enhance understanding and proficiency in STACK effectively, the team participated in two weekly meetings and practical sessions led remotely by the IDEMS team from the UK and Austria, and two opportunistic week-long in-person sprints. This training provided an opportunity to leverage the collective knowledge and experiences of the team members, enabling them to offer comprehensive support for the implementation of STACK in different learning environments.

+ +
+
+ Training session for the local intern team during a sprint +
Training session for the local intern team during a sprint
+
+
+ +

The training program was intentionally designed to be dynamic, with a focus on creating content for undergraduate mathematics courses that were considered high-priority due to their significant enrolment and unique role in providing foundational knowledge for other subsequent courses that students are likely to take. This content was promptly made available to students at Maseno University and MMUST as soon as it was developed, ensuring a continuous and responsive learning experience for the students using the STACK platform. Carefully planned workflows, peer review of each new question, and a further review stage by more experienced authors facilitated by carefully adapted project management tools meant that three new courses integrated STACK assessments in the first semester of the 22-23 academic year, with a further 5 courses in the second semester. +The training focused on practical learning and capacity building, with three priority areas: STACK authoring, Moodle management, and the development of professional skills. This led to the following outputs by the intern team:

+ +
    +
  1. Authoring and reviewing STACK questions. The team learned how to create, review, and improve questions, ensuring the quality and effectiveness of the assessment materials, and smooth functionality and optimal support for students. The team was trained in developing a repository of questions that can be openly accessed and are being used by various local universities in Africa, with over 20 universities demonstrating interest recently. The repository includes open question banks in six areas of undergraduate mathematics with an average of 150 questions each, expanding the availability of resources for STACK implementation.
  2. + +
  3. Technical support for Kenyan and Ethiopian universities. The team gained expertise in providing technical assistance to universities using STACK. This included tasks such as exporting and uploading STACK questions, managing courses, handling user access and permissions, and facilitating communication within the platform. Notably, Maseno University and MMUST have already benefited from this support and integrated STACK in at least 13 courses with questions from the open question banks, and recently, Ethiopian universities have also sought assistance from the local team for a remedial pre-university course and a foundational mathematics course compulsory to all undergraduate students.
  4. + +
  5. Professional skills. The interns' training encompassed valuable professional skills, complementing their technical knowledge. They honed effective communication, organisational, and transferable skills, such as programming within others. They learned to convey complex concepts clearly, manage tasks efficiently, and collaborate with internal and external stakeholders. They also gained experience in collaborative project management tools.
  6. +
+ +

Success stories

+

The implementation of STACK in African universities, supported by the Internship Programme, has yielded promising results and success stories. These highlight the positive impact of integrating STACK into higher education institutions across Africa. The collaborative efforts between INNODEMS, IDEMS International, and local universities have contributed to the effective implementation and utilisation of STACK, ultimately enhancing the quality of mathematics education and supporting student success.

+ +

Maseno University

+ +

In 2022, Maseno University added four additional undergraduate mathematics courses to its list of seven courses with fully developed online STACK resources developed through the support of the local team: Introduction to Probability and Statistics, Integral Calculus (Calculus II), Linear Algebra II, and Complex Analysis II. These courses have complemented the existing seven courses already developed at Maseno, including Differential Calculus (Calculus I), Descriptive Statistics, Basic Mathematics, Vector Analysis, Complex Analysis I, Measure Theory, and Linear Algebra I. Incorporation of STACK in these courses has enriched the learning experience for students and transformed the way assessment and learning is done at Maseno.

+ +

“In 2018, I returned to Maseno after six years of PhD studies in the USA. One of my new responsibilities was teaching undergraduate maths classes and was immediately overwhelmed by the task. My first class was an introduction to Linear algebra that had 1000 students and I did not have any support in terms of teaching assistants. Clearly, giving homework, marking it, and giving immediate personalised feedback was going to be impossible, unless we innovated. The first time teaching the course, I used the traditional paper-based continuous assessment and I had a challenge marking. The next time I taught the course, I used STACK questions and was able to give weekly homework assignments and my students received immediate feedback which promoted learning on their part. Most students were very happy with the intervention and some expressed their hope of having more courses taught and their formative assessment done using STACK. Some students thought that it was too much work since they were used to only a few questions a semester in the form of continuous assessment. On my part as the course lecturer, I was greatly relieved since I could monitor student progress on a weekly basis and tailor my lectures accordingly. Formative assessment was easier and the exam performance for students that used STACK was much improved. I think it is a great tool that can support the teaching and learning of mathematics, especially in our situations where class sizes are too large and the support for teaching is nonexistent.” (Dr. Michael Oyiengo, Maseno University)

+ +

Masinde Muliro University of Science and Technology (MMUST)

+ +

Similarly, MMUST has successfully integrated STACK into five courses thanks to the efforts of the local team: Analytical Geometry, Advanced Calculus, Linear Algebra II, Complex Analysis II, and Vector Analysis, as well as using others developed for other universities with matching curricula. These courses now leverage the interactive features and personalised assessments provided by STACK, enhancing student engagement and understanding of mathematical concepts.

+ +

“The academic year 2022/23 marked a significant turning point for MMUST in terms of delivery of mathematics courses. The Department of Mathematics was able to integrate STACK in the delivery of 8 courses. The implementation challenges notwithstanding, the support of interns in authoring the questions was incredible. +The presentations by MMUST lecturers at the just-ended first African STACK conference was very revealing in terms of the impact of STACK on the teaching and learning experience. It was evidently clear that the integration of STACK in course delivery is positively correlated with student performance. We can't thank IDEMS enough for the support offered so far. We plan to upscale the integration of STACK in our courses in the coming academic year. In this regard, we are counting on the continued support from the interns.” (Prof. George Lawi, MMUST)

+ +
+
+ Distribution of results before and after STACK integration in Complex Analysis I at MMUST +
Distribution of results before and after STACK integration in Complex Analysis I at MMUST
+
+
+ +


+

Ethiopia

+ +

The Ethiopian Remedial Programme has seen significant progress through the implementation of STACK. The intern team, in collaboration with Bahir Dar University, has played a crucial role in developing STACK resources specifically tailored for the program. These resources have provided remedial students with interactive learning materials, formative assessments, and personalised feedback, enabling them to strengthen their mathematical skills and increase their chances of successfully entering university. Full curriculum coverage was achieved by the team in a 6 weeks period. The focus has now shifted to the Mathematics for Natural Sciences and Mathematics for Social Sciences courses that are compulsory to all undergraduate students irrespective of the subject of their studies and will be made available to all Ethiopian universities.

+ +

"Our journey with STACK began after attending a transformative workshop at Maseno University in 2019. Witnessing our students' remarkable progress using IDEMS-developed assessments for the 'Linear Algebra' course inspired us to embrace STACK in our teaching and assessments. We have since integrated STACK into our education system, offering personalized and immediate feedback, enhancing self-paced learning, and empowering our students to succeed. +Our fruitful collaboration with IDEMS led to the successful implementation of a STACK-based Remedial Program, providing crucial support to a large number of students. As we continue our partnership, we are developing an online Mathematics support course for Natural and Social Sciences. The vast number of first-year students enrolled in this course spread across different campuses, demands innovative solutions, and STACK enables us to deliver timely guidance and support. Looking ahead, we are eager to leverage STACK's potential for the national exit exam, a crucial requirement for our final-year undergraduate students. We aim to provide invaluable preparation tools for this significant exam. Together with IDEMS, we are paving the way for a brighter future in mathematics education at Bahir Dar University." (Mebratu Fenta Wakeni, Bahir Dar University)

+ +

The Intern Team

+
+
+ Godfrey Wabwire, INNODEMS +
Godfrey Wabwire, INNODEMS
+
+
+ +

Godfrey Wabwire is a dedicated INNODEMS Intern who has been actively contributing to the development and implementation of STACK at various African universities. With a specialization in authoring STACK questions and a strong background in Mathematics education, Godfrey plays a crucial role in providing technical support and managing Moodle servers for the integration of STACK. He has served as a course administrator for Linear Algebra at Maseno University. Passionate about the intersection between technology and mathematics education. Godfrey is particularly intrigued by the transformative potential of STACK. Holding a degree in Education with a focus on Mathematics and Business, complemented by expertise in Information Technology, from Maseno University, Godfrey aspires to pursue further studies in Educational Technology.

+ +

“The STACK internship program allowed me to develop my technical skills and expand my knowledge of STEM education, enabling me to create engaging educational content. The program's supportive environment and networking opportunities, along with the mentorship of individuals like Santiago, Georg, Juma, and Wastalas, have paved the way for future collaborations and my pursuit of postgraduate education.” (Godfrey Wabwire, INNODEMS)”

+ +
+
+ Emmaculate Atieno, INNODEMS +
Emmaculate Atieno, INNODEMS
+
+
+ +

Emmaculate is an Intern at INNODEMS as well, and her main focus has been on conceptualisation and authoring of STACK questions, and Moodle management amongst others. She has also been also been at the forefront of supporting MMUST, Kenya, and Bahir Dar University, Ethiopia with STACK integration. Emmaculate is diligent in providing valuable assistance to local lecturers and students whenever they encounter technical issues related to STACK. +Emmaculate holds a Bachelor's degree in Mathematics and Business Studies with a Information Technology from Maseno University. She finds great satisfaction in engaging with mathematical problem-solving and enjoys participating in fun activities related to the subject.

+ +

“Through the internship program, I gained skills in question authoring, technical support, debugging and Moodle management. It helped me gain professional experience, networking opportunities and I was able to understand different cultures in terms of their educational systems.” (Emmaculate Atieno, INNODEMS)

+ +
+
+ Nixson Kiplagat, INNODEMS +
Nixson Kiplagat, INNODEMS
+
+
+ +

Nixson Holds a bachelor's degree in Mathematical Sciences with IT from Maseno University. He is also an Intern at INNODEMS, where he is trained in Basic Moodle Management and STACK authoring. Nixon played a crucial role in supporting MMUST with STACK integration in one of its courses (Advance Calculus) by managing the IDEMS eCampus site for the university and he has continued to provide his expertise towards the STACK project in other African learning institutions. +Nixson is passionate about technology that has a positive impact on society, which is why he is interested in exploring and learning more about the technical part of STACK and Moodle.

+ +

“As an intern dealing with STACK, the program has broadened my perspective on the innovative ways technology can enhance learning outcomes as well as expanding my knowledge on computer-aided assessment for Mathematics.” (Nixon Kiplagat, INNODEMS)

+ +
+
+ Mary Sayuni, INNODEMS +
Mary Sayuni, INNODEMS
+
+
+ +

Mary holds a bachelor's Degree in Education Science (Mathematics and Physics) with IT. Mary also has a certificate in Web development and design from Ricatti Business College. She enjoys getting involved in social impact projects like the African STACK Internship program which focuses on improving mathematics education at the tertiary level through a collaborative initiative. +Mary Sayuni is a trained Moodle and STACK expert. She has been supporting MMUST with STACK integration in Complex Analysis and has continued to provide her expertise in other projects as well.

+ +

“It [the Internship] was a great learning opportunity in regards to the exposure to different IT skills, maths courses, and the great professional networking involved in all the events of the program.” (Mary Sayuni, INNODEMS)

+ +

Challenges

+

The implementation of STACK and the internship programme in African universities presented several challenges for the local team. These challenges can be categorised under the following themes:

+ +

Technical Challenges - the team embraced the opportunity to learn programming languages such as LaTeX, HTML, and JavaScript, all of which were unfamiliar to them in the beginning. Though the learning curve was steep due to limited prior experience with these tools, through dedication and concerted effort, they progressively gained proficiency, allowing them to skillfully develop and implement STACK resources.

+ +

Limited Resources - the interns team faced challenges due to limited resources, such as access to quality hardware and internet connectivity, which affected their speed and efficiency in meeting the growing demand for STACK implementation and support in African universities. To overcome these limitations, the team employed resourceful strategies by leveraging on the existing infrastructure, formed collaborative partnerships, optimised workflows, adapted STACK authoring to the local context, and provided training and capacity building. These approaches allowed them to make the most of available resources, find innovative solutions, and ensure the successful implementation of STACK despite resource constraints.

+ +

Familiarisation - as STACK was a relatively new tool in the African educational context, the team faced the challenge of familiarising themselves with its functionalities, features, and best practices. They had to invest time and effort in understanding how to effectively integrate STACK into existing courses, design assessments, and provide appropriate feedback to students. This process required continuous learning, experimentation, and adaptation to ensure the successful utilisation of STACK. A four-layer review of content created ensured the quality of the content created by the team.

+ +

Cultural and Contextual Factors - the team had to consider the diverse educational backgrounds, teaching methodologies, and student learning styles across different African universities. Adapting STACK to suit these varied contexts and ensuring its alignment with local educational practices and requirements required careful consideration and collaboration with stakeholders. +Additionally, cultural differences between the UK, Austrian and Kenyan team members, coupled with remote training, meant that initially the learning was slow. Once cultural barriers were overcome, the training became more effective and efficient, leading to the successful development of a team of experts.

+ +

Next Steps

+

The interns played a crucial role in the success of the first African STACK Conference for Undergraduate Mathematics, from 19 to 23 June 2023, held at MMUST, Kenya. They actively participated in the conference, presenting their experiences and insights gained from supporting the implementation of STACK in African universities, and played a key role in the facilitation of the workshops.

+ +

During the conference, it became evident that the internship program had immense potential for expansion and replication across Africa. The next steps identified after the conference include expanding the internship program to other African countries, providing continuous capacity building to the current interns to enable them to train and mentor new teams of interns, fostering collaboration among interns, and promoting knowledge sharing within the team. Additionally, there is a need to secure more funding to support the expansion and sustainability of the internship program, to ensure its reach and impact can be extended to more universities across the African continent.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2023/Images/African_Conf_participants.JPG b/CaseStudies/2023/Images/African_Conf_participants.JPG new file mode 100644 index 00000000..823fb9ce Binary files /dev/null and b/CaseStudies/2023/Images/African_Conf_participants.JPG differ diff --git a/CaseStudies/2023/Images/African_Conf_presentation.jpg b/CaseStudies/2023/Images/African_Conf_presentation.jpg new file mode 100644 index 00000000..e77b7304 Binary files /dev/null and b/CaseStudies/2023/Images/African_Conf_presentation.jpg differ diff --git a/CaseStudies/2023/Images/Bahir_Dar_University_Workshop_thumbnail.jpg b/CaseStudies/2023/Images/Bahir_Dar_University_Workshop_thumbnail.jpg new file mode 100644 index 00000000..ab9cfe43 Binary files /dev/null and b/CaseStudies/2023/Images/Bahir_Dar_University_Workshop_thumbnail.jpg differ diff --git a/CaseStudies/2023/Images/ExamQuestion.png b/CaseStudies/2023/Images/ExamQuestion.png new file mode 100644 index 00000000..14bad06c Binary files /dev/null and b/CaseStudies/2023/Images/ExamQuestion.png differ diff --git a/CaseStudies/2023/Images/HELM_Question.png b/CaseStudies/2023/Images/HELM_Question.png new file mode 100644 index 00000000..2458a04f Binary files /dev/null and b/CaseStudies/2023/Images/HELM_Question.png differ diff --git a/CaseStudies/2023/Images/Partial_frac_int_thumbnail.png b/CaseStudies/2023/Images/Partial_frac_int_thumbnail.png new file mode 100644 index 00000000..a08e2ed5 Binary files /dev/null and b/CaseStudies/2023/Images/Partial_frac_int_thumbnail.png differ diff --git a/CaseStudies/2023/Images/Probability_Question.png b/CaseStudies/2023/Images/Probability_Question.png new file mode 100644 index 00000000..56752cf9 Binary files /dev/null and b/CaseStudies/2023/Images/Probability_Question.png differ diff --git a/CaseStudies/2023/Images/Question01.png b/CaseStudies/2023/Images/Question01.png new file mode 100644 index 00000000..81a60170 Binary files /dev/null and b/CaseStudies/2023/Images/Question01.png differ diff --git a/CaseStudies/2023/Images/Question02.png b/CaseStudies/2023/Images/Question02.png new file mode 100644 index 00000000..2f425c78 Binary files /dev/null and b/CaseStudies/2023/Images/Question02.png differ diff --git a/CaseStudies/2023/Images/Question03_05.png b/CaseStudies/2023/Images/Question03_05.png new file mode 100644 index 00000000..ffb7bbdf Binary files /dev/null and b/CaseStudies/2023/Images/Question03_05.png differ diff --git a/CaseStudies/2023/Images/Question14_neg.png b/CaseStudies/2023/Images/Question14_neg.png new file mode 100644 index 00000000..179bc100 Binary files /dev/null and b/CaseStudies/2023/Images/Question14_neg.png differ diff --git a/CaseStudies/2023/Images/Question14_pos.png b/CaseStudies/2023/Images/Question14_pos.png new file mode 100644 index 00000000..4579fd58 Binary files /dev/null and b/CaseStudies/2023/Images/Question14_pos.png differ diff --git a/CaseStudies/2023/Images/Question22.png b/CaseStudies/2023/Images/Question22.png new file mode 100644 index 00000000..0035c74e Binary files /dev/null and b/CaseStudies/2023/Images/Question22.png differ diff --git a/CaseStudies/2023/Images/TestNavigation.png b/CaseStudies/2023/Images/TestNavigation.png new file mode 100644 index 00000000..d7281e86 Binary files /dev/null and b/CaseStudies/2023/Images/TestNavigation.png differ diff --git a/CaseStudies/2023/Images/TestNavigation_short.png b/CaseStudies/2023/Images/TestNavigation_short.png new file mode 100644 index 00000000..077d78df Binary files /dev/null and b/CaseStudies/2023/Images/TestNavigation_short.png differ diff --git a/CaseStudies/2023/Images/bdu_workshop_group.jpg b/CaseStudies/2023/Images/bdu_workshop_group.jpg new file mode 100644 index 00000000..3a3a4f87 Binary files /dev/null and b/CaseStudies/2023/Images/bdu_workshop_group.jpg differ diff --git a/CaseStudies/2023/Images/bdu_workshop_session_1.jpg b/CaseStudies/2023/Images/bdu_workshop_session_1.jpg new file mode 100644 index 00000000..8255c06b Binary files /dev/null and b/CaseStudies/2023/Images/bdu_workshop_session_1.jpg differ diff --git a/CaseStudies/2023/Images/bdu_workshop_session_2.jpg b/CaseStudies/2023/Images/bdu_workshop_session_2.jpg new file mode 100644 index 00000000..9c7cb34b Binary files /dev/null and b/CaseStudies/2023/Images/bdu_workshop_session_2.jpg differ diff --git a/CaseStudies/2023/Images/emma_profile.jpeg b/CaseStudies/2023/Images/emma_profile.jpeg new file mode 100644 index 00000000..b9960e97 Binary files /dev/null and b/CaseStudies/2023/Images/emma_profile.jpeg differ diff --git a/CaseStudies/2023/Images/godfrey_profile.jpeg b/CaseStudies/2023/Images/godfrey_profile.jpeg new file mode 100644 index 00000000..801632de Binary files /dev/null and b/CaseStudies/2023/Images/godfrey_profile.jpeg differ diff --git a/CaseStudies/2023/Images/mary_profile.jpeg b/CaseStudies/2023/Images/mary_profile.jpeg new file mode 100644 index 00000000..b5d2698d Binary files /dev/null and b/CaseStudies/2023/Images/mary_profile.jpeg differ diff --git a/CaseStudies/2023/Images/maseno_sprint_1.jpg b/CaseStudies/2023/Images/maseno_sprint_1.jpg new file mode 100644 index 00000000..a1e461b4 Binary files /dev/null and b/CaseStudies/2023/Images/maseno_sprint_1.jpg differ diff --git a/CaseStudies/2023/Images/mmust_graph.png b/CaseStudies/2023/Images/mmust_graph.png new file mode 100644 index 00000000..9c1b33bf Binary files /dev/null and b/CaseStudies/2023/Images/mmust_graph.png differ diff --git a/CaseStudies/2023/Images/nixon_profile.jpeg b/CaseStudies/2023/Images/nixon_profile.jpeg new file mode 100644 index 00000000..aec42bd4 Binary files /dev/null and b/CaseStudies/2023/Images/nixon_profile.jpeg differ diff --git a/CaseStudies/2023/Partial_frac_int/index.html b/CaseStudies/2023/Partial_frac_int/index.html new file mode 100644 index 00000000..f36e717e --- /dev/null +++ b/CaseStudies/2023/Partial_frac_int/index.html @@ -0,0 +1,453 @@ + + + + + + + + + + + + Integration using partial fractions and STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Integration using partial fractions and STACK

+

Meike Akveld, George Ionita, Andreas Steiger

+

Introduction

+

The question in figure 1 is a typical exam question for a first year analysis course for civil engineers at the ETH Zürich.

+
+
+ Figure 1: Typical exam question (transl: Determine the following integral) +
Figure 1: Typical exam question (transl: Determine the following integral)
+
+
+ +

The method needed to solve this question is integration using partial fractions and used to be taught intensively in high school. In most high schools throughout Switzerland this is no longer the case. Of course one could discuss whether it is still necessary, in view of technology, to teach this method, but we do not want to go into this discussion here. We simply assume for the time being that this is still a skill that we want to test in an exam.

+

In the past we tried two ways of teaching this in a classical lecture. One way was to develop the theory behind it; this was very time consuming and did not really interest most of the students as all they needed in the end was the recipe how to do it. Alternatively we simply gave them the algorithm and did some examples with them in class. This was not satisfying either, as the anti-derivatives that showed up there were not intuitive and maths seemed to have become a tool box (or even black box?) that no one understands, but one just applies, strongly contradicting our beliefs as educators.

+

In this Case Study we will introduce a more satisfying solution for us to teach this topic, both for students and for lecturers, using STACK.

+

A Moodle Quiz

+

We designed a Moodle Quiz which gives a step by step introduction to the method of using partial fractions to integrate rational functions.

+
+
+ Figure 2: Navigation through Moodle quiz +
Figure 2: Navigation through Moodle quiz
+
+
+ +

The quiz assumes very little prior knowledge. Students only need to know the factor and sum rules for integration and the following anti-derivative

+

+

Students who want to discover this method all by themselves can try to do so, but they will need to invest a fair amount of time (or perhaps refresh their high school knowledge). For others we provide extensive hints and solutions.

+

Whatever the students decide to do, they will be guided in a natural way to the more complicated anti-derivatives and thereby develop a deeper understanding of the method and the results.

+

As you can see in figure 2, the quiz is divided into many small sections, each focusing on one step at a time. Figure 3 shows the first section which deals with integrating very simple fractions. All a student needs to know and apply is the basic anti-derivative (1). The question on the left should be straightforward, but for the question on the right a simple substitution is required. If the student does not remember how to do this, the two offered hints should help. We used the setup for hints programmed by Michael Kallweit, see [1]. These hints are not visible upon first opening the question, but can be opened by clicking on a button.

+
+
+ Figure 3: Two easy introductory questions + Figure 3: Two easy introductory questions +
Figure 3: Two easy introductory questions
+
+
+ +

The next series of questions, shown in figure 4, demonstrates the general principle of the quiz. After starting with an easy example the students are led to more general situations. They can always use hints when it is unclear why one question should be seen as a generalisation of a previous one. If the hints do not suffice, the student can also ask for a worked solution and then try the question again. We use gently randomised numbers for new attempts such that some work is required when trying again.

+
+
+ Figure 4: Series of questions +
Figure 4: Series of questions
+
+
+ +

Execution

+

These STACK questions are part of our so-called Integral Trainer (see [2]). This tool is designed for students to practice and improve their integration skills. The project was conceptualised by two experienced maths lecturers and programmed mainly by our STACK developer.

+

The quiz about rational functions consists of 22 questions and covers rational functions with general quadratic denominator or with cubic denominators with real roots, see figure 5.

+
+
+ Figure 5: Final question +
Figure 5: Final question
+
+
+ +

None of the questions use the Int answer test, but rather the AlgEquiv answer test. The main reason for this is the constant of integration. Using the latter test the teacher can decide whether or not to give partial credit if only the constant of integration is missing.

+

Another delicate situation arises when computing integrals of the form + +for which the discriminant of the de-nominator is see figure 6.

+
+
+ Figure 6: Question 14 + Figure 6: Question 14 +
\( \Delta < 0 \)
+
\( \Delta > 0 \)
+
Figure 6: Question 14
+
+
+ +

Is the answer or ? Of course it depends on the discriminant. If , then both answers should be interpreted as correct, but if , then the absolute value is mandatory. Thus we use a certain trick to distinguish between these situations. The idea is to determine a point that indicates whether the absolute value is needed or not. In this case we considered the -coordinate of the vertex of the parabola associated to the student's answer. Then we calculated its logarithm. If this number has imaginary part equal to zero, then the absolute value is not needed, otherwise it is mandatory.

+

Unfortunately, the Int answer test did not completely meet our needs. The example above was one of the questions which ignited a technical discussion with Chris Sangwin about the use and limitations of the Int answer test. We hope that this will lead to improvements and calibrations in its design. For more information on how the Int answer test works, we refer to the STACK documentation [3].

+

Results

+

This quiz was so far used in two ways: One lecturer instructed the students to solve the first part of the quiz before coming to class (as with a Flipped Classroom) and then only showed some harder examples in class. Another lecturer explained the method in a traditional style and used the quiz as extra practice material. Both sets of data have not been evaluated yet, nor the effect of the quiz on the exam.

+

What's next?

+

As a next step we will (certainly) try to evaluate both the data collected in our quiz and the exam results. After we have analysed those, further steps will hopefully become clear.

+

Reference

+

[1] M. Kallweit, Programming hints for stack, 2022, last accessed 3 March 2023. [Online]. Available: https://moodle.ruhr-uni-bochum.de/mod/page/view.php?id=1674600

+

[2] M. Akveld, G. Ionita, and A. Steiger, "Integral trainer," 2022, last accessed 19 April. [Online]. Available: http://www.math.ethz.ch/stack/

+

[3] C. Sangwin et al., “Stack documentation, answer tests,” 2022, last accessed 19 April 2023. [Online]. Available: https://docs.stack-assessment.org/en/ +Authoring/Answer_tests/

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2024/Custom_libraries/index.html b/CaseStudies/2024/Custom_libraries/index.html new file mode 100644 index 00000000..dfc15863 --- /dev/null +++ b/CaseStudies/2024/Custom_libraries/index.html @@ -0,0 +1,518 @@ + + + + + + + + + + + + Building a library of STACK functions for use throughout a linear algebra course - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Building a library of STACK functions for use throughout a linear algebra course

+

Luke Longworth

+

Introduction

+

I have been developing questions and quizzes with STACK for the University of Canterbury, New Zealand, since the end of 2020, and have seen several courses develop original quizzes from scratch in that time. When writing large amounts of questions in a short space of time, especially when multiple people are working on it, I find myself encountering two problems frequently:

+
    +
  1. The way students must input their answers differs from question to question within a course. For example, should a student give a list of values [1,2,3], a tuple (1,2,3), something more complicated like a matrix matrix([1],[2],[3]), or use a matrix input type?
  2. +
  3. I find myself asking myself the question "I know I wrote some code to solve this a few months ago, where did that question go...?" frequently. This problem is twofold: I am needing to copy code between questions (making debugging a nightmare if I find a problem in either place later), and I can't find the working code when I need it!
  4. +
+

These problems cannot be solved easily for existing large question banks, nor do I think that the former is inherently a "problem" anyway (it's more that I would like to have a set of rules/standards to break rather than no rubric at all). However, when constructing new quizzes, we can design with these considerations in mind to create a more internally-consistent product.

+

At the end of 2023, the creation of quizzes for our 200-level engineering linear algebra course was sanctioned. This is a course I had been closely involved with for the past few years, and was the largest advance warning I'd ever received for a course wanting to implement new quizzes. I took this as an opportunity to design quizzes "properly" and have been attempting to avoid the above issues.

+

My solution was to create a new Maxima file, linearalgebra.mac that I could include in my new questions by running stack_include_contrib('linearalgebra.mac'); at the beginning of each question which would contain various helper functions and could be easily updated to service an entire question bank at once.

+

At time of writing (June 2024), this file is now mostly complete and the course question bank is being written. This case study serves to document the process I went through, briefly describe the contents of the file, and to reflect on the successes and failures encountered so far. The intention is to publish the file to STACK at the end of 2024 once it has been used (and thus stress-tested) in a real course, and then any user can use it with stack_include_contrib by including within the CAS-logic.

+

Course Background

+

The engineering linear algebra course, EMTH211, is a second-year compulsory course for our electronic and mechatronic engineering students at University of Canterbury, New Zealand. It has a greater focus on numerical linear algebra than the other 200-level course on offer, MATH203, and has a large Python-coding component in lectures and assessment. Expected prior knowledge includes basic matrix arithmetic, Gaussian elimination, determinants, and eigenproblems.

+

Students enrolled in this course have been using STACK for at least 3 semesters prior and are familiar with the way that we use quizzes and STACK. The course currently focuses on tutorials that encourage hand-working and Python coding, and are marked for engagement rather than correctness. The first major piece of assessment is not returned until week 7, so students who do not self-assess well may not have had any feedback on their ability to correctly solve problems until the course is over halfway through. The hope is that the introduction of regular quizzes will keep students engaged, help them to identify misconceptions, and let them practice basic computations.

+

EMTH211 is a good candidate for this type of project because of its status as a 200-level linear algebra course. There are lots of regularly used routines in linear algebra, so code-sharing is commonplace. The existing linear algebra support in Maxima is mostly concerned with manipulating matrices, with some other packages doing very specific things (such as diag for computing Jordan normal forms, or lapack for running numerical routines). This leaves plenty of room for functions that are widely applicable, simple, and useful. Additionally, these students have experience with STACK and will hopefully be comfortable with things like new input types.

+

What was my writing process?

+

My writing process is not particularly good practice and wouldn't scale well, but it has worked for me and is entirely in-browser. This suits me, as I use a remote desktop connection at work and don't have much control over my own installs and settings.

+

1. Overarching structure

+

I first began by planning the quiz structure on paper. This included logistical questions (when will they be due), content questions (which pieces of the curriculum work well in STACK) and pedagogical questions (how do I want/expect students to engage with these quizzes as learning activities?). I decided that my goal was to write questions that would differentiate themselves from tutorials and assignments (which are more focused on key concepts and coding) by focusing the quiz questions on producing correct numerical results. After settling on fortnightly quizzes of approximately 8 questions per quiz, I identified 4 key computations for each week, leading to approximately 48 individual types of computation (as well as first year revision for early in the semester).

+

Once I knew the types of questions I was writing, I began to write functions that felt like they would be useful when developing one or more of the questions I had planned. Initially I began working in a single STACK question that included all of the functions in one place but this became very clunky when the test cases piled up and slowed down the compilation significantly. Next, I moved my work to GitHub (see below).

+

I wrote some questions as I went, mostly to test out my new vector notation, but most of the questions have not yet been written. I will discuss this more below.

+

2. GitHub

+

If you're new to GitHub (I certainly am) here is a rundown on my process. +- From the STACK home on GitHub click the Fork button to create your own copy of STACK.

+
+
+ Figure 1: Creating a fork +
Figure 1: Creating a fork
+
+
+
    +
  • Go to the fork you've created and create a new branch, either by clicking the "master" dropdown menu and typing your new branch name in, or by clicking on branches and then selecting "New branch". I called mine linear-algebra-beta.
  • +
+
+
+ Figure 2: Creating a branch +
Figure 2: Creating a branch
+
+
+
    +
  • From this branch, navigate to stack/maxima/contrib, and click "Add file". In my case, I simply created a new file called linearalgebra.mac.
  • +
+
+
+ Figure 3: Creating a file +
Figure 3: Creating a file
+
+
+
    +
  • Now, once you've created the file and committed the changes, you can click the "Raw" button when viewing the code, and copy this URL into a STACK question to get access to this code. In my case, I have been using stack_include("https://raw.githubusercontent.com/LukeLongworth/moodle-qtype_stack/linear-algebra-beta/stack/maxima/contrib/linearalgebra.mac"); at the beginning of my questions, and will eventually transition it to stack_include_contrib("linearalgebra.mac") when this file is published to STACK properly.
  • +
+
+
+ Figure 4: Raw code +
Figure 4: Raw code
+
+
+ +

This is where my work was stored, but when writing individual functions it's nicer to get some more immediate responses to check that everything is working properly. Rather than going back to my single STACK question with horrible load times, I used the following workaround:

+

3. Send to CAS

+

This is twisting the intended use case of this function a bit, but it has worked excellently for me. I often use the "Send general feedback to the CAS" link for quick-and-dirty testing in a real STACK environment. You can access this link from the STACK question dashboard (I have an empty question bookmarked for this). You can edit the question variables and general feedback fields of a question temporarily, and even use stack_include.

+

My main workflow was to include this header:

+
simp: false;
+tests: [];
+s_test_case(sa,ta):= tests: append(tests,[[is(sa=ta),sa,ta]])
+
+

followed by either stack_include or simply a copy-paste of the code I'm wanting to check, and then I would put the following into the General Feedback field:

+
[[foreach test="tests"]]
+{@first(test)@}&nbsp;&nbsp;{#second(test)#}&nbsp;&nbsp;{#third(test)#}<br><br>
+[[/foreach]]
+
+

As I added more to the code, I would use s_test_case(sa,ta) with sa being the function application and ta being the expected output. This was a really useful way to build test cases into the development process. The three lines setting simp and dealing with s_test_case shouldn't be included in the final file, these are just for testing.

+

4. Test cases and documentation

+

Test cases are important to ensure that small edits to this open source software don't have unintended effects. These are important for the main codebase of STACK, but in the event that a new version of STACK would break existing questions, users can anticipate this before the upgrade. The stack_include feature copies the source code from the chosen file in the contrib folder and pastes it directly into the question when compiling (usually this means when you click Save). This means that this code is independent of the version of STACK you are running, and changes made to these files can impact other users without them knowing*. Detailed test cases are therefore particularly important here!

+

*Note: Any edits to files like linearalgebra.mac will only affect existing questions when they are compiled (saved), so you won't be immediately breaking existing questions/quizzes by editing these files. Caution should still be taken!

+

At present, test cases are kept separately from the main function. For example, I am currently maintaining both linearalgebra.mac and linearalgebra_test.mac, the latter of which hosts the test cases. The test cases should all be of the form s_test_case(test case, expected output). For example, one of my functions has the following set of test cases:

+
s_test_case(diagmatrix_like([1,1,1],3,3),ident(3));
+s_test_case(diagmatrix_like([1,2,3],3,4),matrix([1,0,0,0],[0,2,0,0],[0,0,3,0]));
+s_test_case(diagmatrix_like([1,2,3],4,3),matrix([1,0,0],[0,2,0],[0,0,3],[0,0,0]));
+s_test_case(diagmatrix_like([1,2,3],4,4),matrix([1,0,0,0],[0,2,0,0],[0,0,3,0],[0,0,0,0]));
+s_test_case(diagmatrix_like([1,2,3],2,3),matrix([1,0,0],[0,2,0]));
+s_test_case(diagmatrix_like([1,2,3],3,2),matrix([1,0],[0,2],[0,0]));
+
+

diagmatrix_like(L,m,n) constructs a mxn matrix with the entries of L on the diagonal. I chose those test cases to cover all of the possible cases I could think of: a square matrix with a full diagonal, tall and squat matrices with full diagonals, a too-short list of given diagonal entries, and over-full lists of diagonal entries with rectangular matrices.

+

Documentation should be in the main file. This is an ongoing project, so the format is not finalised. At present, I have been following the format of

+
/**
+ * Description of function
+ * 
+ * @param[data type] parameter_1_name Description of parameter
+ * @param[data type] parameter_2_name Description of parameter
+ * @return[data type] Description of returned value
+ */
+
+

One specific example is shown below for a function that takes a matrix and vector and returns the general solution:

+
/** 
+ * Solve the matrix equation Ax = b given matrix A and column vector (or list) b.
+ * Optionally will find a least squares solution
+ * Always returns a general solution if one exists, even in the least squares case
+ * If a single solution is required, use pseudoinverse(A) . b instead.
+ * 
+ * @param[matrix] A An mxn matrix
+ * @param[matrix] b A mx1 matrix (or a list with m entries)
+ * @param[boolean] lstsq Optional: if given true then a least squares solution will be obtained. If false or omitted, only exact solutions obtained.
+ * @return[matrix] The general solution to Ax = b. If no solution exists and lstsq is not true, then matrix([]) is returned.
+ */
+mat_solve(A,b,[lstsq]):= block([m,n,vars,eqns,sol],
+    ... function here ...
+);
+
+

What does this file contain?

+

1. Functions about form

+

The first thing that appears is the c and r functions. These are inert functions that students and teachers can use to represent column and row vectors respectively, and the validation box will correctly display them. This allows students to write expressions containing vectors without needing to use Maxima's matrix notation.

+

The LaTeX formatting is done using texput to extract the arguments, format them individually using tex1, and then put them all together within appropriate LaTeX matrix wrapping. The two functions are also declared nonscalar, so that expressions like c(1,2) + matrix([3],[4]) will simplify to matrix([4],[6]) rather than matrix([3 + c(1,2)],[4 + c(1,2)]).

+
+
+ Figure 5: Vector notation +
Figure 5: Vector notation
+
+
+ +

As of STACK v4.6.0, only direct texput commands in the Question Variables are picked up by the validation to change the LaTeX display. This means that you cannot put the texput inside a larger block of code (notably, including if statements) or refer to other existing variables, functions or flags within the texput code itself. Ideally, teachers would be able to choose whether to include this part of the file with a flag variable (in case they are wanting to use the variable c for a constant of integration, or r to refer to the vector [x,y,z] etc.), but this is not possible. Even nicer would be the ability to choose what type of matrix bracket is used (questions that ask for lists of vectors are a bit confusing to read at present), or to match the question-wide matrix bracket choice. Perhaps future versions will give more control over texput and validation, but for now these suffice.

+

There are also a number of functions that convert statements between various "standard forms". It is much easier to write this library of routines knowing that everything is either a list of lists or a matrix. Convenience functions are provided that will convert groups (i.e. lists, sets, ntuples, spans, and others) of vectors (matrices, c, r, lists, ntuples) into a list of lists, and then to convert a list of lists into a matrix.

+

2. Predicates

+

Predicates are exceptionally useful little tools to use in PRTs or inside larger routines to avoid unwanted error messages. There are not many Maxima-native predicates to do with linear algebra outside of matrixp, zeromatrixp and blockmatrixp, and there are many properties of matrices we may want to check. There are many predicates here that teachers can use to quickly check properties of student answers, or that they can use to filter out answers of unexpected form.

+

There are also a handful of comparison functions that test some sort of equivalence between a teacher's answer and a student's answer. These are mostly to do with equivalence of subspaces and linear independence, as algebraic equivalence is too restrictive to test these properties.

+

3. Useful functions for manipulating matrices, collections of vectors, or algebraic expressions containing vectors.

+

This is too varied to explain in detail here. Interested parties should look at the file itself to see what sort of capabilities it has. In future I hope to write a detailed set of documentation including examples of use.

+

4. Matrix Factorisations

+

This one is a little self-indulgent, as it usually makes little sense to find exact representations of a matrix QR factorisation, SVD, or diagonalisation unless the matrix has been set up explicitly to produce nice answers in this case. In EMTH211, we use Python to find solutions to these generic cases. I can't think of any cases where these functions are likely to be that useful, but it felt wrong to write a linear algebra package and not include these common factorisations.

+

Some surprises and pitfalls

+

The inclusion should work for simp:false and simp:true and return appropriate results in either case. This caused me a few headaches, as I forgot to work with simp:false for a large chunk of the original writing process. I only noticed when I went back through to add test cases the first time and realised that everything broke. Some things to watch out for:

+
    +
  • makelist doesn't work in expected ways with simp:false. Rather than expr: makelist(func(i),i,1,n) you might prefer expr: map(lambda([ex], func(ex)), ev(makelist(i,i,1,n),simp))
  • +
  • For loops don't automatically evaluate the indexing variable, so you might encounter errors when, for example, i = i+1 instead of the expected i = 2. To avoid this, you can simply include i: ev(i, simp) at the beginning of the loop.
  • +
  • Some functions, particularly predicate functions, require their inputs to be simplified before they work. For example, I found that zeromatrixp(apply(matrix,[[0,0,0]])) was returning false even though apply(matrix,[[0,0,0]]) will correctly return a matrix of zeros. I fixed this with zeromatrixp(ev(apply(matrix,[[0,0,0]]),simp)).
  • +
  • My version of s_test_case didn't quite work as intended in all instances. I don't want things to be forcibly simplified before comparing, and this led to what I suspect is a similar issue to the above problem, where sa and ta would print identically, but is(sa=ta) would return false. This typically happened when comparing lists or matrices, or when variables like %r1 or %r2 were generated in an answer. In these instances, I ignored the false flag if sa and ta seemed the same.
  • +
+

There were also design consequences I didn't initially expect. For example, as mentioned above, there are many matrix factorisations included in the file simply for completeness' sake, but I don't think they are very useful for designing STACK questions. A good question that concerns itself with matrix factorisations would begin by generating the factors and multiplying them out to get the desired matrix. This ensures that the matrix has the properties you expect, and that students can easily compute and type in their answer without needing to deal with an absurd amount of simplification. If you are getting students to practice finding a SVD for any given randomly generated matrix, then I personally don't believe you should be using STACK (try CodeRunner!).

+

A related problem appears when trying to make functions that are too all-encompassing. For example, I originally wanted to make a function that would check whether two given vector parametric equations were equivalent to one another. For example, is c(1,2) + t*(3,4) equivalent to c(-2,-2) + t*(-6,-8)? I was halfway through writing the function when I realised that in a real question I would rather individually check all of the components; has the student given me an answer in a sensible form, is the student's direction vector pointing in the right direction, and is their fixed point actually on the line? Then I can give targeted feedback to the student such as "your line is parallel to the correct answer". Therefore, I simply provided a function to extract each of these components and will leave the teacher to mark them appropriately.

+

I initially wanted to include some randomisation functions such as rand_orth to generate a random orthogonal matrix, or rand_integer_invertible to generate a random integer matrix whose inverse is also populated by only integers, both of which would be very useful to me. However, it became very clear very quickly that I want much finer control than what a general function like this could produce. For example, I tried writing a question that asks students to find all eigenvalues and eigenvectors of a 3 by 3 matrix from scratch. This is quite a lot of work, especially when we don't include factorising a cubic as a learning objective in our course, so my list of desired properties for the matrix became: An integer matrix with small integer eigenvalues, simple eigenvectors, and two off-diagonal zeros in the same row or column. Another example was writing a factorisation question; it is not enough to generate a random orthogonal matrix, optionally remove some columns, and multiply it by a random upper triangular matrix. The resulting product will have horrible entries and be unusuable in most cases. Ultimately I concluded that this was a futile** task outside the scope of this project, but I may revisit it in the future.

+

**Note: I have since worked on this a bit more and decided that there are sensible ways to do this when assuming that teachers will correctly use deployed variants, and am considering publishing rand_matrix.mac as a separate file.

+

Final reflections and conclusions

+

If I were to begin this project again, I think I would start with writing the quizzes. That way, my motivation to add something to linearalgebra.mac would be noticing myself doing something that felt both annoying to code and broadly applicable. It would mean that I would inevitably need to do a second pass over the question bank at the end, but I think it would keep the project more focused. Feature creep was a big issue for me to deal with, and I'm not convinced that everything I wrote will turn out to be useful. Perhaps I should split this into multiple smaller files, but there is so much inter-dependency that only a few functions could reasonably be extracted without flow-on consequences.

+

In fact, it has become increasingly clear that what I have done with linearalgebra.mac is somewhat outside the intended scope of of stack_include_contrib. This function simply pastes the included code into the question variables as if the user typed them in. Users cannot pick and choose which features they want, and contributions cannot use banned functions like error.

+

I think that stack_include_contrib is working as intended here and doesn't need large-scale changes. In fact, the knowledge that anyone who uses this file in the future will be going out of their way to include it gave me some comfort: the intended users are already comfortable using STACK. It gave me freedom to just make something that works and then tidy it up later. Furthermore, this process of (1) identifying a limitation, (2) writing some code that fixes the problem, (3) generalising the code for wider use, and (4) adding it to the contrib folder leads very naturally to a step (5): pick out key features that are particularly broadly applicable and work with the lead developers to add them to core STACK. I hope that in future some of these features, particularly the vector input, augmented matrix, and predicate functions could be modified and added to the basic STACK install for long-term support. I would recommend this process to anyone who has some experience working with Maxima code but is not confident working directly on an open-source project like this.

+ + + +
+
+ + + + + + + + + + + diff --git a/CaseStudies/2024/Images/add_file.PNG b/CaseStudies/2024/Images/add_file.PNG new file mode 100644 index 00000000..149ea8ad Binary files /dev/null and b/CaseStudies/2024/Images/add_file.PNG differ diff --git a/CaseStudies/2024/Images/create_branch.PNG b/CaseStudies/2024/Images/create_branch.PNG new file mode 100644 index 00000000..359116cd Binary files /dev/null and b/CaseStudies/2024/Images/create_branch.PNG differ diff --git a/CaseStudies/2024/Images/create_fork.PNG b/CaseStudies/2024/Images/create_fork.PNG new file mode 100644 index 00000000..da9c3b1c Binary files /dev/null and b/CaseStudies/2024/Images/create_fork.PNG differ diff --git a/CaseStudies/2024/Images/raw_code.PNG b/CaseStudies/2024/Images/raw_code.PNG new file mode 100644 index 00000000..de836d82 Binary files /dev/null and b/CaseStudies/2024/Images/raw_code.PNG differ diff --git a/CaseStudies/2024/Images/vector_example.PNG b/CaseStudies/2024/Images/vector_example.PNG new file mode 100644 index 00000000..df1c1b55 Binary files /dev/null and b/CaseStudies/2024/Images/vector_example.PNG differ diff --git a/CaseStudies/2024/Images/vector_notation.PNG b/CaseStudies/2024/Images/vector_notation.PNG new file mode 100644 index 00000000..b29de863 Binary files /dev/null and b/CaseStudies/2024/Images/vector_notation.PNG differ diff --git a/CaseStudies/index.html b/CaseStudies/index.html new file mode 100644 index 00000000..fe1571f8 --- /dev/null +++ b/CaseStudies/index.html @@ -0,0 +1,696 @@ + + + + + + + + + + + + Overview - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Who uses STACK?

+

STACK has users all over the world. To highlight some of the ways STACK is used and developed around the world, we have written a number of case studies. Explore the map, or see the full list of case studies below.

+
+
stars  Case studies
+
place Other key users
+
+ + +


+ + + + + + + + + + + + + + + + + + + +

2024

+ + +
+ +
+ vector_notation.PNG +
+
Building a library of STACK functions for use throughout a linear algebra course
+

Considerations when writing a collection of quiz questions in a specialised topic, and using stack_include to achieve this.

+
+
+ + +
+
+ +
+
+ +
+ + + + +

2023

+ + +
+ +
+ African_Conf_presentation.jpg +
+
The First African STACK Conference for Undergraduate Mathematics
+

The first African STACK Conference for Undergraduate Mathematics took place at MMUST, Kenya, from 19 to 23 June 2023. This case study includes details and conclusions arising at the conference.

+
+
+ +
+ A practical workshop session. +
+
Maths in Ethiopian higher education: A moment in time
+

Responding to national educational upheaval with student-centred support for Ethiopia.

+
+
+ +
+ Figure showing a STACK question on Probability. +
+
Employ.Ed STACK Internship Programme
+

This case study details the work and insights gained from a STACK-based internship during the summer of 2023 at the University of Edinburgh.

+
+
+ + +
+ +
+ +
+ maseno_sprint_1.jpg +
+
The INNODEMS STACK Internship Programme in Africa
+

The INNODEMS STACK Internship Programme empowers African universities to revolutionize math education through efficient assessment solutions and comprehensive support. Join us in transforming learning outcomes and shaping a brighter future for students across the continent.

+
+
+ +
+ A STACK question on integration by partial fractions. +
+
Integration using partial fractions and STACK
+

A STACK question on integration by partial fractions.

+
+
+ + +
+
+ +
+ + + + +

2022

+ + +
+ +
+ A STACK question on finding Taylor series. +
+
Use of STACK in Honours Complex Variables
+

This case study describes using STACK at The University of Edinburgh in, Honours Complex Variables, a Year 3 pure mathematics module.

+
+
+ +
+ Attendees of the Maseno University Workshop. +
+
Maseno University Workshop 2022
+

This is a report on a 5-day STACK workshop held at Maseno in July 2022.

+
+
+ +
+ A STACK question using string input. +
+
Question Answering in STACK Applying String Similarity
+

Using the Damerau-Levenshtein distance between strings to develop assessment of short free-text answers.

+
+
+ + +
+ + + + +

2021

+ + +
+ +
+ The HELM logo. +
+
Translating the HELM workbooks to STACK
+

Converting the "Helping Engineers Learn Mathematics" workbooks into STACK quizzes for self-study.

+
+
+ +
+ The landing page for using STACK in Real Analysis. +
+
Using STACK in Real Analysis
+

Using STACK in Real Analysis at the University of Warwick.

+
+
+ + +
+
+ +
+ + + + +

2020

+ + +
+ +
+ The landing page for MINTFIT. +
+
Diagnostics Testing With STACK
+

The MINTFIT Math Test is an online diagnostics test that uses STACK.

+
+
+ +
+ A multiple choice question in STACK. +
+
Extra-occupational bridging courses for non-traditional students
+

OTH Amberg-Weiden uses STACK in extra-occupational maths bridging courses for non-traditional students.

+
+
+ + +
+
+ +
+ + + + +

2019

+ + In 2019, a project was carried out to write an initial collection of STACK case studies. The case studies were edited by Malthe Sporring and Chris Sangwin, and funded by CATE. + + + + +
+ +
+ The Abacus logo. +
+
STACK for Engineering Mathematics and the Abacus Material Bank
+

Aalto University uses STACK for their Engineering Mathematics courses, and they have also developed the material bank Abacus.

+
+
+ +
+ An adaptive STACK question. +
+
Adaptive Self-learning Exercises
+

The Ruhr-Universität Bochum uses STACK in online courses designed for self-study. Some questions are adaptive, and guide students through complex tasks.

+
+
+ +
+ A STACK question on linear algebra. +
+
Institutional Support for STACK in Edinburgh
+

The University of Edinburgh has in-house support for online assessment, mostly with STACK, for most year one and two mathematics modules, and many more.

+
+
+ + +
+ +
+ +
+ A typical STACK question in FAC. +
+
Developing a Fully Online Course
+

"Fundamentals of Algebra and Calculus" is a fully online course that uses STACK.

+
+
+ +
+ A flick interface for STACK. +
+
A Flick Interface for Maths Input
+

Developers at Nagoya University are building a "flick interface" for STACK, similar to the popular Japanese keyboard mode.

+
+
+ +
+ A typical STACK question in ILIAS. +
+
Technical Integration of STACK Into ILIAS
+

STACK was integrated into the ILIAS learning management system to support projects for learning content.

+
+
+ + +
+ +
+ +
+ Panels of resources related to writing STACK questions. +
+
Promoting STACK Across Disciplines at Loughborough University
+

At Loughborough University, STACK has been implemented across many disciplines.

+
+
+ +
+ Maseno University. +
+
Innovating Education in Maseno, Kenya
+

IDEMS international is working with Maseno University to implement online assessment for their mathematics courses.

+
+
+ +
+ Physics Curriculum. +
+
STACK for a Physics Textbook
+

Physics Curriculum & Instruction have developed STACK questions to accompany a Physics textbook.

+
+
+ + +
+ +
+ +
+ A STACK question on finding the magnitude of friction force on a box resting on an incline. +
+
STACK at Scale: The Open University
+

The Open University uses STACK for large-scale online courses.

+
+
+ +
+ Part of the course design of the optes project. +
+
optes: Optimising Self-study With STACK
+

The optes project uses STACK in their pre-course, designed to help students improve their self-studying skills.

+
+
+ + +
+
+ +
+ + + + + + + + + + + +
+
+ + + + + + + + + + + diff --git a/Communities/African_leadership/index.html b/Communities/African_leadership/index.html new file mode 100644 index 00000000..611b69fc --- /dev/null +++ b/Communities/African_leadership/index.html @@ -0,0 +1,475 @@ + + + + + + + + + + + + African STACK Community Leadership Team - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

The African STACK Community Leadership Team

+

The African STACK Community Leadership Team was created in response to the need for a concerted effort to drive STACK integration in African institution forwards during The First African STACK Conference for Undergraduate Mathematics.

+ +
+
+
+ Dr Michael Obiero Oyengo
+

Dr Michael Obiero Oyengo

+

+ Maseno University, Kenya
+ obiero@maseno.ac.ke
+ Team Leader +

+
+
+
+
+ Dr Beth Kiratu
+

Dr Beth Kiratu

+

+ Technical University of Kenya and Kenya Mathematics Society, Kenya
+ beth.kiratu@tukenya.ac.ke
+ Kenya Mathematics Society Representative +

+
+
+ Dr Mary Achieng
+

Dr Mary Achieng

+

+ Strathmore University, Kenya
+ machieng@strathmore.edu
+ African STACK Conferences Lead +

+
+
+ Prof Martin Mugochi
+

Prof Martin Mugochi

+

+ University of Namibia, Namibia
+ martinmugochi@gmail.com
+ Namibia STACK Representative +

+
+
+
+
+ Dr Idrissa Said Amour
+

Dr Idrissa Said Amour

+

+ University of Dar es Salaam, Tanzania
+ idrissaamour@gmail.com
+ Tanzania STACK Representative +

+
+
+ Dr Abdu Mohammed Seid
+

Dr Abdu Mohammed Seid

+

+ Bahir Dar University, Ethiopia
+ abdum442@yahoo.com
+ Ethiopia STACK Representative +

+
+
+ Prof George Lawi
+

Prof George Lawi

+

+ Masinde Muliro University of Science and Technology, Kenya
+ glawi@mmust.ac.ke
+ Institutionalization of STACK at African Universities +

+
+
+
+
+ Dr Herine Otieno
+

Dr Herine Otieno

+

+ IDEMS International, Rwanda
+ herine.otieno@idems.international
+ STACK Research agenda in African Institutions +

+
+
+ Dr James Kaleli Musyoka
+

Dr James Kaleli Musyoka

+

+ Maseno University, Kenya
+ jkmusyoka@maseno.ac.ke
+ STACK for Statistics and Data Science +

+
+
+ Dr Annette Wakaanya Okoth
+

Dr Annette Wakaanya Okoth

+

+ Masinde Muliro University of Science and Technology, Kenya
+ aokoth@mmust.ac.ke
+ STACK for Statistics Integration +

+
+
+
+
+ Dr Jared Ongaro
+

Dr Jared Ongaro

+

+ University of Nairobi, Kenya
+ ongaro@uonbi.ac.ke
+ Policy and Implementation Agenda +

+
+
+
+ +
+
+ + + + + + + + + + + diff --git a/Communities/Professional_network/index.html b/Communities/Professional_network/index.html new file mode 100644 index 00000000..fc959dfc --- /dev/null +++ b/Communities/Professional_network/index.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + STACK Professionals Network - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

STACK Professionals Network

+

The STACK Professionals Network was established during the summer of 2022 to bring together early career professionals (not necessarily academics), across various institutions, who spend a significant amount of their time authoring STACK questions. Authoring STACK questions requires specialist skills, and the people who do this job somtimes work in relative isolation in their institutions. They may not have much help regarding various issues that they encounter authoring questions. The Network will help the STACK professionals to solve various authoring difficulties and also make it easier to share existing questions/quizzes. Furthermore, the Network can provide training to colleagues who are new into STACK and define the pedagogy around creating STACK questions.

+ +

To join the Network come in contact with Chris Sangwin: c.j.sangwin@ed.ac.uk or Konstantina Zerva: k.zerva@ed.ac.uk.

+ +

To contact the Network: network_stack_prof@mlist.is.ed.ac.uk.

+ +
+
+
+
Konstantina Zerva

+

Konstantina Zerva

+

The University of Edinburgh, UK
k.zerva@ed.ac.uk

+
+
+
George Ionita

+

George-Ionut Ionita

+

ETH Zürich
georgeionut.ionita@math.ethz.ch

+
+
+
Andreas Steiger

+

Andreas Steiger

+

ETH Zürich
andreas.steiger@math.ethz.ch

+
+
+
+
+
Maciej Matuszewski

+

Maciej Matuszewski

+

Durham University, UK
m.t.matuszewski@durham.ac.uk

+
+
+
Sam Fearn

+

Sam Fearn

+

Durham University, UK
s.m.fearn@durham.ac.uk

+
+
+
Santiago Borio

+

Santiago Borio

+

IDEMS International, UK
smborio@idems.international

+
+
+
+
+
Georg Osang

+

Georg Osang

+

IDEMS International, UK
gosang@idems.international

+
+
+
Kinga Sipos

+

Kinga Sipos

+

Bern University, Switzerland
kinga.sipos@unibe.ch

+
+
+
Luke Longworth

+

Luke Longworth

+

University of Canterbury, New Zealand
luke.longworth@canterbury.ac.nz

+
+
+
+
+
Speedy Jiang

+

Speedy Jiang

+

University of Canterbury, New Zealand
speedy.jiang@canterbury.ac.nz

+
+
+
Ruth Reynolds

+

Ruth Reynolds

+

University College London, UK
ruth.reynolds@ucl.ac.uk

+
+
+
Stephen Nulty

+

Stephen Nulty

+

National University of Ireland Maynooth, Ireland
Stephen.Nulty@mu.ie

+
+
+
+
+
Markus Orthaber

+

Markus Orthaber

+

Montanuniversität Leoben, Austria
markus.orthaber@unileoben.ac.at

+
+
+
Stefanie Zegowit

+

Stefanie Zegowitz

+

TU Clausthal, Germany
zegowitz@rz.tu-clausthal.de

+
+
+
Chris Nelson

+

Chris Nelson

+

The Open University, UK
chris.nelson@open.ac.uk

+
+
+
+
+
Juma Zevick

+

Juma Zevick

+

University of Trieste, Italy
zevickotieno.juma@phd.units.it

+
+
+
Alex Fowler

+

Alex Fowler

+

The University of Otago, New Zealand
alex.fowler@otago.ac.nz

+
+
+
Jonas Lache

+

Jonas Lache

+

Hochschule Ruhr West and Ruhr-Universität Bochum, Germany
jonas.lache@hs-ruhrwest.de

+
+
+
+
+
Wigand Rathmann

+

Wigand Rathmann

+

Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU), Germany
wigand.rathmann@fau.de

+
+
+
Heidrikje Schmidtpott

+

Hendrikje Schmidtpott

+

Universität Kassel, Departement of Mathematics, Diskrete Mathematics and Algebra, Germany
hendrikje.schmidtpott@mathematik.uni-kassel.de

+
+
+
Motognon Wastalas Dogbalou

+

Motognon Wastalas Dogbalou

+

University of Trieste, Italy
motognonwastalasd'assise.dogbalou@phd.units.it

+
+
+
+
+
Oleg Boruch Ioffe

+

Oleg Boruch Ioffe

+

h² - Hochschule Magdeburg-Stendal, Fachbereich Wasser, Umwelt, Bau und Sicherheit, Germany
oleg-boruch.ioffe@h2.de

+
+
+ +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + diff --git a/Community/index.html b/Community/index.html new file mode 100644 index 00000000..83dab6f0 --- /dev/null +++ b/Community/index.html @@ -0,0 +1,510 @@ + + + + + + + + + + + + Development team and Advisory Board - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Community

+

STACK has a very active user base, with a wide variety of colleagues in different roles. Four particular groups are

+
    +
  1. The STACK Software Development Team;
  2. +
  3. The STACK International Advisory Board;
  4. +
  5. The African STACK Community Leadership Team;
  6. +
  7. The STACK Professionals Network.
  8. +
+

The easiest way to engage with the community is through our free online chat platform. All kinds of questions, suggestions and comments are welcome there.

+

STACK Software Development Team

+

Continuously developed and used since 2004.

+
+
+
+ Chris Sangwin
+

Chris Sangwin

+

+ The University of Edinburgh, UK
+ C.J.Sangwin@ed.ac.uk
+ Chairperson of the International Advisory Board +

+
+
+
+
+ Tim Hunt
+

Tim Hunt

+

The Open University, UK

+
+
+ Matti Harjula
+

Matti Harjula

+

Aalto, Finland

+
+
+ Jesús Copado
+

Jesús Copado

+

+ SURLABS
+ jcopado@surlabs.es
+ STACK for ILIAS developer and Service Provider +

+
+
+
+
+ Anupama Sarjoshi
+

Anupama Sarjoshi

+

The Open University, UK

+
+
+ Edmund Farrow
+

Edmund Farrow

+

The University of Edinburgh, UK

+
+
+ Sal Mercuri
+

Sal Mercuri

+

The University of Edinburgh, UK
+ IDEMS International, UK

+
+
+
+ +

STACK International Advisory Board

+

The International Advisory Board encourages engagement from the community of users of the STACK +online assessment system and helps to oversee strategic developments of +the system. The Advisory Board promotes the long-term stainability of the software and invites +contributions from diverse stakeholders.

+ +
+
+
+
Meike Akveld

+

Meike Akveld

+

ETH Zürich
akveld@math.ethz.ch

+
+
+
Ian Jones

+

Ian Jones

+

Department of Mathematics Education, Loughborough University
I.Jones@lboro.ac.uk

+
+
+
David Stern

+

David Stern

+

IDEMS International
d.a.stern@idems.international

+
+
+
+
+
Michael Obiero

+

Michael Obiero Oyengo

+

Masseno University, Kenya
obiero@maseno.ac.ke

+
+
+
Antti Rasila

+

Antti Rasila

+

Guangdong Technion-Israel Institute of Technology
antti.rasila@gtiit.edu.cn
Founder of the Abacus Consortium

+
+
+
Morten Brekke

+

Morten Brekke

+

University of Agder
morten.brekke@uia.no

+
+
+
+
+
Tim Lowe

+

Tim.Lowe

+

The Open University, UK
tim.lowe@open.ac.uk

+
+
+
Michael Weinmann

+

Michael Weinmann

+

Ostbayerische Technische Hochschule (OTH) Amberg-Weiden
m.weinmann@oth-aw.de
+ Chairperson of the 2024 conference

+
+
+
Katja Dechant-Herrera

+

Katja Dechant-Herrera

+

Ostbayerische Technische Hochschule (OTH) Amberg-Weiden
k.dechant@oth-aw.de

+
+
+
+
+
Oksana Labanova

+

Oksana Labanova

+

TTK University of Applied Sciences
oksana.labanova@tktk.ee
Chairperson of the 2023 conference

+
+
+
Michael Kallweit

+

Michael Kallweit

+

Ruhr-Universität Bochum
michael.kallweit@rub.de

+
+
+
Maciej Matuszewski

+

Maciej Matuszewski

+

Durham University, UK
m.t.matuszewski@durham.ac.uk
+ Chairperson of the 2025 conference

+
+
+
+
+
Michael Crocco

+

Michael Crocco

+

Monash University
michael.crocco@monash.edu

+
+
+
+ +
+
+ + + + + + + + + + + diff --git a/Conference/index.html b/Conference/index.html new file mode 100644 index 00000000..6bf95d26 --- /dev/null +++ b/Conference/index.html @@ -0,0 +1,441 @@ + + + + + + + + + + + + Annual conferences - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Annual STACK Conferences

+


+

Upcoming conferences

+

The annual meetings of the STACK Community are for all STACK users to exchange experiences, ideas and research topics. +From 2024 it is likely we will have international community meetings in Europe and Africa.

+

2024: The 2nd African STACK Conference for Undergraduate Mathematics will take place on 12th - 16th August 2024 at +The Technical University of Kenya (TUK), Kenya. +The conference aims to bridge the gap between educators with experience and access to STACK resources and the pressing need for support in teaching and formative assessment in the continent. It also aims to open avenues for collaboration with international partners in research and evaluation, particularly on the effectiveness of digital interventions in assessment in low-resource environments.

+

2024 JSXGraph conference 2024 will take place on 8th-10th October 2024 at University of Bayreuth, Germany. +The conference will bring together developers and teachers, instructors and designers who are interested or already experienced in using JSXGraph to enhance digital learning of STEM topics. As in the years before, the conference will be an entirely online conference. All participants are required to register, registration is free.

+

We invite all participants to contribute a talk or workshop and

+
    +
  • report about their concepts, experience, and workflow,
  • +
  • present their applications and best practices,
  • +
  • discuss pedagogical concepts involving JSXGraph.
  • +
+

The 5. International JSXGraph Conference 2024 will be organized by the "Center of Mobile Learning with Digital Technology"

+

2025: The International Meeting of the STACK Community 2025 will take place on 7 - 9 of April 2025 at Durham University, UK.

+


+

Previous conferences

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TitleDateLocationDescription
International Meeting of the STACK Community 202411 - 13 March
2024
OTH Amberg-Weiden, Amberg, GermanyThe annual International Meeting of the STACK Community is a forum for all STACK users to exchange experiences, ideas and research topics.
African STACK Conference for Undergraduate Mathematics19 - 23 June
2023
Masinde Muliro University of Science and Technology, Kakamega, KenyaA conference to enable African educators with experience on STACK to define a roadmap for transformation of African Undergraduate Maths Education
International Meeting of the STACK Community 202324 - 26 April
2023
TTK University of Applied Sciences, Tallinn, EstoniaThe annual International Meeting of the STACK Community is a forum for all STACK users to exchange experiences, ideas and research topics.
International Meeting of the STACK Community 202224-28 April
2022
Leoben, AustriaA forum for all STACK users to exchange experiences, ideas and research topics
The 4th International STACK Conference26-29 April
2021
TTK University of Applied Sciences, Tallinn, Estonia
stack21.edu.ee
Proceedings
This conference aims to act as a forum for the exchange of experience, ideas and research associated with implementing STACK. The target group is academics who teach undergraduate and postgraduate STEM courses in higher education institutions.
The 3rd International STACK Conference27 April
2020
Online.
3rd International STACK Conference Website
The aim of the conference is to provide a platform for academics, researchers, and scholars, to address common challenges, share knowledge and ideas as well as recent trends and brainstorm creative solutions in the field of STACK.
The 2nd International STACK Conference30 April
2019
The University of Edinburgh, Edinburgh, UKThis conference was day two of a wider meeting.
The 1st International STACK Conference15-16 November
2018
Friedrich-Alexander-Universität Erlangen-Nürnberg, Fürth, Germany
www.stack-konferenz.de
The mission of the Conference is to offer a forum for the STACK Community, to exchange ideas about possibilities and challenges in creating questions, to get closer to solving technical questions and to shape the future of STACK.
+ +
+
+ + + + + + + + + + + diff --git a/Events/2022-11-16-BookQuiz/index.html b/Events/2022-11-16-BookQuiz/index.html new file mode 100644 index 00000000..71e6f913 --- /dev/null +++ b/Events/2022-11-16-BookQuiz/index.html @@ -0,0 +1,388 @@ + + + + + + + + + + + + Using STACK to put the "book inside the quiz" - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Using STACK to put the "book inside the quiz"

+

This event is associated with the Eurasmus+ IDIAM project.

+

We have been using, and evaluating, an organising principle for online learning materials which is increasingly guiding our thinking in the development of university mathematics courses. Essentially we have taken the book and put it inside automatically assessed online quizzes. In doing this, we embrace the potential provided by new technology to implement evidence-based practices such as spaced retrieval practice. This workshop discusses details of this innovation, and demonstrates examples of courses in which we have implemented it.

+

When: Wednesday 16th November 2022.

+

Where: The University of Edinburgh, James Clerk Maxwell building (for in-person attendees) and online.

+

9:30 am - 12:30 pm, JCMB - Room 5323
+13.00 pm - 17.00pm, JCMB - Room 5326

+

Program

+

9:30-10:00 Opening
+10:00-11:00 Designing materials with STACK & "putting the book inside the quiz", George Kinnear
+11:00-11:15 Coffee break
+11:15-12:15 Discussion of case studies of use:

+
    +
  1. HELM project, Konstantina Zerva
  2. +
  3. Introductory Mathematics and its Applications, Robert Bickerton
  4. +
  5. Complex analysis (Honours Complex Variables), Richard Gratwick
  6. +
+

12:15-13:15 Lunch

+

13:00-15:00 STACK authoring workshops: +- Getting your first question working (no STACK experience required). +- Testing and maintaining STACK questions.

+

Sign up

+

You are welcome to attend the event in person. To register please email Konstantina Zerva. Lunch will be provided for every participant attending in-person. Please specify any special dietry requirements you have.

+

Demonstration materials associated with this event will be online here: https://stack-demo.maths.ed.ac.uk/demo/course/view.php?id=176

+ +

Morning talks: https://ed-ac-uk.zoom.us/rec/share/7qRa6xCbEAZr4iFKMD_fBEgp-7LfaGQPxGYNbmY8F53aa3r2TMen4bAvHWPqq8ch._16wt4GzJNRH0hx7

+

Afternoon workshop: https://ed-ac-uk.zoom.us/rec/share/8endrAjD4C95N3pW-tmN5ZySNI19zvfrreE-Nk2aSazIToC-1IeR59RsFayOHGH6.LtKOedIaaORNUe-D?startTime=1668605212000

+ +
+
+ + + + + + + + + + + diff --git a/Events/2022-12-08-JSXgraphSTACK/index.html b/Events/2022-12-08-JSXgraphSTACK/index.html new file mode 100644 index 00000000..45467ab7 --- /dev/null +++ b/Events/2022-12-08-JSXgraphSTACK/index.html @@ -0,0 +1,390 @@ + + + + + + + + + + + + Using JSX graphs in STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Using JSX graphs in STACK

+

This event is associated with the Eurasmus+ IDIAM project.

+

JSXGraph is a cross-browser library for displaying interactive geometry, function plotting, graphs, and data visualization in a web browser https://jsxgraph.org/wp/index.html. Mathematical and physical phenomena can be better understood and explored via visualization. This workshop will provide hands-on practise on how to create JSXGraphs, which you can embend in your educational resources (e.g. in markdown editor) and how to use JSXGraph in STACK assessments.

+

When: Thursday 8th December 2022.

+

Where: The University of Edinburgh, James Clerk Maxwell building, Room 5323 (for in-person attendees) and online. Times below are GMT.

+

Zoom link for online participation:
+Join Zoom Meeting
+https://ed-ac-uk.zoom.us/j/86838815060
+Meeting ID: 868 3881 5060
+Passcode: iWRxP3Lk

+

Program

+

9:30-10:00 Pre-meeting coffee
+10:00-10:10 Opening
+10:10-11:00 Presentation: Math visualization with JSXGraph - an overview, Alfred Wassermann
+11:00-11:20 Coffee break
+11:20-13:00 Programming Workshop: "Create your first JSXgraph", Alfred Wassermann

+

13:00-14:00 Lunch

+

14:00-14:40 Presentation: Using JSXgraph in STACK questions, Jonas Alexander Lache
+14:40-15:00 Coffee break
+15:00-16:30 Workshop: How to use JSXGraph in STACK, Wigand Rathmann and Jonas Julius Harang
+The workshop will cover:
+- Create a graph which follows the randomisation.
+- Create a graph with binding of variables (the graph is part of the answer).

+

Sign up

+

You are welcome to attend the event in person. To register please email Konstantina Zerva. Lunch will be provided for every participant attending in-person. Please specify any special dietary requirements you have.

+

Demonstration materials associated with this event will be online here: https://stack-demo.maths.ed.ac.uk/demo/course/view.php?id=176

+ +

Morning session: https://ed-ac-uk.zoom.us/rec/share/LCcw1po5f7gpRk1qkm0cLX4m8R0QLL5olBWsGW75FavnnF5Yx_DZhyNLV-BnUtus.7Q6FsDBSWC0PzLOZ?startTime=1670493588000

+

Afternoon session: https://ed-ac-uk.zoom.us/rec/share/LCcw1po5f7gpRk1qkm0cLX4m8R0QLL5olBWsGW75FavnnF5Yx_DZhyNLV-BnUtus.7Q6FsDBSWC0PzLOZ?startTime=1670508198000

+ +
+
+ + + + + + + + + + + diff --git a/Events/2023-04-AdvancedSTACK/index.html b/Events/2023-04-AdvancedSTACK/index.html new file mode 100644 index 00000000..5ffc2af9 --- /dev/null +++ b/Events/2023-04-AdvancedSTACK/index.html @@ -0,0 +1,365 @@ + + + + + + + + + + + + Using STACK in more advanced courses - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Using STACK in more advanced courses

+

This event is associated with the Eurasmus+ IDIAM project.

+

When: April 2023 - TBC.

+

Where: The University of Edinburgh, James Clerk Maxwell building.

+ +
+
+ + + + + + + + + + + diff --git a/Events/2023-06-19-AfricanSTACKConference/index.html b/Events/2023-06-19-AfricanSTACKConference/index.html new file mode 100644 index 00000000..e1de6cbc --- /dev/null +++ b/Events/2023-06-19-AfricanSTACKConference/index.html @@ -0,0 +1,467 @@ + + + + + + + + + + + + African STACK Conference for Undergraduate Mathematics - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

African STACK Conference for Undergraduate Mathematics

+

The first African STACK Conference for Undergraduate Mathematics will take place at Masinde Muliro University of Science and Technology (MMUST) from 19 to 23 June 2023.

+ +

The conference aims to enable African educators with experience on STACK to define a roadmap for transformation of African maths education. Since 2019, African universities started incorporating STACK assessments to their undergraduate courses, particularly to deal with issues of large class sizes (some classes are over 1,200 students) with a single lecturer and no additional human resources. A concerted effort was started by groups of universities, with the support of IDEMS International, to promote STACK in the region through open resources and question banks, which are slowly spreading throughout the continent, with the objective of full curriculum coverage.

+ +

The conference will provide a platform for lecturers to present their experiences incorporating STACK to undergraduate courses, their methodologies and impact found. Key stakeholders will have an opportunity to extend their collaboration and accelerate the integration of STACK.

+ +

The conference will include a 2-day STACK workshop, 2 days of paper and poster presentations, and a final day roundtable discussion with key stakeholders or an additional workshop.

+ +

Registration is now open

+

Please fill in the registration form below to attend the conference. We will write to you shortly after receiving your application with payment details.

+ +

Limited funding may be available for partial or full waivers and financial support for additional expenses. Due to limited funding this will only be possible in exceptional circumstances and places at the conference are not guaranteed if support is requested. Decisions will be made on a case-by-case basis. If you require financial support to attend the conference, please submit your registration form no later than 8th May 2023.

+ +

Fees

+
    +
  • For Kenyan participants: KES15,000 (a KES5,000 discount is available for Kenya Mathematical Society members)
  • +
  • For other African participants: USD150
  • +
  • For other international participants: USD300
  • +
+

Register Now

+ +

Submit an abstract

+

The conference will include a combination of 30-minutes Paper Presentations and 15-minutes Poster Presentations. Please submit an abstract (maximum 4000 characters) in the form below. The final deadline for submissions has been extended to 14th May 2023.

+ +

Submit an Abstract

+ +

Keynote Speakers

+
    +
  • Prof Chris Sangwin, The University of Edinburgh, Chairperson of the STACK International Advisory Board
  • +
  • Prof George Lawi, Masinde Muliro University for Science and Technology
  • +
  • Dr David Stern, IDEMS International, member of the STACK International Advisory Board
  • +
  • Dr Michael Obiero Oyengo, Maseno University, Kenya, member of the STACK International Advisory Board and vice-chair of the Kenya Mathematical Society
  • +
  • Dr James Kaleli Musyoka, Maseno University, Kenya, vice-president of the International Association for Statistics Education
  • +
+

Confirmed Invited Speakers

+
    +
  • Dr Idrissa Said Amour, University of Dar es Salaam, Tanzania
  • +
  • Dr Abdu Mohammed Seid, Bahir Dar University, Ethiopia
  • +
  • Mr Santiago Borio, IDEMS International
  • +
  • Dr Jared Ongaro, University of Nairobi, Kenya
  • +
  • Dr Mary Ochieng, Strathmore University, Kenya
  • +
  • Dr Donnie Kasyoki Munyao, Maseno University, Kenya
  • +
  • Mr Juma Zevick, IDEMS International
  • +
  • Mr Wastalas Montognon, IDEMS International
  • +
  • Dr Danilo Lewanski, University of Trieste, Italy, Université de Genève, Switzerland, SAMI
  • +
+

Organising Committee

+
    +
  • Prof George Lawi (MMUST)
  • +
  • Dr Achiles Nyongesa (MMUST)
  • +
  • Dr Everlyne Odero (MMUST)
  • +
  • Dr Frankline Tireito (MMUST)
  • +
  • Dr. David Angwenyi (MMUST)
  • +
  • Mr Santiago Borio (IDEMS International)
  • +
  • Dr Michael Obiero (Maseno University)
  • +
  • Ms Christine Laetitia (INNODEMS)
  • +
  • Mr Juma Zevick (IDEMS International)
  • +
  • Dr Danilo Lewanski (University of Trieste, Université de Genève, SAMI)
  • +
+

Supported by

+
+
+
+
Masinde Muliro University of Science and Technology
+

MMUST

+
+
+
Maseno University
+

Maseno University

+
+
+
Kenya Mathematical Society
+

Kenya Mathematical Society

+
+
+
+
+
+
IDEMS International
+

IDEMS International

+
+
+
INNODEMS
+

INNODEMS

+
+
+
SAMI
+

SAMI

+
+
+
+
+
IDEMS International
+

Swiss National Science Foundation

+
+
+
INNODEMS
+

Université de Genève

+
+
+
IDEMS International
+

European Mathematical Society

+
+
+
+ +
+
+ + + + + + + + + + + diff --git a/Events/2024-02-03-AuthOMathConfLearningMathematics/index.html b/Events/2024-02-03-AuthOMathConfLearningMathematics/index.html new file mode 100644 index 00000000..df7ffdc9 --- /dev/null +++ b/Events/2024-02-03-AuthOMathConfLearningMathematics/index.html @@ -0,0 +1,380 @@ + + + + + + + + + + + + INTERNATIONAL ONLINE CONFERENCE “LEARNING MATHEMATICS : DIGITAL AND INTERACTIVE” ON 3 FEBRUARY 2024 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

INTERNATIONAL ONLINE CONFERENCE “LEARNING MATHEMATICS : DIGITAL AND INTERACTIVE” ON 3 FEBRUARY 2024

+

The Erasmus Project AuthOMath https://www.authomath.org/ has achieved its objectives!

+

On 3 February 2024, the project will present its results:

+
    +
  • The technical integration of GeoGebra applets into the digital assessment system STACK
  • +
  • A didactic concept for the design of digital maths tasks with interactive elements in task and feedback.
  • +
+

The presentation will be part of a one-day online conference with speakers

+
    +
  • Chris Sangwin (Edinburgh)
  • +
  • Susanne Narciss (Dresden)
  • +
  • Andreas Eichler (Kassel)
  • +
  • Susanne Dingel (Landau)
  • +
+

In addition, Tim Lutz (Landau) and Patrick Galm (Heidelberg) will offer workshops on technical and didactic aspects of the combination of GeoGebra and STACK.

+

Details on the programme and registration can be found here:

+

https://www.authomath.org/?page_id=1448

+

We look forward to seeing many familiar and as yet unfamiliar faces from the STACK community!

+

Guido Pinkernell and the Teams from AuthOMath and the Heidelberg MathBrücke.

+ +
+
+ + + + + + + + + + + diff --git a/Events/2024-03-27-AuthOMathGGB/index.html b/Events/2024-03-27-AuthOMathGGB/index.html new file mode 100644 index 00000000..77f3bcd9 --- /dev/null +++ b/Events/2024-03-27-AuthOMathGGB/index.html @@ -0,0 +1,380 @@ + + + + + + + + + + + + AuthOMath multiplier event: using GeoGebra in STACK - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

AuthOMath multiplier event: using GeoGebra in STACK

+

The Erasmus Project AuthOMath https://www.authomath.org/ has enabled us to integrate STACK with GeoGebra. In particular, we can now include GeoGebra worksheets as an input enabling students to give an answer which is a geometric diagram. Mathematical and physical phenomena can be better understood and explored via visualization. This is a practical workshop for users interested in getting started with this new feature.

+

Examples of materials developed by the AuthOMath project are given in the AuthOMath project page.

+

Documentation for this new feature is available in the STACK documentation

+

When: Wednesday 27th March 2024.

+

Where: The University of Edinburgh, James Clerk Maxwell building, Room 5323 (for in-person attendees) and online. Times below are GMT.

+

Zoom link for online participation: please register to receive the link

+

12:00-13:00 Lunch (for in-person participants)

+

13:00-14:00 Presentation: Using GeoGebra in STACK questions
+14:00-14:30 Coffee break
+14:30-16:30 Workshop: How to use GeoGebra in STACK

+
    +
  • Create a graph which follows the randomisation.
  • +
  • Create a graph with binding of variables (the graph is part of the answer).
  • +
+

Demonstration materials associated with this event will be online here: https://stack-demo.maths.ed.ac.uk/demo/

+

Sign up

+

Please register using this form by Wednesday 20th March 2024: https://www.authomath.org/?page_id=1876&lang=en

+

You are welcome to attend the event in person. A vegetarian sandwich lunch will be provided for every participant attending in-person. If you have any special dietary requirements, please email Konstantina Zerva after you have completed the registration form.

+ +
+
+ + + + + + + + + + + diff --git a/Events/2024-05-08-AuthOMath/index.html b/Events/2024-05-08-AuthOMath/index.html new file mode 100644 index 00000000..49b1e0d9 --- /dev/null +++ b/Events/2024-05-08-AuthOMath/index.html @@ -0,0 +1,382 @@ + + + + + + + + + + + + Discovering AuthOMath - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Discovering AuthOMath

+

The AuthOMath project https://www.authomath.org/, supported by the European Union’s Erasmus+ programme, has dedicated two and a half years to integrating GeoGebra and STACK. Its primary aim is to provide teaching guidelines for designing dynamic mathematical tasks with tailored feedback for students' errors.

+

To present the achievements achieved by researchers from Heidelberg University of Education (Germany), the University of Edinburgh (Scotland), Johannes Kepler University (Austria), and the University of Cantabria, the Discovering AuthOMath (Descubriendo AuthOMath) event is organized at the Faculty of Sciences of the University of Cantabria. This event will offer insights into innovative teaching approaches and practical applications for secondary and tertiary education mathematics teachers.

+

When: 8 May 2024

+

Where: Faculty of Sciences, University of Cantabria, Santander, Cantabria, Spain.

+

Speakers

+
    +
  • José Manuel Diego Mantecón (Universidad de Cantabria)
  • +
  • Camilo Sua (Universidad de Valencia)
  • +
  • María Sanz-Ruiz (Universidad de Cantabria)
  • +
+

Further information about the program can be found at the following link: https://www.authomath.org/?p=2065.

+

Sign up

+

Please register using this form by May 3, 2024: https://www.authomath.org/

+ + + + + +
EU flagThe project is co-funded by the EU
under the Erasmus+ Programme
No. 2021-1-DE01-KA220-HED-000032031
+
+ +
+
+ + + + + + + + + + + diff --git a/Events/2024-08-12-AfricanSTACKConference/index.html b/Events/2024-08-12-AfricanSTACKConference/index.html new file mode 100644 index 00000000..2d66e780 --- /dev/null +++ b/Events/2024-08-12-AfricanSTACKConference/index.html @@ -0,0 +1,481 @@ + + + + + + + + + + + + The 2nd African STACK Conference for Undergraduate Mathematics - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

The 2nd African STACK Conference for Undergraduate Mathematics

+

The 2nd African STACK Conference for Undergraduate Mathematics will be held at the Technical University of Kenya (TUK) from 12th to 16th August 2024.

+ +

The conference aims to bridge the gap between Mathematics educators with experience and access to STACK resources and the pressing need for support in teaching and formative assessment with immediate feedback in mathematics within African universities. With the establishment of the African STACK Community Leadership Team and access to IDEMS’ Open Question Banks (OQB) of STACK questions, there is the potential for widespread adoption and institutionalization of STACK for continuous assessment with timely feedback across African institutions, which has been a universal challenge in these contexts.

+ +

The conference also aims to open avenues for collaboration with international partners in conducting research and evaluation, particularly on the effectiveness of digital interventions in assessment in low-resource environments. Large class sizes and growing adoption of STACK in undergraduate courses in the region has proven to be a rich source of data for analysis.

+ +

Africa is uniquely positioned to lead in the large-scale adoption of digital technologies for formative assessment of undergraduate mathematics. The conference will serve as a platform for lecturers to share their experiences incorporating STACK into undergraduate courses, including their methodologies and observed impacts. Lecturers who have utilized STACK in their teaching will also have the opportunity to present their courses for peer review and engage in discussions on their work. Additionally, other participants will have the opportunity to share their STACK work, which will help define strategies for improved STACK integration in African institutions.

+ +

Conference Format

+

The conference will include 2-days of STACK workshop, 2 days of paper presentations, and a final day roundtable discussion with key stakeholders or an additional workshop, and a panel discussion with key stakeholders. Workshops will offer opportunities to develop, improve and analyze courses delivered with STACK integration with the objective of lecturers leaving the conference with courses they can directly deliver.

+ +

Submission of Abstracts is now open

+

Paper presentations at the conference will serve as a platform to share experience of STACK integration in African universities and educational institutions, share key STACK features that could serve the community, promote the STACK research agenda, within several other purposes. We welcome presentations from STACK users off all type, from developers, through lecturers using STACK, to STACK professionals. + +Please submit an abstract (maximum 4000 characters) in the form below. The deadline for submissions is Sunday 7th July at 23:59 East Africa Time.

+ +

Submit an Abstract

+ +

Registration is now open

+

Please register to participate in the conference by filling in the registration form below. The organizing committee will write to you shortly after receiving your application with payment details.

+ +

Limited funding may be available for partial or full waivers and financial support for additional expenses. Due to limited funding this will only be possible in exceptional circumstances and places at the conference are not guaranteed if support is requested. Decisions will be made on a case-by-case basis. If you require financial support to attend the conference, please submit your registration form no later than Monday 1st July 2024.

+ +

Fees

+
    +
  • Kenyan participants: KES20,000 (a KES5,000 discount is available for Kenya Mathematical Society members)
  • +
  • Other African participants: USD150
  • +
  • Other international participants: USD300
  • +
  • African Postgraduate Students: USD50
  • +
+

Register Now

+ +

Submit an abstract

+

Information on how to submit an abstract for presentations will be published soon, together with relevant deadlines.

+ + + +

Keynote Speakers

+
    +
  • Prof Chris Sangwin, The University of Edinburgh, Chairperson of the STACK International Advisory Board
  • +
  • Dr Michael Obiero Oyengo, Maseno University, Kenya, member of the STACK International Advisory Board, vice-chair of the Kenya Mathematical Society, and chair of the African STACK Community Leadership Team
  • +
  • Dr Beth Nyambura Kiratu, Technical University of Kenya, Treasurer of the Kenya Mathematical Society (TBC)
  • +
  • Dr David Stern, IDEMS International, member of the STACK International Advisory Board, and Dr Franca Hoffmann, California Institute of Technology (Caltech), US, International Scientific Advisor at Quantum Leap Africa, at the African Institute for Mathematical Sciences (AIMS)
  • +
  • Dr Mary Achieng Ochieng, Strathmore University, Kenya, member of the African STACK Community Leadership team.
  • +
+

Organising Committee

+

Host organisers (TUK)

+
    +
  • Dr Beth Nyambura Kiratu
  • +
  • Dr Ben Obiero
  • +
  • Dr Esther Njue
  • +
  • Dr Catherine Mwangi
  • +
+

Supporting Organisers

+
    +
  • Dr Michael Obiero Oyengo, Maseno University, Kenya
  • +
  • Dr Mary Achieng Ochieng, Strathmore University, Kenya
  • +
  • Prof George Lawi, Masinde Muliro Uinversity of Science and Technology, Kenya
  • +
  • Dr Idrissa Said Amour - University of Dar es Salaam, Tanzania
  • +
  • Mr Santiago Borio, IDEMS International, UK
  • +
  • Prof Bertrand Eynard, IPhT, Université Paris-Saclay, France
  • +
  • Dr Danilo Lewański, University of Trieste, Italy
  • +
+

Supported by

+
+
+
+
Technical University of Kenya
+

Technical University of Kenya

+
+
+
Maseno University
+

Maseno University

+
+
+
Kenya Mathematical Society
+

Kenya Mathematical Society

+
+
+
+
+
+
IDEMS International
+

IDEMS International

+
+
+
INNODEMS
+

INNODEMS

+
+
+
SAMI
+

SAMI

+
+
+
+
+
Masinde Muliro University of Science and Technology
+

MMUST

+
+
+
European Research Council
+

European Research Council

+
+
+
Institut de Physique Theorique
+

Institut de Physique Theorique

+
+
+
+
+
Centre National de la Recherche Scientifique, France
+

Centre National de la Recherche Scientifique

+
+
+
Centre d’Energie Atomique
+

Centre d’Energie Atomique

+
+
+
+ +
+
+ + + + + + + + + + + diff --git a/GetStarted/index.html b/GetStarted/index.html new file mode 100644 index 00000000..ddab99ac --- /dev/null +++ b/GetStarted/index.html @@ -0,0 +1,405 @@ + + + + + + + + + + + + Get Started - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

I am a...

+
+
+
+
+  

Teacher

+

Explore STACKs features by visiting our Demo site. If you have STACK installed and want to write your first question, see our question authoring quick start guide.

+
+ +
+
+
+  

Student

+

+ Read the information for students on our documentation, including accessibility and FAQ, or get used to STACK syntax with our syntax quiz.

+
+ +
+
+
+
+
+  

Site administrator

+

STACK can be used via a hosted partner, installed within Moodle or ILIAS, or integrated into other Learning Management Systems via LTI.

+
+ +
+
+
+

Developer

+

STACK is open-source and welcomes contributions: added features, integrations, translations, bug reports and more.

+
+ +
+
+
+ +
+
+ + + + + + + + + + + diff --git a/Legal/Accessibility/index.html b/Legal/Accessibility/index.html new file mode 100644 index 00000000..86014800 --- /dev/null +++ b/Legal/Accessibility/index.html @@ -0,0 +1,386 @@ + + + + + + + + + + + + Accessibility - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Accessibility

+

We believe online assessment should be available and accessible to all.

+

We strive to comply with the Web Content Accessibility Guidelines (WCAG) 2.1 on www.stack-assessment.org ("the website") at most of level AA requirements.

+

This statement covers the STACK website, and does not cover the STACK interface for teachers and students.

+

Steps taken

+

The main website www.stack-assessment.org,

+
    +
  • functions at 200% zoom,
  • +
  • is responsive and usable on most common browsers and resolutions;
  • +
  • browsers tested on: Chrome, Firefox, Safari, Edge,
  • +
  • resolutions tested on: common resolutions for laptop, tablet and mobile,
  • +
  • ensures all non-text elements have alternative text,
  • +
  • never uses colour as the sole means of conveying information,
  • +
+

Known issues

+
    +
  • The website is not compatible with Internet Explorer 11.
  • +
  • The website has not yet been tested with applications that increase/decrease text size only.
  • +
  • The website has not yet been tested with screen readers.
  • +
  • The navigation bar cannot be navigated with only keyboard beyond two levels.
  • +
  • The user map on /CaseStudies/Overview is not navigable by keyboard.
  • +
  • Some elements have a colour contrast ratio of less than 4:5:1, in particular the navigation bar.
  • +
  • The documentation website "docs.stack-assessment.org" has not yet been tested for accessibility.
  • +
+

For comments or suggestions regarding to accessibility, please email Chris Sangwin at C.J.Sangwin@ed.ac.uk

+ +
+
+ + + + + + + + + + + diff --git a/Legal/Licenses/index.html b/Legal/Licenses/index.html new file mode 100644 index 00000000..b04048d9 --- /dev/null +++ b/Legal/Licenses/index.html @@ -0,0 +1,379 @@ + + + + + + + + + + + + Licenses - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Licenses

+

The contents of stack-assessment.org and docs.stack-assessment.org is Licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.

+

The following are related licenses for STACK, stack-assessment.org and docs.stack-assessment.org ("the website").

+

STACK

+

STACK is licensed under the GNU General Public License Version 3.

+

The STACK documentation, contained in the subdirectories of doc/ and on docs.stack-assessment.org, is Licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.

+

GitHub Pages

+

The website is hosted on GitHub pages. Please see the GitHub terms of service.

+

MkDocs

+

The website is built with MkDocs, licensed under a BSD license.

+

mdx_math

+

The website uses the mdx_math markdown compiler. python-markdown-math license.

+

Bootstrap

+

stack-assessment.org uses Bootstrap, licensed under a MIT License.

+

Bootstrap MkDocs Theme

+

Bootstrap is integrated into MkDocs using the mkdocs-bootstrap theme, licensed under a BSD 2-Clause "Simplified" License.

+

Material Theme

+

docs.stack-assessment.org uses the Material theme, licensed under a MIT License.

+ +
+
+ + + + + + + + + + + diff --git a/Legal/PrivacyStatement/index.html b/Legal/PrivacyStatement/index.html new file mode 100644 index 00000000..3703c1db --- /dev/null +++ b/Legal/PrivacyStatement/index.html @@ -0,0 +1,372 @@ + + + + + + + + + + + + Privacy Statement - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Privacy Statement

+

This statement was last revised on 13/5/2022.

+

How we collect your data

+

This website is hosted on GitHub Pages. GitHub may collect User Personal Information from visitors to this website, including logs of visitor IP addresses, to comply with legal obligations, and to maintain the security and integrity of the Website and the Service. Please see GitHub's privacy statement for information on how your data is used and stored by GitHub.

+

We do not otherwise collect any personal information about you when you visit this website.

+

Privacy policies of other websites

+

This statement refers only to this website (www.stack-assessment.org), and not to any other STACK websites, or any third party sites linked to on this website. You are encouraged to review privacy statements on other websites when you visit them.

+

Changes to our privacy policy

+

The date of the latest revision is shown at the top of the page. We may change this privacy statement at any time and for any reason. You are encouraged to regularly review this statement.

+

How to contact us

+

If you have questions about our privacy policy, please email Professor Chris Sangwin at C.J.Sangwin@ed.ac.uk.

+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2022-12-09-NetworkReport/index.html b/MeetingReports/2022-12-09-NetworkReport/index.html new file mode 100644 index 00000000..2c6dc7d7 --- /dev/null +++ b/MeetingReports/2022-12-09-NetworkReport/index.html @@ -0,0 +1,409 @@ + + + + + + + + + + + + 1st STACK Network meeting report, Dec 2022 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

1st STACK Network meeting report, Dec 2022

+

The STACK Professionals Network was established during the summer of 2022 to bring together professionals, across various institutions, who spend a significant amount of their time authoring STACK questions.

+

Between Dec 2019 and Dec 2022, the 3 pandemic years, the need to create more online resourses expanded significantly and many universities created staff posts for people whose main role is to author STACK questions. These posts also support a large and growing community of STACK users in their institutions. The Network will bring these people together and contribute to the knowledge sharing among them.

+

The 1st STACK Network meeting took place on the 9th of December 2022 in the School of Mathematics at the University of Edinburgh. The purpose of the meeting was to bring together the people of the Network and set some initial goals for the Network. The topics that were discussed during the meeting can be divided into two categories: (i) how the members can contribute to the STACK project and (ii) how the Network will support its members.

+

How the Network will support its members

+

Using STACK to automate mathematics and STEM assessments requires specialist skills, and the people who do this job typically work in isolation in their institutions. In many cases there is only one person in the department/university doing this job, so they don't have much local help for STACK-related issues that they may encounter. The Network will help the STACK professionals to solve various authoring difficulties and also make it easier to share existing questions/quizzes amongst themselves. Mathematics curriculum, especially topics like algebra, calculus, or differential equations, are very similar around the globe, so many existing STACK questions can be easily shared and reused with minor edits. Example questions can help a question author get started in a new topic area. While some colleagues are reluctant to freely post whole courses, most are very willing to share examples especially with colleagues with whom they already have a professional relationship.

+

The Network can provide training to colleagues who are new to STACK and support them with authoring, testing and maintaining their questions. Members of the Network can also support the development of the pedagogy associated with using STACK questions effectively.

+

Another goal of the Network is to provide visibility to this specialist, technical work, so that the work of the STACK professionals will acquire better recognition. Most of the content created by the STACK professionals is behind passwords, and intellectual property belongs to institutions rather than individuals, so the authors of the questions don't have a long-term track record of their work. Not all professionals contribute towards research, they don't necessarily publish papers, so all this work can easily be unnoticed.

+

How the members will contribute to the STACK project

+

The members of the Network are highly encouraged to contribute by improving the documentation, with a particular focus on sharing expertise and "know-how" of system features for specific subjects. Other ways that the members can contribute are:

+
    +
  1. Sharing and organising demo questions
  2. +
  3. Sharing sample questions and question banks
  4. +
  5. Creating templates questions
  6. +
  7. Testing and maintaining questions
  8. +
  9. Helping to set priorities for developing the STACK system, with their views having stronger weight than typical end-users
  10. +
+

Since STACK has become widely used in many countries the Network can help with translating the system and various sample materials to different languages. Members can certainly help translators understand how the various language strings are used within the software, something not immediately obvious to some translators.

+
+
+ Participants of the Network meeting +
Figure: Participants of the Network meeting
+
+
+ +

The technical notes of the meeting can be found here (end of the page): https://github.com/maths/moodle-qtype_stack/blob/dev/doc/en/Developer/Future_plans.md.

+

List of participants:

+

In-person:

+
    +
  • Chris Sangwin - University of Edinburgh, UK
  • +
  • Ian Jones - Loughborough University, UK
  • +
  • Curtis Hooper - Loughborough University, UK
  • +
  • George-Ionut Ionita - ETH Zürich, Switzerland
  • +
  • Andreas Steiger - ETH Zürich, Switzerland
  • +
  • Kinga Sipos - Bern University, Switzerland
  • +
  • Sam Fearn - Durham University, UK
  • +
  • Maciej Matuszewski - Durham University, UK
  • +
  • George Kinnear - University of Edinburgh, UK
  • +
  • Konstantina Zerva - University of Edinburgh, UK
  • +
+

Online:

+
    +
  • Santiago Borio - IDEMS International, UK
  • +
  • Tim Lowe - The Open University, UK
  • +
  • Andrey Chesnokov - NTNU, Norway
  • +
+

Anyone who spends a significant proportion of their professional work writing STACK questions, and who is interested in joining the Network should contact Chris Sangwin or Konstantina Zerva at the University of Edinburgh.

+

The full list of STACK professionals can be found here: https://stack-assessment.org/Community/

+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2023-06-09-NetworkReport/index.html b/MeetingReports/2023-06-09-NetworkReport/index.html new file mode 100644 index 00000000..8974707d --- /dev/null +++ b/MeetingReports/2023-06-09-NetworkReport/index.html @@ -0,0 +1,397 @@ + + + + + + + + + + + + 2nd STACK Network meeting report, June 2023 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

2nd STACK Network meeting report, June 2023

+

The 2nd STACK Network meeting took place on the 9th of June 2023 online. The purpose of the meeting was to discuss that issues that raised during the recent International meeting of the STACK Community (April 2023). It was also a good opportunity to welcome new members.

+

Topics Discussed:

+

New STACK Release: +Chris presented the new STACK release, STACK 4.4.3, and demonstrated its new features. The key features of this release included improved cleaning of Unicode from students' input strings, descriptions to the question (castext), the PRT nodes, and the question tests. Additionally, an input extra option validator was introduced to allow user-defined validation functions. A new reveal block in questions was also added. It was emphasized that users should check their existing questions after updating to STACK 4.4.3, especially in relation to the changes in JSX graphs. Further details about the new features can be found in the documentation provided at https://docs.stack-assessment.org/en/Developer/Development_history/.

+

Bulk Testing for STACK Update: +It was recommended that everyone who is updating to the new STACK version should perform bulk testing of their questions. However, not everyone has admin privileges on their local servers, making it necessary to seek assistance from the local IT team. To support colleagues who lacked admin privileges, Maciej volunteered to write guidelines for testing quizzes, which will be shared with the team. +Note, for moodle users there is a capability qtype/stack:usediagnostictools. If you don't have admin rights at your university you can make a case for a group of STACK users to be granted this capability, which is needed for the bulk test, and other STACK maintenance functions.

+

API, Managing Questions Outside Moodle: +The meeting included a discussion on exploring API options for managing questions outside Moodle. While the topic proved to be highly technical, it generated interest among some participants. Santiago expressed willingness to assist in putting together a funding application if there is genuine interest from the team. It was proposed to organize a dedicated meeting specifically focused on this topic to ensure a detailed discussion with interested members. +Update on 2023-07-07: Tim and Andreas made a start with this new Moodle tool: https://github.com/maths/moodle-qbank_importasversion which allows you to import a question from a Moodle XML file as a new version of an existing question.

+

Github training +All of the STACK sourcecode, documentation and the community website can be found in the Github repository https://github.com/maths. However, since not everyone is familiar with using Github, this can serve as a barrier for contributing to the documentation. To address this issue, we decided to organize a Github training. The aim of this training is to assist people in becoming more familiar with Github and to boost their confidence in contributing to the STACK website https://stack-assessment.org/ (Github repository https://github.com/maths/stack-web) by adding case studies, advertising events, and updating documents.

+

Funding Opportunities, Grant Opportunities: +The possibility of securing funding for professional networks was discussed. A stream was created in Zulipchat to coordinate efforts in writing grant applications.

+

Communications: +Zulipchat was identified as the preferred communication platform for the organization, providing a centralized space for discussions and issue reporting. Github was emphasized as the primary platform for reporting code-related issues. https://stack-assessment.zulipchat.com/

+

Next Meetings:

+

Despite the approaching summer season, it was suggested to schedule another meeting in July and another in early September. This would ensure continued progress and provide opportunities for further discussions and updates.

+

List of participants:

+
    +
  • Chris Sangwin - University of Edinburgh, UK
  • +
  • Ruth Reynolds - University College London, UK
  • +
  • Stephen Nulty - National University of Ireland Maynooth, Ireland
  • +
  • Jonas Lache - HRW University of Applied Scieces, Germany
  • +
  • Kim Kneher - DHBW Mannheim, Germany
  • +
  • Marc Peterfi - DHBW Mannheim, Germany
  • +
  • Steffi Zegowitz - TU Clausthal, Germany
  • +
  • Andreas Steiger - ETH Zürich, Switzerland
  • +
  • George Ionita - ETH Zürich, Switzerland
  • +
  • Kinga Sipos - Bern University, Switzerland
  • +
  • Sam Fearn - Durham University, UK
  • +
  • Maciej Matuszewski - Durham University, UK
  • +
  • Santiago Borio - IDEMS International, UK
  • +
  • Konstantina Zerva - University of Edinburgh, UK
  • +
+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2023-07-21-NetworkReport/index.html b/MeetingReports/2023-07-21-NetworkReport/index.html new file mode 100644 index 00000000..8abf6e19 --- /dev/null +++ b/MeetingReports/2023-07-21-NetworkReport/index.html @@ -0,0 +1,429 @@ + + + + + + + + + + + + 3rd STACK Professionals Network meeting report, July 2023 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

3rd STACK Professionals Network meeting report, July 2023

+

The 3rd STACK Professionals Network meeting took place on the 21st of July 2023 online.

+

Present at the meeting

+

Santiago Borio (SB), Chris Sangwin (CS), Konstantina Zerva (KZ), Maciej Matuszewski (MM), George Ionita (GI), Steffi Zegowitz (SZ), Aviva Lisann Lenth (ALL), George Ionita (GI), Luke Longworth (LL), Ruth Reynolds (RR), Juma Zevick (JZ), Sam Fearn (SF), Edmund Farrow (EF).

+

Apologies: Andreas Steiger, Tim Lowe, Jonas Lache.

+

Acknowledgements: Thanks to MM for taking notes.

+

Agenda

+
    +
  1. Welcome and introductions
  2. +
  3. Updates from last meeting
  4. +
  5. Workflows and processes
  6. +
  7. Find a regular slot for the Network meeting
  8. +
  9. Updating the STACK website updates
  10. +
  11. STACK demo: a course/area in which STACK Network are admins
  12. +
  13. Update to Moodle 4 and STACK latest version
  14. +
  15. Meeting with EF re version control of questions
  16. +
  17. AOB:
      +
    • Other community groups: German Speaking, African Community Leadership, New Zealand and Australia? (TBD)
    • +
    • Projects page
    • +
    +
  18. +
+

1. Introductions:

+
    +
  • SB works for IDEMS international
  • +
  • JZ works for IDEMS international, based in Kenya supporting local universities to integrate STACK
  • +
  • CS is the STACK developer and works at Edinburgh
  • +
  • EF works on STACK at the University of Edinburgh – people should meet with him (edmund.farrow@ed.ac.uk) regarding updates to version control and question sharing updates
  • +
  • ALL is from Germany and works with the German STACK users community
  • +
  • GI has worked at Bern and ETH Zurich, in particular on exams in STACK
  • +
  • KZ works at the University of Edinburgh with a focus on STACK question authoring and the STACK network
  • +
  • LL works at the University of Canterbury, NZ, managing STACK quizzes
  • +
  • MM is Technical Manager for Mathematical Sciences at Durham University, managing the Moodle server and doing question authoring
  • +
  • RR is a teaching focused lecturer at UCL who set up STACK at the university
  • +
  • SF is a teaching focused lecturer at Durham who set up STACK at the university
  • +
  • SZ is at TU Clausthal in Germany and works on the administration of Moodle and STACK
  • +
+

2. Updates since last meeting

+

CS – a new minor STACK version has been released. The testing form (STACK Question Dashboard) has been improved, there is a new question description field.

+

3. Workflows and processes

+

SB outlined the IDEMS questions writing process. We might want to introduce a similar process more widely. More discussion on people’s workflow preferences (and how this might influence changes we want to make to the question type) is required.

+
    +
  • Teachers first provide new written static questions, a full worked solution, and any potential common errors that can be considered by the PRTs.
  • +
  • There is then a google docs “Question Template” where a description of how the question will be realized in STACK is described – the template is then reviewed by a number of reviewers who check that certain categories are in place (e.g. ‘has tests’, ‘has deployed variants’, ‘has description’, …).
  • +
  • There is a question tracker spreadsheet, a kanban board and a forum for discussion on questions and wider issues
  • +
+

Comments and discussion points: +* There is an existing authoring guide in the STACK docs from CS (https://docs.stack-assessment.org/en/Authoring/Workflow/) +* There are many different workflow choices depending on the question/institutional needs (e.g. should there be just one question with lots of randomisation, or many separate questions which are randomly selected at the quiz level). +* Non-expert users may not be certain about the distinction between Moodle/ILIAS and STACK so our documentation and workflow should include information about this former element as well (e.g. how to create quizzes) +* We need to investigate if there is an easy way of seeing how many times students take a quiz / how long it takes them to do it.

+

4. Find a regular slot for the Network meeting

+

Monthly meetings were previously proposed and this works for most people. The exact time will be confirmed by email.

+

5. Updating the STACK website updates

+

A new guide for updating the website is being prepared (see https://github.com/maths/stack-web; https://github.com/maths/stack-web/pull/26/). Live guide can be accessed here: https://stack-assessment.org/WebsiteDocs/WebsiteUpdates/

+

6. STACK demo

+

It would be useful to have a server with the network members having the “manager” level of permission. This can already be done on https://sandbox.moodle.idems.international/ for anyone who wants – contact SB to be made an admin on that site. KZ will create an area in the Demo Site with manager rights for network members to share materials easily.

+

7. Update to Moodle 4 and STACK latest version

+

Updates to Moodle 4 and the latest version of STACK is ongoing at various institutions. A recommendation was given to be careful about direct comparisons between floating points – this might break with the latest update. Some people are having issues with bulk tests not testing all the questions.

+

8. Meeting with EF re version control of questions

+

Individual meetings with the new member of the STACK development team, Edmund Farrow, are encouraged. This will help EF understand different user cases for his first project.

+

9. AOB:

+

Other community groups

+

German speakers and African networks are being set up.

+

There are likely to be annual European meetings, and annual African meetings (perhaps an Australasian and South American one as well in the future?). Then one of these could be designated as the International conference venue.

+

ICME 15 is in Australia in July next year – it might be a good opportunity to build connections there.

+

Projects page in STACK website

+

A new projects page could be added to the STACK website; this has been drafted in a branch in the website repo. Currently it contains only have 2 but if people have ongoing projects they can submit them to the branch so we have enough content to justify having a projects page.

+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2023-09-21-NetworkReport/index.html b/MeetingReports/2023-09-21-NetworkReport/index.html new file mode 100644 index 00000000..fb688773 --- /dev/null +++ b/MeetingReports/2023-09-21-NetworkReport/index.html @@ -0,0 +1,427 @@ + + + + + + + + + + + + 4th STACK Professionals Network meeting report, September 2023 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

4th STACK Professionals Network meeting report, September 2023

+

The 4th STACK Professionals Network meeting took place on the 21st of September 2023 online.

+

Present at the meeting

+

Chris Sangwin (CJS), Konstantina Zerva (KZ), Edmund Farrow (EF), Santiago Borio (SB), Georg Osang (GO), George Ionita (GI), Juma Zevick (JZ), Matti Harjula (MH), Ruth Reynolds (RR), Stephen Nulty (SN), Tim Lowe (TL), Wigand Rathmann (WR), Alex Fowler (AF), Sam Fearn (SF), Marc Peterfi (MP), Ian Jones (IJ), Jonas Lache (JL), Kim Kneher (KK), Andreas Steiger (AS)

+

Apologies: Maciej Matuszewski, Chris Nelson, Curtis Hooper.

+

Acknowledgements: Thanks to KZ for hosting and to SB for taking notes.

+
+
+ Participants of the Network meeting +
Figure: Participants of the Network meeting
+
+
+ +

Agenda

+
    +
  1. Welcome to new members and introductions
  2. +
  3. Regular slot for the meeting
      +
    • Do we all agree for Thursdays?
    • +
    • Same time or shifting times to accommodate time zones?
    • +
    • Volunteer to host the next meeting?
    • +
    +
  4. +
  5. Website management team proposal
  6. +
  7. HELM funding - internal application UoE
  8. +
  9. New case studies
  10. +
  11. STACK projects (ongoing)
  12. +
  13. Groups and Communities
  14. +
  15. “Warnings” in release notes for new versions of STACK
  16. +
  17. Version numbers mapping
  18. +
  19. AOB
  20. +
+

Meeting Notes

+

1. Introductions:

+

All present introduced themselves briefly, outlining their institution and key role. +New members were welcome.

+

2. Slot for meetings

+
    +
  • Participants agreed that Thursdays are generally OK.
  • +
  • Probably shifting times would be convenient as at least one member will be lecturing at this time slot for this meeting. Shifting time would make it ‘easier’ for some individuals due to time zones and regular clashes.
  • +
  • Date for next meeting: 19th October. RR volunteered to host at 3pm BST
  • +
+

3. Website management team

+

SB proposed a team to manage and implement, review PRs, etc. More structural changes would be discussed with the Development team. EF is happy to join the team. SF is happy to contribute here and there but is busy this term so will do what he can.

+

4. HELM funding - internal application UoE

+

KZ is considering applying for funding to complete the HELM workbooks migration to STACK. She is writing a proposal. It would possibly include translations. WR can share his use and experience. Any research on translating paper based questions to electronic versions would be beneficial, IJ may be able to find literature from OFQUAL and may have small bits of funding (TBC). The project would start next British summer.

+

5. New case studies

+

SB mentioned the INNODEMS Internships and African STACK Conference case studies. SF asked if a project on a possible new question type could lead to a case study. SB suggested it would be and gave examples of various styles of case studies.

+

CJS encouraged members to provide case studies, it has a big impact for funding to show that the project is alive. SB offered to upload case studies for others.

+

6. STACK projects (ongoing)

+

New section in the website to report on ongoing, upcoming and completed projects. This could be to report on larger scale interventions than case studies or provide partial reports on achievements. Currently there is a branch in the website repo that would be published once more projects are included.

+

7. Groups and Communities

+

SB outlined the new community published in the website: the African STACK Community Leadership Team. SB encouraged members of other groups to reach out to him for support to create their own page if needed.

+

8. “Warnings” in release notes for new versions of STACK

+

It wasn’t particularly clear for JL that the upgrade of STACK to 4.4.3 could break some questions, in particular JSXGraphs questions. A request was made for future releases to include warnings for possible issues in the release notes. CJS acknowledged and agreed we need to be more careful and provide context.

+

The idea of a dev machine for testing and highlighting issues pre release would be useful was raised again. Some members don’t have admin access to their Moodle setups and struggle to test things. SB suggested that IDEMS has a sandbox server where he can provide admin rights to anyone who would like to test, which should be kept updated with the latest Moodle and STACK versions.

+

MH suggested that some testing tools are available to non-admin users under qtype/stack:usediagnostictools. +CJS suggested he and his team would draft documentation on how to use require_capability('qtype/stack:usediagnostictools', $context);

+

TL reminded the group that we had a ‘release notes page’ when we moved to Moodle/Stack 4 and suggested that perhaps we need one for every release that people can contribute to. CJS and others explained that this was due to significant changes in the release but agreed that more thorough release notes would be a sensible idea and reminded all that contributions to the documentation are welcome.

+

9. Version numbers mapping

+

TL asked the network if it there is a way to map the ‘20230605’ style version number in the XML to the ‘4.4.3’ friendly version number?

+

MH replied that this is not easy, but one can search through the github repo. GO mentioned a goemaxima table (middle 2 columns are the relevant ones). SF requested to have that in the STACK docs and TL requested for this could be included in the user docs, maybe linked to the release notes. MH mentioned the need to link to Ilias.

+

10. AOB

+
    +
  • WR shared some really nice JSXGraph stuff here
  • +
  • GI asked if there was a database of literature and if there is a method to share our research. SB mentioned there is a publications section in the docs and TL mentioned the BibTex bibliography at the end of the publications section. SB agreed to investigate making the list visible in the publications docs rather than having to download the pdf.
  • +
+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2023-11-30-NetworkReport/index.html b/MeetingReports/2023-11-30-NetworkReport/index.html new file mode 100644 index 00000000..a7e5a276 --- /dev/null +++ b/MeetingReports/2023-11-30-NetworkReport/index.html @@ -0,0 +1,401 @@ + + + + + + + + + + + + 5th STACK Professionals Network meeting report, November 2023 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

5th STACK Professionals Network meeting report, November 2023

+

The 5th STACK Professionals Network meeting took place on Thursday 30 of November 2023 online.

+

Present at the meeting

+

Marc Peterfi (MP), Jonas Lache, Konstantina Zerva (KZ), Matti Harjula (MH), Wigand Rathmann, Kinga Sipos, Marie-Pauline Wiechmann, Tim Hunt, Juma Zevick, Stephen Nulty, Maciej Matuszewski (MM), George Ionita.

+

Apologies: Tim Lowe, Chris Sangwin, Santiago Borio, Steffi Zegowitz.

+

Acknowledgements: Thanks to KZ for hosting and to MM for taking notes.

+
+
+ Participants of the Network meeting +
Figure: Participants of the Network meeting
+
+
+ +

Agenda

+
    +
  1. Welcome to new members and introductions
  2. +
  3. Updates since last meeting
  4. +
  5. Moodle LTI (if anyone knows)
  6. +
  7. AOB
  8. +
  9. Next meeting dates and host
  10. +
+

Meeting Notes

+

1. Introductions:

+

All present introduced themselves briefly, outlining their institution and key role. +New members were welcome.

+

2. Updates since last meeting

+
    +
  • New STACK 4.4.6 released in October. It was a bug-fix release. The next STACK version will get released at 11 of December (veryfied by Chris Sangwing after the meeting) and it will include a proof-builder drag and drop feature.
  • +
  • The STACK demonstration site has not been updated yet – will be done soon.
  • +
  • There will be a Greek Moodle Meet at the 8-9 of December in which KZ will speak at.
  • +
  • There are potential plans for changing the Moodle question bank: https://moodle.org/mod/forum/discuss.php?d=452417. MH mentioned that this needs to account for the possibility of different instances of the same question using different seeds. +*There may be issues with the latest version of STACK on ILIAS. For institutions that don’t use Moodle, it may be possible to set up an LTI connection to a Moodle server from whatever VLE/LMS is being used.
  • +
  • There will soon be documentation on how to build complex graphs in JSXGraph: see here The current JSXGraph documentation can be found here
  • +
  • Various people are working on using STACK with statistics. Probability theory and statistics tasks (German): https://moodle.ruhr-uni-bochum.de/course/view.php?id=56064
  • +
+

3. Moodle LTI

+

KZ asked a question about LTI connection between Learn Ultra and Moodle (4.1). The marks that come back to Learn are not the marks for each quiz. The LTI creates only one column in the Learn Ultra gradebook, where it gives the total mark for the course (the same issue existed with the previous LTI connection between old Learn and Moodle 3.9). +TH mentioned the LTI Moodle forum (questions about LTI can be asked here): Moodle LTI forum

+

5. Next meeting

+

The next meeting will take place on Thursday 25th January. A poll will be send out for the exact time.

+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2024-03-12-NetworkReport/index.html b/MeetingReports/2024-03-12-NetworkReport/index.html new file mode 100644 index 00000000..81465641 --- /dev/null +++ b/MeetingReports/2024-03-12-NetworkReport/index.html @@ -0,0 +1,404 @@ + + + + + + + + + + + + 6th STACK Professionals Network meeting report, March 2024 - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

6th STACK Professionals Network meeting report, March 2024

+

The 6th STACK Professionals Network meeting took place on Tuesday 12th March 2024 in person during the International STACK Conference. There was some remote participation but unfortunately due to technical issues not all online participants were able to fully join.

+

Acknowledgements: Thanks to OTH Amberg-Weiden for allowing the network to join during the conference. Thanks to all the participants who attended who are not official members of the network and for their contributions. Thanks to Sam Fearne for taking notes.

+

The nature of the meeting was different than usual and it was an open discussion on new development, priorities and challenges that STACK users are facing. The meeting was co-facilitated by Santiago Borio and Chris Sangwin. Below is a list of the key items that were discussed.

+

Items discussed

+
    +
  • +

    Chris outlined why the network is useful in order to demonstrate the continued value of the project.

    +
  • +
  • +

    Santiago introduced the network and how it works, what it aims to achieve both for the project and for its members.

    +
  • +
  • +

    Corné pointed out the STACK Professionals Network is useful for forming consortia to apply to European grants, which usually require an internation consortium, and help people fund their existing positions.

    +
  • +
  • +

    A question from the audience was posed about a drag-drop editor for STACK questions. Chris created dragmath some time ago, but the project died. If this is of value, perhaps some other audience member could take up this project. Chris also mentioned that MathPix might be a better future for natural input, and Sam mentioned having used STACK-JS in similar contexts.

    +
  • +
  • +

    Stephen requested more regular workshops (git basics, other special interests). Santiago mentioned that the conference included an introductory STACK workshop that was offered in multiple languages, and there would be scope for further events for targeted groups.

    +
  • +
  • +

    A member of the audience suggester struggling with custom settings and useful scripts due to Moodle permissions. There was agreement that it would be good to have a list of Moodle capabilities required, listed on the main webpage, to lend authenticity and help convince institutions to grant these capabilities to STACK authors. Santiago offered an IDEMS server as a playground for new users to use to learn more about STACK and Moodle admin.

    +
  • +
  • +

    An audience member learned from video tutorials online, specifically learned about question tests. Videos exist in the quick start guide. The docs website also gives specific advice by topic. Particular examples are good.

    +
  • +
  • +

    What open and semi-open question banks exist? Some were mentioned.

    +
  • +
  • +

    A question from audience was raised about being able to edit questions direct in text format. There was an existing project for writing questions in a YAML format. Chris noted that using such a format introduces the possibility of typos, etc. This project stalled a while ago and never added support for rich media, though YAML is capable of this. Sam added that being able to import PRTs would be useful. The audience thought that the YAML format was a good item to be high priority.

    +
  • +
  • +

    Georg suggested trying to keep track of the various projects people were working on, such as projects analysing databases of questions. Chris noted that such projects were in a better place to succeed now that the gitsync plugin exists. Santiago noted that focus on multilingual development is necessary for open databases to thrive. ChatGPT and other tools can help do auto-translating, though it is possible for context to be lost between the different strings; It would be useful to be able to filter by language in a database, and see screenshots of the questions for users to decide whether the question is worth translating further.

    +
  • +
  • +

    Question tests are currently basic and test score, penalty and final tree destination. There were requests for more advanced question testing: external libraries, timeouts for large sets of PRTs. Chris asked the audience whether they would rather have hard limits set in STACK, or soft limits created by timeouts. Audience unanimous they would rather not have hard limits. Chris introduced the s_assert function which can enable testing in feedback variables in Maxima.

    +
  • +
  • +

    Edmund asked for thoughts about whether a change to monospace font would be a problem for people. Asked for contributions via Zulip.

    +
  • +
+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/2024-05-13-ParsonsV2Demo/index.html b/MeetingReports/2024-05-13-ParsonsV2Demo/index.html new file mode 100644 index 00000000..f143fb27 --- /dev/null +++ b/MeetingReports/2024-05-13-ParsonsV2Demo/index.html @@ -0,0 +1,402 @@ + + + + + + + + + + + + STACK v4.6.0 matching feature demo and feedback session - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

STACK v4.6.0 matching feature demo and feedback session

+

A feature allowing authors to write drag-and-drop matching problems was developed for release in STACK v4.6.0. +A preview and feedback session was held on Monday, 13th May 2024 with members of the STACK Professionals Network +to establish any desired changes or additions to the current state of development prior to release.

+

Present at the meeting: Sal Mercuri, Matti Harjula, Luke Longworth, Sam Fearn, Andreas Steiger, Stephen Nulty, +Juma Zevick, Wigand Rathmann, Edmund Farrow, Danilo Lewanski.

+

Background

+

A drag-and-drop proof assessment feature based on Parson's problems was released in STACK v4.5.0 in Dec. 2023 +through a parsons block. +In these questions, students are presented with two lists: an available list populated with pre-written strings +corresponding to steps in the proof; an empty answer list they must drag proof steps to in the correct order. +The priority for STACK v4.6.0 is to extend this drag-and-drop functionality beyond proof into more general +"grouping" (dragging items into the correct category) and "matching" (dragging multiple corresponding items +to the same row) questions.

+

Demo summary

+
    +
  • Introduction and background.
  • +
  • Grouping question demo.
      +
    • A question where a student is asked to drag functions into the groups "Continuous" and "Discontinuous" as appropriate.
    • +
    • Student interface was presented.
    • +
    • Author workflow was presented focusing on defining variables and setting up the question text. Assessment through the use of the to-be-released matchlib.mac STACK library was also covered.
    • +
    +
  • +
  • Matching question demo.
      +
    • A question where a student is asked to drag functions and their first- and second-order derivatives into rows as appropriate.
    • +
    • Student interface was presented.
    • +
    • Author workflow was presented as in the grouping question demo.
    • +
    +
  • +
  • Feedback on items so far.
  • +
  • (Time permitting) Adding index columns to matching questions and using images.
  • +
+

Feedback and other items discussed

+
    +
  • A question on style was raised, particularly in the scenario where a large number of groups/columns are being used. Action item: test larger volumes of columns/rows and make documentation recommendations where necessary.
  • +
  • A suggestion of helper functions which could map Maxima variables into TeX within displayed items, to avoid the burden of having to \\(...\\) numerous times. It was raised that this would require further development on how CASText is handled by STACK.
  • +
  • Question raised about whether interactive images could be used, for example JSXGraph. A longer-term possibility for more general item styles which may also include inputs within items.
  • +
  • A question on PRTs and whether more bespoke forms of evaluation are possible, for example, can we check whether a student has used a specific item somewhere in their grid?
  • +
  • Discussion around when is it more appropriate to use drag-and-drop style questions vs. drop-down vs. other styles of questions. It could be a useful research study to understand the impact of using drag-and-drop style questions vs. drop-down, and make guidelines and recommendations based on these. A link to A Collaboratively-Derived Research Agenda for E-assessment in Undergraduate Mathematics was shared in relation to this.
  • +
  • Request to see the original Parson's proof question style for comparison and it was clarified how proof vs. grouping vs. matching styles are defined.
  • +
+ +
+
+ + + + + + + + + + + diff --git a/MeetingReports/Images/2023-09-21-Network-meeting.png b/MeetingReports/Images/2023-09-21-Network-meeting.png new file mode 100644 index 00000000..25387d06 Binary files /dev/null and b/MeetingReports/Images/2023-09-21-Network-meeting.png differ diff --git a/MeetingReports/Images/2023-11-30-Network-meeting.jpg b/MeetingReports/Images/2023-11-30-Network-meeting.jpg new file mode 100644 index 00000000..58bc60a8 Binary files /dev/null and b/MeetingReports/Images/2023-11-30-Network-meeting.jpg differ diff --git a/MeetingReports/Images/2023-12-09-Network-meeting.jpg b/MeetingReports/Images/2023-12-09-Network-meeting.jpg new file mode 100644 index 00000000..aeae44c0 Binary files /dev/null and b/MeetingReports/Images/2023-12-09-Network-meeting.jpg differ diff --git a/MeetingReports/index.html b/MeetingReports/index.html new file mode 100644 index 00000000..bb5adbe8 --- /dev/null +++ b/MeetingReports/index.html @@ -0,0 +1,375 @@ + + + + + + + + + + + + Meeting reports - STACK + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/ActivatingFeedback/index.html b/Projects/AuthOMath/ActivatingFeedback/index.html new file mode 100644 index 00000000..127dfd0e --- /dev/null +++ b/Projects/AuthOMath/ActivatingFeedback/index.html @@ -0,0 +1,397 @@ + + + + + + + + + + + + Combining STACK and GeoGebra for better feedback - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Combining STACK and GeoGebra for better feedback

+

Guido Pinkernell, Heidelberg University of Education, Germany

+

STACK offers the possibility of Combining STACK and GeoGebra for better feedback. When placed in feedback, interactive applets allow for what could be called "activating feedback", i.e. adaptive learning material that students to work out the necessary knowledge themselves.

+

+ +

+

The object of this task is the well-known translation of an algebraic expression into its geometric representation.

+
+
+Answered AuthOMath Task +
Figure: An answered AuthOMath task
+
+ +

Here, GeoGebra provides an interactive applet in both STACK's task and feedback area. The latter comes in three steps, each after some delay:

+
    +
  • First, it allows the learner to compare her or his wrong solution with the correct, thus giving an experienced user immediate hints about his error, presumably made inadvertently.
  • +
  • For those needing more help, it provides an interactive version of the situation together with questions that guide the student through working out himself how the algebraic and geometrical representations of this function relate.
  • +
  • Finally, it gives access to a worked solution, thus serving those learners which rely on a stepwise instruction to solve questions like this.
  • +
+
+
+First Feedback Step +
Figure: The first feedback step in an answered AuthOMath task
+
+ +
+
+Second Feedback Step +
Figure: The second feedback step in an answered AuthOMath task
+
+ +
+
+Third Feedback Step +
Figure: The third feedback step in an answered AuthOMath task
+
+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Example-generation-research/index.html b/Projects/AuthOMath/Example-generation-research/index.html new file mode 100644 index 00000000..efa15a29 --- /dev/null +++ b/Projects/AuthOMath/Example-generation-research/index.html @@ -0,0 +1,390 @@ + + + + + + + + + + + + Example generation and educational research - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Example generation and educational research

+

George Kinnear, The University of Edinburgh, UK

+

+ +

+

Example-generation tasks ask students to produce examples of mathematical objects. Many mathematics education researchers are interested in how students approach this type of task, and how they can help students to learn about mathematical concepts (Kinnear et al., 2022). +E-assessment tools like STACK enable teachers to use example-generation tasks even with very large classes of students, so that each students get personal feedback.

+

Thanks to the AuthOMath project, GeoGebra applets can now be used as a way for students to input a graphical answer to a STACK question. +This opens up a wide range of topics where teachers are now able to set example-generation tasks.

+

For example, this question is taken from a first-year course at the University of Edinburgh, where students are learning about the properties of functions:

+
+
+A correct response +
Figure: A question asking students to construct the graph of a function.
+
+ +

To answer the question, the student can drag the four points and draw the graph of a piecewise linear function with the required properties. Behind the scenes, STACK can check the properties of the student's graph.

+

If there are any errors, the student can be given customised feedback that refers to their particular answer:

+
+
+An incorrect response +
Figure: An incorrect response together with the automatically-generated feedback.
+
+ +

For this example, it turns out that students found the e-assessment task harder than the same one on paper (Kinnear et al., 2023). This was likely because the applet constrained students to using examples that are piecewise-linear functions, which are not the most familiar examples for students.

+

There is great potential for further work to develop tasks (and sequences of tasks) like this, making full use of the power of GeoGebra so that students can produce graphical examples.

+

References

+

Kinnear, G., Jones, I., Sangwin, C., Alarfaj, M., Davies, B., Fearn, S., Foster, C., Heck, A., Henderson, K., Hunt, T., Iannone, P., Kontorovich, I., Larson, N., Lowe, T., Meyer, J. C., O’Shea, A., Rowlett, P., Sikurajapathi, I., & Wong, T. (2022). A Collaboratively-Derived Research Agenda for E-assessment in Undergraduate Mathematics. International Journal of Research in Undergraduate Mathematics Education. https://doi.org/10.1007/s40753-022-00189-6

+

Kinnear, G., Iannone, P., & Davies, B. (2023). Insights about functions from example-generation tasks: combining e-assessment and written responses. In P. Drijvers, C. Csapodi, H. Palmér, K. Gosztonyi, & E. Kónya (Eds.), Proceedings of the Thirteenth Congress of the European Society for Research in Mathematics Education (CERME13) (pp. 2399–2406). Alfréd Rényi Institute of Mathematics and ERME.

+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Fractions-part-whole/index.html b/Projects/AuthOMath/Fractions-part-whole/index.html new file mode 100644 index 00000000..9998f81a --- /dev/null +++ b/Projects/AuthOMath/Fractions-part-whole/index.html @@ -0,0 +1,382 @@ + + + + + + + + + + + + Fractions as Part of One Whole - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Fractions as Part of One Whole

+

Gunter Ehret, Heidelberg University of Education, Germany

+

STACK offers the possibility to give adaptive feedback. STACK tasks could therefore be an enrichment for maths lessons and a relief for teachers, especially in schools where self-directed learning plays an important role.

+

+ +

+

This example task was created by teacher-education students in a didactics seminar at the Heidelberg University of Education. In this task children test their understanding fractions as part of one whole. Different types of feedback can be shown, depending on the input of the students.

+
+
+A correct response +
Figure: A question in which children test their understanding fractions as part of one whole.
+
+ +

If the sliders are set so that the dynamic illustration correctly represents the required fraction, there is a detailed confirmation of correctness in mathematically correct language, as well as a request to repeat the task five times in a row, with the required fraction changing each time.

+

If the input is incorrect, this is fed back and the student can either repeat the task directly or wait 15 seconds for the sample solution.

+

The programme also identifies if an equivalent fraction is entered; the feedback can be different here, in the case presented in the video it refers to a learner who has not yet formally learned to expand and reduce fractions.

+
+
+An incorrect response, with feedback +
Figure: Illustrating feedback to an incorrect response.
+
+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Images/AuthOMath_EU.png b/Projects/AuthOMath/Images/AuthOMath_EU.png new file mode 100644 index 00000000..1c5c221d Binary files /dev/null and b/Projects/AuthOMath/Images/AuthOMath_EU.png differ diff --git a/Projects/AuthOMath/Images/Authomath PNG 1.png b/Projects/AuthOMath/Images/Authomath PNG 1.png new file mode 100644 index 00000000..739977ab Binary files /dev/null and b/Projects/AuthOMath/Images/Authomath PNG 1.png differ diff --git a/Projects/AuthOMath/Images/Code.png b/Projects/AuthOMath/Images/Code.png new file mode 100644 index 00000000..99a9509c Binary files /dev/null and b/Projects/AuthOMath/Images/Code.png differ diff --git a/Projects/AuthOMath/Images/Correct_slope.png b/Projects/AuthOMath/Images/Correct_slope.png new file mode 100644 index 00000000..37a1b187 Binary files /dev/null and b/Projects/AuthOMath/Images/Correct_slope.png differ diff --git a/Projects/AuthOMath/Images/EN Co-funded by the EU_POS.jpg b/Projects/AuthOMath/Images/EN Co-funded by the EU_POS.jpg new file mode 100644 index 00000000..df1d091c Binary files /dev/null and b/Projects/AuthOMath/Images/EN Co-funded by the EU_POS.jpg differ diff --git a/Projects/AuthOMath/Images/EN V Co-funded by the EU_POS.jpg b/Projects/AuthOMath/Images/EN V Co-funded by the EU_POS.jpg new file mode 100644 index 00000000..5260d250 Binary files /dev/null and b/Projects/AuthOMath/Images/EN V Co-funded by the EU_POS.jpg differ diff --git a/Projects/AuthOMath/Images/EU-100x100.png b/Projects/AuthOMath/Images/EU-100x100.png new file mode 100644 index 00000000..9398e0af Binary files /dev/null and b/Projects/AuthOMath/Images/EU-100x100.png differ diff --git a/Projects/AuthOMath/Images/Fractions-part-whole1.png b/Projects/AuthOMath/Images/Fractions-part-whole1.png new file mode 100644 index 00000000..d59b552a Binary files /dev/null and b/Projects/AuthOMath/Images/Fractions-part-whole1.png differ diff --git a/Projects/AuthOMath/Images/Fractions-part-whole2.png b/Projects/AuthOMath/Images/Fractions-part-whole2.png new file mode 100644 index 00000000..5e0cb906 Binary files /dev/null and b/Projects/AuthOMath/Images/Fractions-part-whole2.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic1 - Copy.png b/Projects/AuthOMath/Images/JKU-pic1 - Copy.png new file mode 100644 index 00000000..def544ff Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic1 - Copy.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic1.png b/Projects/AuthOMath/Images/JKU-pic1.png new file mode 100644 index 00000000..def544ff Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic1.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic2 - Copy.png b/Projects/AuthOMath/Images/JKU-pic2 - Copy.png new file mode 100644 index 00000000..f74d819d Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic2 - Copy.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic2.png b/Projects/AuthOMath/Images/JKU-pic2.png new file mode 100644 index 00000000..f74d819d Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic2.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic3 - Copy.png b/Projects/AuthOMath/Images/JKU-pic3 - Copy.png new file mode 100644 index 00000000..635a83fc Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic3 - Copy.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic3.png b/Projects/AuthOMath/Images/JKU-pic3.png new file mode 100644 index 00000000..635a83fc Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic3.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic4 - Copy.png b/Projects/AuthOMath/Images/JKU-pic4 - Copy.png new file mode 100644 index 00000000..6d93eabc Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic4 - Copy.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic4.png b/Projects/AuthOMath/Images/JKU-pic4.png new file mode 100644 index 00000000..6d93eabc Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic4.png differ diff --git a/Projects/AuthOMath/Images/JKU-pic5.png b/Projects/AuthOMath/Images/JKU-pic5.png new file mode 100644 index 00000000..29bed486 Binary files /dev/null and b/Projects/AuthOMath/Images/JKU-pic5.png differ diff --git a/Projects/AuthOMath/Images/Linear-equation-1.png b/Projects/AuthOMath/Images/Linear-equation-1.png new file mode 100644 index 00000000..77cda6a9 Binary files /dev/null and b/Projects/AuthOMath/Images/Linear-equation-1.png differ diff --git a/Projects/AuthOMath/Images/Linear-equation-2.png b/Projects/AuthOMath/Images/Linear-equation-2.png new file mode 100644 index 00000000..c39a5cf4 Binary files /dev/null and b/Projects/AuthOMath/Images/Linear-equation-2.png differ diff --git a/Projects/AuthOMath/Images/Linear-equation-3.png b/Projects/AuthOMath/Images/Linear-equation-3.png new file mode 100644 index 00000000..44fb14cd Binary files /dev/null and b/Projects/AuthOMath/Images/Linear-equation-3.png differ diff --git a/Projects/AuthOMath/Images/LinearAlgebra-1.png b/Projects/AuthOMath/Images/LinearAlgebra-1.png new file mode 100644 index 00000000..86e37255 Binary files /dev/null and b/Projects/AuthOMath/Images/LinearAlgebra-1.png differ diff --git a/Projects/AuthOMath/Images/LinearAlgebra-2.png b/Projects/AuthOMath/Images/LinearAlgebra-2.png new file mode 100644 index 00000000..0d70daab Binary files /dev/null and b/Projects/AuthOMath/Images/LinearAlgebra-2.png differ diff --git a/Projects/AuthOMath/Images/Tangram1.png b/Projects/AuthOMath/Images/Tangram1.png new file mode 100644 index 00000000..735dd274 Binary files /dev/null and b/Projects/AuthOMath/Images/Tangram1.png differ diff --git a/Projects/AuthOMath/Images/Tangram2.png b/Projects/AuthOMath/Images/Tangram2.png new file mode 100644 index 00000000..e5a74e58 Binary files /dev/null and b/Projects/AuthOMath/Images/Tangram2.png differ diff --git a/Projects/AuthOMath/Images/Wrong_slope.png b/Projects/AuthOMath/Images/Wrong_slope.png new file mode 100644 index 00000000..fd3722f6 Binary files /dev/null and b/Projects/AuthOMath/Images/Wrong_slope.png differ diff --git a/Projects/AuthOMath/Images/gk-example-task-screenshot1.png b/Projects/AuthOMath/Images/gk-example-task-screenshot1.png new file mode 100644 index 00000000..bcebe10c Binary files /dev/null and b/Projects/AuthOMath/Images/gk-example-task-screenshot1.png differ diff --git a/Projects/AuthOMath/Images/gk-example-task-screenshot2.png b/Projects/AuthOMath/Images/gk-example-task-screenshot2.png new file mode 100644 index 00000000..e37ce32c Binary files /dev/null and b/Projects/AuthOMath/Images/gk-example-task-screenshot2.png differ diff --git a/Projects/AuthOMath/Images/interactivefeedback02.png b/Projects/AuthOMath/Images/interactivefeedback02.png new file mode 100644 index 00000000..2738c244 Binary files /dev/null and b/Projects/AuthOMath/Images/interactivefeedback02.png differ diff --git a/Projects/AuthOMath/Images/interactivefeedback03.png b/Projects/AuthOMath/Images/interactivefeedback03.png new file mode 100644 index 00000000..91908702 Binary files /dev/null and b/Projects/AuthOMath/Images/interactivefeedback03.png differ diff --git a/Projects/AuthOMath/Images/interactivefeedback05.png b/Projects/AuthOMath/Images/interactivefeedback05.png new file mode 100644 index 00000000..88b7971b Binary files /dev/null and b/Projects/AuthOMath/Images/interactivefeedback05.png differ diff --git a/Projects/AuthOMath/Images/interactivefeedback06.png b/Projects/AuthOMath/Images/interactivefeedback06.png new file mode 100644 index 00000000..65be798f Binary files /dev/null and b/Projects/AuthOMath/Images/interactivefeedback06.png differ diff --git a/Projects/AuthOMath/Random-generation/index.html b/Projects/AuthOMath/Random-generation/index.html new file mode 100644 index 00000000..d3353fde --- /dev/null +++ b/Projects/AuthOMath/Random-generation/index.html @@ -0,0 +1,393 @@ + + + + + + + + + + + + Randomly generating mathematical questions - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Randomly generating mathematical questions

+

Konstantina Zerva, The University of Edinburgh, UK

+

STACK offers the possibility to randomly generate questions and give feedback, which is relevant to each specific random variable. The task presented in the video is a very simple one, and it was deliberately chosen to be simple, because the main focus here is the randomisation and the things that question authors need to consider when creating random variables in a question.

+

+ +

+

The task asks students to drag the point so that the slope of the line is the same as the given value; in this case . The values of the slope are randomised.

+

When the student load the question they all see the same graph. The initial slope of the line is set to in the GeoGebra app and the point is placed at . The students can move the point along the line and drag it around so that the line changes slopes.

+

In this example the slop needs to be . The slope is defined as so the students can drag the point and place it at and (point ). Then click the check button and see if their answer is correct or not. Another possible solution here and .

+
+
+Correct slope +
Figure: Defining the correct slope.
+
+ +

A common mistake that students do is believe that the slope is defined as so if they put at the point they'll receive specific feedback about this mistake.

+
+
+Wrong slope +
Figure: A common misconception.
+
+ +

Let's look at the background of the question and how to deal with the randomisation. All the slopes need to be ratios of two integers (e.g. ) and also they shouldn't simplify to an integer (avoid cases like ).

+
+
+An example of Maxima code +
Figure: An example of Maxima code for creating the variables for this question.
+
+ +

The variable defines the denominator of the slope. We pick the denominator to be an even number, in this case a power of . We could also predefine a list of even numbers and randomly pick from the list. +The variable defines the numerator of the slope. For the numerator we pick the values from a predefined list and these values are all odd numbers. +We define the slope as and in our case all the slopes will be fractions.

+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Sample-factor-quadratic/index.html b/Projects/AuthOMath/Sample-factor-quadratic/index.html new file mode 100644 index 00000000..0c3ecd98 --- /dev/null +++ b/Projects/AuthOMath/Sample-factor-quadratic/index.html @@ -0,0 +1,397 @@ + + + + + + + + + + + + Relating factored equations to the area of a rectangle - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Relating factored equations to the area of a rectangle

+

Cecilia Russo, Universidad de Cantabria, Spain

+

STACK offers the possibility of immediate formative feedback. It's great to have everyone in a class of 100 students know they would be able to get feedback even if you are away. The teacher's presence is vital, but it is impossible to be there all the time, and AuthOmath is the perfect teaching assistant combining STACK and GeoGebra.

+

+ +

+

This example is a task sequence to help the student relate factored equations to the area of a rectangle. The first task asks the student to factorise a square of binomial.

+
+
+A blank question +
Figure: A question in which student should write a quadratic in factored form.
+
+ +

If students write an incorrect answer, they are get the following feedback:

+
+
+Feedback to an incorrect attempt +
Figure: Feedback to a student's attempt.
+
+ +

Now, a student can drag point to observe the area of square and try to find a relation between the expression, the area and the length of the sides. When they drag point , they get a square composed of rectangles. The area of each rectangle is shown in the applet. The idea is for the student to add these areas, and obtain the expression needed as the answer to the task. STACK and GeoGebra help the student during the feedback.

+
+
+Feedback to an incorrect attempt +
Figure: Students drag the applet.
+
+ +

Then, the second part of the sequence is related to expressions. Where "" and "" are different natural numbers. In this second part we don't have a square.

+

Again, if students write a wrong answer, they get feedback with a GeoGebra applet. This applet lets the student try out the relation between the length of the sides of the rectangle and the area of it. In that case, they can drag points and to get a rectangle composed of four rectangles. The area of each one is shown.

+
+
+Feedback to an incorrect attempt +
Figure: Students drag the applet, in this case it is a rectangle.
+
+ +

This feedback allows the students to interact with a geometric polynomial representation. At the same time, they can find out a strategy to find a factorized expression. In this way, the geometry and the algebra reinforce each other.

+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Sample-linear-algebra/index.html b/Projects/AuthOMath/Sample-linear-algebra/index.html new file mode 100644 index 00000000..c2d2cbe3 --- /dev/null +++ b/Projects/AuthOMath/Sample-linear-algebra/index.html @@ -0,0 +1,383 @@ + + + + + + + + + + + + Illustrate eigenvectors by positioning vectors - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Illustrate eigenvectors by positioning vectors

+

Chris Sangwin, The University of Edinburgh, UK

+

The original purpose of STACK was to accept answers which are algebraic expressions, moving away from reliance on multiple choice questions. Through AuthOMath we have included GeoGebra diagrams within questions, allowing a student's answer to include the configuration of a diagram. This question illustrates how dynamic diagrams can be used to support more advanced topics in university mathematics.

+

+ +

+

In the problem below students need to relate the eigenvectors of a matrix to the transformation represented by the matrix. Eigenvectors is a technical term for vectors which are scaled by a transformation, but remain in the same direction (or reverse direction). Understanding the effect of transformations through calculating eigenvectors and the corresponding eigenvalues is an important topic in vector spaces. Students need to find a matrix and perform some routine calculations. In addition, four points in the diagram are ready to be dragged by the user to define the endpoints of two eigenvectors.

+
+
+A question in which students indicate the position of the eigenvectors +
Figure: A question in which students indicate the position of the eigenvectors.
+
+ +

Students get very adept at calculating eigenvectors through a mechanical procedure, but their geometric understanding can remain fragile. Excessive calculation can reinforce this problem.

+
+
+A student's partially correct attempt at a question in which students indicate the position of the eigenvectors +
Figure: A student's attempt to indicate the position of the eigenvectors.
+
+ +

In the second figure a student has attempted to illustrate the positions of the eigenvectors. The vector is correct, but is not an eigenvector. The GeoGebra diagram returns the endpoints of the vectors, the computer algebra system establishes the relevant properties (is an eigenvector?) and then generates the feedback shown in the yellow feedback box.

+

GeoGebra is used to provide a visual representation of the vectors. In principal this problem could be extended to a wider range of 2D transformations, and other situations where students can demonstrate their understanding of linear algebra by positioning vectors.

+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Sample-linear-equations/index.html b/Projects/AuthOMath/Sample-linear-equations/index.html new file mode 100644 index 00000000..abc0661d --- /dev/null +++ b/Projects/AuthOMath/Sample-linear-equations/index.html @@ -0,0 +1,389 @@ + + + + + + + + + + + + Providing formative feedback to linear equations - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Providing formative feedback to linear equations

+

María Sanz Ruiz, Universidad de Cantabria, Spain

+

The AuthOMath Project combines GeoGebra and STACK. It allows us to present multiple representations of the same mathematical object. STACK is especially useful to create different approaches to feedback.

+

+ +

+

This task is about solving linear equations step by step. Whenever the students make a mistake, STACK is able to identify it and provide specific feedback to it. Below is an empty question ready for a student.

+
+
+A blank question +
Figure: A question in which student should write their answer.
+
+ +

The image below shows feedback generated automatically by the system. Notice some lines are correct, but the student has made one mistake.

+
+
+A blank question +
Figure: A question in which student should write their answer.
+
+ +

These formative hints can be delivered in many ways. Some students are more receptive to symbolic feedback, while others appreciate written comments. It is also possible to combine both.

+
+
+A blank question +
Figure: A question in which student should write their answer.
+
+ +

This is a useful way to distinguish the characteristics of the different feedbacks and determining which are more helpful and effective in fostering mathematical abilities and learning.

+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/Tangram-task/index.html b/Projects/AuthOMath/Tangram-task/index.html new file mode 100644 index 00000000..2ae8a254 --- /dev/null +++ b/Projects/AuthOMath/Tangram-task/index.html @@ -0,0 +1,389 @@ + + + + + + + + + + + + Tangram tasks for pre-service teachers - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Tangram tasks for pre-service teachers

+

José Manuel Diego Mantecón, Universidad de Cantabria, Spain

+

The AuthoMath Project allows us to use GeoGebra applets on STACK. This offers +a wide range of tasks that we can create and provide feedback to. Students +have the chance to work in an interactive environment and use different +tecniques to solve the same task.

+

+ +

+

There are many ways to compute the area and the perimeter of a figure. In +this task, we go through a few of them using Tangram pieces that our +pre-service teachers can move around and rotate. They can use this applet to +make the calculations using different units of measurement.

+
+
+Using Tangram pieces +
Figure: Illustrating using Tangram pieces within a response.
+
+ +

In this task we ask them to compute and compare the area and the perimeter of +two figures, but also to reflect on what they are doing as a way to teach +these concepts to primary school students. Mathematical concepts go hand in +hand with didactical notions.

+
+
+Using Tangram pieces, with feedback +
Figure: Measuring areas with Tangram pieces.
+
+ +
+
+ + + + + + + + + + + diff --git a/Projects/AuthOMath/index.html b/Projects/AuthOMath/index.html new file mode 100644 index 00000000..9abd2443 --- /dev/null +++ b/Projects/AuthOMath/index.html @@ -0,0 +1,414 @@ + + + + + + + + + + + + AuthOMath - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

AuthOMath: Authoring online mathematics tasks

+

Start date: 01/05/2021
+End date: 31/12/2023

+ +

Official project website: https://www.authomath.org/

+

This project aimed to foster the development of innovative approaches to online and distance +learning especially in primary and secondary education. In particular, the project aims at enabling teachers to create digital online learning material with multimodal, +dynamic, and interactive elements, (GeoGebra) and with adaptive automatic feedback for use in hybrid settings.

+

+ +

+

The project provides an authoring tool (AuTo) and a didactic concept (DiCo) that teachers can use for creating digital online material in mathematics with +multi-modal, dynamic, interactive elements in task formulation and automated, adaptive +feedback. We combined two existing authoring tools that are well-established +in the mathematics educational community. GeoGebra is an OER authoring +tool for creating multimodal, dynamic and interactive mathematical applets, with an easy +accessible user interface of widespread use in the mathematical educational community. +STACK is an OER authoring tool +for randomized mathematical tasks with automatic, answer-based feedback.

+

Combining GeoGebra and STACK is a promising approach to developing an authoring tool for letting teachers create high-quality content. This outcome will be achieved by providing the following project results:

+
    +
  1. AuTo: An authoring tool for creating digital tasks with dynamic and interactive multi-modal elements and adaptive automatic feedback
  2. +
  3. DiCo: A didactical concept for the design of such tasks that takes the relevant mathematics educational research into account
  4. +
+

Participating Organisations

+
    +
  • Pädagogische Hochschule Heidelberg, Germany (Programme Country Institution)
  • +
  • Johann Kepler Universität Linz, Austria (Programme Country Institution)
  • +
  • Universidad de Cantabria, Spain (Programme Country Institution)
  • +
  • University of Edinburgh United, Kingdom (Partner Country Institution)
  • +
  • Geogebra GmbH, Austria (Associated Partner)
  • +
+

Project outcomes

+

This site contains sample materials which illustrate the outcomes from the project.

+ + + + + + +
EU flagThe project is co-funded by the EU
under the Erasmus+ Programme
No. 2021-1-DE01-KA220-HED-000032031
+
+ + +
+
+ + + + + + + + + + + diff --git a/Projects/IDIAM/Images/JSXGraph-3D-1.png b/Projects/IDIAM/Images/JSXGraph-3D-1.png new file mode 100644 index 00000000..f575795e Binary files /dev/null and b/Projects/IDIAM/Images/JSXGraph-3D-1.png differ diff --git a/Projects/IDIAM/Images/eu_flag_co_funded_pos_rgb_left.jpg b/Projects/IDIAM/Images/eu_flag_co_funded_pos_rgb_left.jpg new file mode 100644 index 00000000..f2572c3b Binary files /dev/null and b/Projects/IDIAM/Images/eu_flag_co_funded_pos_rgb_left.jpg differ diff --git a/Projects/IDIAM/index.html b/Projects/IDIAM/index.html new file mode 100644 index 00000000..02228574 --- /dev/null +++ b/Projects/IDIAM/index.html @@ -0,0 +1,403 @@ + + + + + + + + + + + + IDIAM - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

IDIAM: Interactive digital assessment in mathematics

+

Start date: 01/07/2021
+End date: 01/07/2023
+Total duration: 24 months

+ +

The project responded to challenges faced during COVID-19 by helping partner institutions use STACK to develop a) digital tools that assess competencies within science, technology, engineering and mathematics (STEM), particularly mathematical sciences +and b) digital assignments within several specific mathematical subjects at the partner institutions.

+

Based on the STACK system, the project aimed at development of a) digital tools that assess competencies within science, technology, engineering and mathematics (STEM), particularly mathematical sciences +and b) digital assignments within several specific mathematical subjects at the partner institutions.

+

Outcomes from this project include

+
    +
  1. Release digital interactive problems in STACK for the course Fundamentals of Algebra and Calculus and for HELM
  2. +
  3. Example problems in multivariate analysis, that actively use interactive 3D-graphics to illustrate mathematical concepts within multivariate analysis. 3D graphics will be also +used to assess student's knowledge of multivariate analysis.
  4. +
  5. A plugin to STACK/Moodle that makes it possible to plot interactive mathematical 3D graphics.
  6. +
  7. Didactic studies showing how to work with several representation forms for complex mathematical concepts, such as functions, to facilitate better understanding.
  8. +
+

Project partners

+
    +
  • Norges Teknisk-Naturvitenskapelige Universitet Ntnu, Norway
  • +
  • The University Of Edinburgh, UK
  • +
  • Friedrich-Alexander-Universität Erlangennürnberg, Germany
  • +
  • Ruhr-Universitaet Bochum, Germany
  • +
+

Example outcomes

+
    +
  • HELM materials are released through the project github page, sample questions folder. Download the HELM_Sept_23.mbz Moodle backup file for the collection of HELM materials released through this project.
  • +
  • For the JSXGraph part of the project example outcomes were released through their own github site. In partcular the project was key in developing further documentation for the JSXGraph-STACK connection.
  • +
+

Example Given a plot of a function in two variables, ask the student to select all local maxima/minima by clicking on the plot itself. The algebraic expression for +is not given to the student.

+

+

The motivation behind this question is to help the student to get familiar with surfaceplots, multivariable functions and points of interest in such plots and functions. Currently we only ask the student to identify local maxima and minima, but the question could be adapted to also ask for saddlepoints, global and local extremas and so forth.

+ + + + + +
EU flag +
+ + +
+
+ + + + + + + + + + + diff --git a/Projects/KTP/Images/2024-Nested-Proof-study-example.png b/Projects/KTP/Images/2024-Nested-Proof-study-example.png new file mode 100644 index 00000000..ad355f5d Binary files /dev/null and b/Projects/KTP/Images/2024-Nested-Proof-study-example.png differ diff --git a/Projects/KTP/Images/2024-Nested-Proof-study-feedback.png b/Projects/KTP/Images/2024-Nested-Proof-study-feedback.png new file mode 100644 index 00000000..92d647fe Binary files /dev/null and b/Projects/KTP/Images/2024-Nested-Proof-study-feedback.png differ diff --git a/Projects/KTP/Images/grid_example.png b/Projects/KTP/Images/grid_example.png new file mode 100644 index 00000000..17ba9b08 Binary files /dev/null and b/Projects/KTP/Images/grid_example.png differ diff --git a/Projects/KTP/Images/ukri-innovate-uk-square-logo.png b/Projects/KTP/Images/ukri-innovate-uk-square-logo.png new file mode 100644 index 00000000..8081ad0a Binary files /dev/null and b/Projects/KTP/Images/ukri-innovate-uk-square-logo.png differ diff --git a/Projects/KTP/index.html b/Projects/KTP/index.html new file mode 100644 index 00000000..578cb291 --- /dev/null +++ b/Projects/KTP/index.html @@ -0,0 +1,408 @@ + + + + + + + + + + + + KTP - STACK + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

KTP: Knowledge Transfer Partnership for Digital Mathematics Assessment

+

Start date: 08/09/2023
+End date: 31/08/2025
+Total duration: 24 months
+Project partners: The University of Edinburgh & IDEMS International
+Funded by: Innovate UK

+ +

Project Aims

+

This two-year project, funded by Innovate UK, is a collaboration between the School of Mathematics at the University of Edinburgh and IDEMS International. The project focuses on two main workstreams which both aim to enhance STACK as follows.

+
    +
  1. Develop features to improve the assessment of proof-based questions in STACK.
  2. +
  3. Optimise STACK so that it can be used in broader contexts, for example statistics and data science.
  4. +
+

Alongside the above two core aims, the project also involves the continuous addition of smaller-scale features and general code-base maintenance, which aims to improve the user experience in STACK.

+

Background

+

Proof

+

Mathematical proof forms the core of an undergraduate degree in mathematics. While STACK was originally designed for reasoning within algebraic equivalences, it has grown to encompass numerous aspects of mathematics. +However it remains difficult to assess text-based proof questions. +One of the main aims of the project is to address this, by adding features that can not only allow STACK to automate assessment of proof questions but also facilitate new avenues in which both students and authors can interact with and understand mathematical proof.

+

Statistics

+

In recent years STACK has seen broader applications, with it being used by members of the STACK Professionals Network and IDEMS International to write questions for statistics and data science. +Questions in these fields typically require the student to interact with and analyse datasets. +One approach for writing such questions involves randomly generating a dataset which the student can then download. +As datasets grow, such processes understandably lead to system timeouts. +Optimising the STACK codebase so that larger datasets can be processed is key to broadening its usage within statistics and data science.

+

Outcomes

+

The currently released project outcomes of the project include:

+
    +
  1. Release of the first version of the parsons question block in STACK v4.5.0 (Documentation). This question block allows authors to write drag-and-drop proof assessment questions, where students must re-arrange pre-written steps into a correct order. General tools for generating specific line-by-line feedback and assessing non-unique answers are included. An example of the user interface and automated line-by-line feedback are displayed below. Parson's student interface Parson's feedback
  2. +
  3. Release functionality for matching problems as a the second version of the parsons question block in STACK v4.6.0 (Documentation). This block now supports more general layouts involving multiple columns and grids, which allow the student to drag items to specific groups or specific points on a grid. An example of a question in the grid layout is given below. Grid Parson's example
  4. +
  5. Optimisations of the STACK code were released in v4.6.0, details here, which saw processing speeds of up to 274 times faster when generating dummy datasets in a question.
  6. +
+

People

+
    +
  • Sal Mercuri, Knowledge Transfer Associate, The University of Edinburgh & IDEMS International.
  • +
  • Chris Sangwin, Knowledge Base Supervisor, The University of Edinburgh.
  • +
  • Santiago Borio, Company Base Supervisor, IDEMS International.
  • +
+ + + + + +
Innovate UK Logo +
+ + +
+
+ + + + + + + + + + + diff --git a/Projects/index.html b/Projects/index.html new file mode 100644 index 00000000..0411ba8e --- /dev/null +++ b/Projects/index.html @@ -0,0 +1,402 @@ + + + + + + + + + + + + Overview - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Projects

+

This page contains details of projects involving, or based around, STACK.

+
+
+
AuthOMath: Authoring online mathematics tasks
+

May 2021 - Dec 2023

+

The project aims at enabling teachers to create digital online learning material with multimodal, dynamic, and interactive elements, (GeoGebra) and with adaptive automatic feedback for use in hybrid settings.

+
+
+ +
+
+
IDIAM: Interactive digital assessment in mathematics
+

July 2021 - July 2023

+

The project responded to challenges faced during COVID-19 by helping partner institutions use STACK to develop a) digital tools that assess competencies within science, technology, engineering and mathematics (STEM), particularly mathematical sciences +and b) digital assignments within several specific mathematical subjects at the partner institutions.

+
+
+ +
+
+
KTP: Knowledge Transfer Partnership for Digital Mathematics Assessment
+

September 2023 - August 2025

+

The project aims to develop proof-assessment features for STACK as well broaden its applicability within statistics and data science.

+
+
+ + + + +

If you have projects involving STACK, and would like section of this website, please contact the STACK development team.

+ +
+
+ + + + + + + + + + + diff --git a/Training_and_events/index.html b/Training_and_events/index.html new file mode 100644 index 00000000..771217bc --- /dev/null +++ b/Training_and_events/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + Meetings - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Training and Events

+

We regularly host conferences and training workshops for STACK. You can find videos from previous events on our YouTube channel.

+ + +

Upcoming events

+

Here is a list of upcoming events:

+ + + + + + + + + + + + + + + + + + + + + + + +
TitleDateLocationDescription
Discovering AuthOMath8 May 2024University of Cantabria, Santander, Cantabria, SpainThis event will offer insights into innovative teaching approaches and practical applications for secondary and tertiary education mathematics teachers, developed through the AuthOMath project.
OER Design and Use in Mathematics EducationAutumn 2024TTK, TallinnThis is a 5 day, on-site, training in developing OER as part of the Gate2Math Erasmus+ project.
+

Past events

+

During 2020 we ran a series of online workshops, with support from the London Mathematical Society, Universitas 21, and the School of Mathematics at the University of Edinburgh. Details, and recordings, are online..

+

A list of past STACK workshops and conferences:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TitleDateLocationDescription
AuthOMath multiplier event: using GeoGebra in STACK27 March 2024School of Mathematics, University of Edinburgh. OnlineAuthOMath has enabled us to integrate GeoGebra into STACK. This is a practical workshop for users interested in getting started with this new feature.
International Meeting of the STACK Community 202411-13 March 2024Ostbayerische Technische Hochschule (OTH), Amberg-Weiden, GermanyA forum for all STACK users to exchange experiences, ideas and research topics.
Learning Mathematics : digital and interactive03 February 2024Heidelberg University of Education, GermanyThis one day digital conference will highlight the outcomes of of the AuthOMath Erasmus+ project.
African STACK Conference for Undergraduate Mathematics19 - 23 June 2023Masinde Muliro University of Science and Technology, Kakamega, KenyaA conference to enable African educators with experience on STACK to define a roadmap for transformation of African Undergraduate Maths Education
MoodleMoot DACH 202313-16 June 2023ETH Zürich, SwitzerlandA DevCamp and a BarCamp for German-speaking Moodle users, with a special track on STACK. English speakers welcome!
International Meeting of the STACK Community 202324 - 26 April 2023Tallinn, Estonia
stack2023.com
A forum for all STACK users to exchange experiences, ideas and research topics
The 1st Northern e-Assessment Meeting31 May - 2 June 2023Trondheim, Norway
uia.no
An informal conference for people interested in e-Assessment in Mathematical Sciences at higher education level
Using JSX graphs in STACK8 Dec 2022Hybrid event: The University of Edinburgh, James Clerk Maxwell building and onlineThis workshop will provide hands-on practise on how to create JSXGraphs and how to use JSXGraph in STACK assessments.
Using STACK to put the "book inside the quiz"16 Nov 2022Hybrid event: The University of Edinburgh, James Clerk Maxwell building and onlineThis workshop discusses how we have used a metaphore of "putting the book inside automatically assessed online quizzes" in a variety of university mathematics courses.
Mathematics STACK Workshop4th-8th Jul 2022Maseno University, KenyaThe goal of this workshop is to help lecturers prepare the courses they will be teaching at their institutions using STACK. There will be a parallel session on authoring STACK questions.
EAMS 202213 - 24 Jun 2022Online.
eams.ncl.ac.uk
There will be various sessions of interest to STACK users at this conference.
International Meeting of the STACK Community 202224-28 Apr 2022
Leoben, Austria
unileoben.ac.at/stack22
A forum for all STACK users to exchange experiences, ideas and research topics
EAMS 202121 Jun - 2 July 2021Online.
eams.ncl.ac.uk
There will be various sessions of interest to STACK users at this conference.
The 4th International STACK Conference26-29 Apr 2021TTK University of Applied Sciences, Tallinn, Estonia
stack21.edu.ee
Proceedings
This conference aims to act as a forum for the exchange of experience, ideas and research associated with implementing STACK. The target group is academics who teach undergraduate and postgraduate STEM courses in higher education institutions.
EAMS 2020Week of 22 Jun 2020Online.
eams.ncl.ac.uk
There will be various sessions of interest to STACK users at this conference.
The 3rd International STACK Conference27 Apr 2020Online.
3rd International STACK Conference Website
The aim of the conference is to provide a platform for academics, researchers, and scholars, to address common challenges, share knowledge and ideas as well as recent trends and brainstorm creative solutions in the field of STACK.
Putting educational research into practice in HE Mathematics and Statistics teaching29-30 April
2019
The University of Edinburgh, Edinburgh, UK
Putting research into practice conference website
Day 1: Putting educational research into practice in HE Mathematics and Statistics teaching.
Day 2: The 2nd International STACK Conference.
The 1st International STACK Conference15-16 Nov 2018Friedrich-Alexander-Universität Erlangen-Nürnberg, Fürth, Germany
www.stack-konferenz.de
The mission of the Conference is to offer a forum for the STACK Community, to exchange ideas about possibilities and challenges in creating questions, to get closer to solving technical questions and to shape the future of STACK.
+ +
+
+ + + + + + + + + + + diff --git a/WebsiteDocs/WebsiteUpdates/index.html b/WebsiteDocs/WebsiteUpdates/index.html new file mode 100644 index 00000000..e1045f93 --- /dev/null +++ b/WebsiteDocs/WebsiteUpdates/index.html @@ -0,0 +1,519 @@ + + + + + + + + + + + + Updating this website - STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +

Updating this website

+

This guide outlines the process for contributing to the ongoing development of the STACK website. It is not necessarily complete and in some cases it may be useful to find additional tutorials.

+

If you are already confident with git and markdown then the technical details are given in the git README.md file.

+

Basic ideas

+

This website is stored in the git version control system. To update the website you need to

+
    +
  1. Edit the content, largely in markdown.
  2. +
  3. Review and commit your changes.
  4. +
  5. When these changes are "pushed to the master branch" (explained below) then a script automatically builds the live website.
  6. +
+

You can review your proposed changed before you commit them, and a full history of all your commits will be available to everyone. (Drafts which you do not commit remain private to your machine.)

+

If you only need to make a minor update to a single page, e.g. adding confirmed dates to a listed event, then you can edit the files directly on github. This is the simplest way to contribute. All you need is a github account (step 1 below). Any proposed changes you commit will be reviewed by a colleague who has permissions to "push to the master branch", so you will not affect the live website immediately.

+

Git and version control processes are widely documented online. Feel free to search for guides if you'd like a better understanding of version control. Two recommended sources are Roger Dudler's git - the simple guide and GitHub's About Git page.

+

Basic requirements

+

In order to update the website you will need the following:

+
    +
  1. A GitHub account.
  2. +
  3. A code editor. To start with a simple text editor/markdown editor is all that is needed. There are plenty of free and / or open source editors online, a popular choice is Visual Studio Code (VSCode).
  4. +
  5. (Optional but recommended for beginners) A GitHub GUI. There are also plenty of choices, a popular choice is GitHub Desktop. Note that some code editors, e.g. VSCode, include git integration.
  6. +
+ +

This guide is based on using VSCode for code editing and GitHub management. However, other combinations of code editors and GitHub GUIs can be used in similar ways. To set up VSCode you can see this guide or follow the steps below.

+
    +
  1. Create a GitHub account;
  2. +
  3. Install Git;
  4. +
  5. Install VSCode; and +
  6. Install the GitHub Pull Requests and Issues extension. You may be prompted to sign in to GitHub, you can follow the prompts to do so or sign in later on.
  7. +
+ +

The STACK website content is stored in, and built from, the GitHub repository maths/stack-web. Git is used to manage files, and the process for managing files with git is as follows (full details on these are provided below).

+
    +
  • "Fork" the original repository into your own github account so that you can pull (read) and push (write) changes to and from GitHub.
  • +
  • Create a copy you can edit on your local machine by "cloning" your fork.
  • +
  • Edit the copy on your local machine, "commit" these changes, and "push" (write) the commits back to your github account (where you have write permission).
  • +
  • Ask colleagues with permissions in the original the GitHub repository maths/stack-web to accept your changes by sending them a "pull request". The pull request is when you ask them to bring their version up to date with a particular commit from your fork of the repository. (Git will merge any changes, and colleagues with relevant permissions will be responsible for resolving any conflicts caused (rarely) when two people edit the same file!)
  • +
+

This process appears complex! GitHub is a public space where you can store a repository and share it with others. You need an account on a public space when you ask someone else to accept your changes, i.e. when you later send them a "pull request".

+

(More experienced users, who have permission to write direct to the STACK project, might not use their own fork. They might push directly to the original repository. Git is "distributed", so advanced users can share code directly between git repositories without going via public sites like github.)

+

Forking the maths/stack-web repository to create a copy in your github account

+

The practical process of creating a copy of a repository in your own github account is known as "forking" and is done as follows:

+
    +
  1. Log in to Github.
  2. +
  3. Go to the maths/stack-web repository.
  4. +
  5. Click in the Fork button at the top-right of the page: Fork button. This will open the "Create a new fork" page.
  6. +
  7. It is advisable not to change the repository name, otherwise things become confusing. Branches are explained below; to begin we recommend you copy the master branch only by checking the relevant box (you can choose to include branches by unchecking the box and all branches will be copied). Click "Create fork": Create fork button.
  8. +
+

A new repository your-github-username/stack-web will be created and you will be redirected to it. This is your own personal copy of the website files. You have permission to write to this copy and (normally) anyone can read it. This repository is stored online in your personal account.

+

Cloning the repository to create a copy of your personal repository in your local computer

+

The practical process of creating a copy of a repository in your own local computer is known as "cloning". It is recommended to sign in to Github in VSCode at this stage if you haven't yet done so.

+

Signing in to GitHub in VSCode

+

To sign in to GitHub in VSCode follow these steps:

+
    +
  1. Open VSCode.
  2. +
  3. Select the GitHub icon on the side bar: VSCode GitHub sidebar icon.
  4. +
  5. Click "Sign in": VSCode GitHub Sign in button.
  6. +
  7. + Follow the prompts: +
      +
    1. Allow the extension to sign in using GitHub.
    2. +
    3. Log in to your GitHub Account.
    4. +
    5. Select Open VSCode.
    6. +
    7. Open the suggested URL.
    8. +
    9. In the "Terminal" manue, select "New Terminal"
    10. +
    11. With your email address in your GitHub account, run the command git config --global user.email "your-email-address".
    12. +
    13. With your GitHub username, run the command git config --global user.name "your GitHub username".
    14. +
    +
  8. +
+ +

Cloning the repository

+

To clone the repository follow the steps below:

+
    +
  1. Go to your personal copy of the repository: your-github-username/stack-web.
  2. +
  3. Click on the "<> Code" button: Code button.
  4. +
  5. Copy the URL for your repository, https://github.com/your-github-username/stack-web.git, by clicking on the copy button next to it: Copy URL button. A "Copied!" message will temporarily appear.
  6. +
  7. Open VSCode. If you had previously opened another folder or file in VSCode, go to File --> New window.
  8. +
  9. + Click "Clone Git Repository": Clone Git Repository link screenshot. A small window will appear at the top of the screen: +
    +
    + Clone Git Repository Window +
    Figure: Clone Git Repository area in VSCode
    +
    +
    +
  10. +
  11. Paste the copied URL and press 'Enter'.
  12. +
  13. Select the destination where you would like to store the repository.
  14. +
  15. Open the repository.
  16. +
+ +

Update the site as required

+

Modify the website files to make the updates required. Ensure you follow the guidelines outlined in the git README.md file. If you would like to preview your changes you will need to follow the instructions in the Testing the website locally section of the guidelines.

+

Uploading your changes to your personal repository

+

The process of getting the changes saved in your local computer into your online repository (on github) is composed of two stages:

+
    +
  1. committing the changes and
  2. +
  3. pushing the commits to your repository.
  4. +
+

A commit saves the state of one or more files in the git repository in an indentifiable way. It is good practice to commit a small number of changes, preferably on a single topic, at a time and provide a short description. This helps reviewers understand the purpose of your changes. You can push commits as you create them or all together at the end. Each commit will be outlined separately in GitHub.

+

When you save changes to a file or create a new file, a number will appear in the Source Control icon on the side bar: VSCode Source Control sidebar icon. The number represents the number of files changed. Click on the Source Control icon to commit and push your changes as follows:

+
    +
  1. + In the Source Control area, you will see a list of your changes. The figure below shows three files changes, two of them modified (M) and one new file created (U). +
    +
    + Source Control area in VSCode +
    Figure: Source Control area in VSCode
    +
    +
    +
  2. +
  3. Hovering over a file in the list shows options buttons. The '+' button selects a file to the set of files changed to commit and moves it to the Staged Changes area. Only files in the Staged Changes area will be included in a given commit. Select all the files you would like to include in your commit.
  4. +
  5. Commits require a message to describe the changes. Enter a short description in the message area and click the "Commit" button: VSCode Commit button.
  6. +
  7. The commits remain in your local computer until you push them to your repository. To push the changes click on the button with three horizontal dots at the top of the source control area: VSCode Source Control options button, and select "Push". This will update your GitHub repository with the changes you created.
  8. +
+ +

Getting your changes into the website

+

The process to update the website with your changes is done through a "Pull Request". A pull request asks colleagues (with the relevant permissions) to review your changes and "pull" your changes into the main repository. If they accept your request they will "Merge" your changes into the maths/stack-web repository. When changes are merged into the repository, GitHub automatically updates and re-builds the website to include the changes. Creating a pull request is done as follows:

+
    +
  1. Log in to your Github account and open your your-github-username/stack-web repository.
  2. +
  3. Open the Pull requests page from the top: Pull requests button.
  4. +
  5. + Click the "New pull request" button: Pull requests button. This will open the "Comparing changes" page and automatically draft the settings for the pull request, including all your pushed commits. The target (left hand side of the arrow) should be base repository: maths/stack-web and base:master. The source (the right hand side of the arrow) should be head repository: your-github-username/stack-web and compare: master. It should look similar to the following figure, with your username on the greyed-our area instead: +
    +
    + Pull request details +
    Figure: Pull request details
    +
    +
    +
  6. +
  7. Click the "Create pull request" button. This will open the "Open a pull request" page.
  8. +
  9. Review the title of the pull request (this should be automatically populated) and add a description of the pull request in the comment area.
  10. +
  11. Click the "Create pull request button": Create pull request button. This will finish the process and a colleague with relevant permissions will review your pull request and either get back to you or merge it.
  12. +
+ +

Workflow summary

+

The following diagram summarises the steps to update the website:

+
+
+ Website update workflow diagram +
Figure: Website update workflow diagram
+
+
+ +
    +
  1. Fork the maths/stack-web repository to create a copy of it in your own GitHub account.
  2. +
  3. Clone the your-github-username/stack-web repository to get a copy in your local computer.
  4. +
  5. Make and save the changes you would like to propose.
  6. +
  7. Commit your changes to update your repository in your local computer.
  8. +
  9. Push your commits to upload them into your GitHub repository.
  10. +
  11. Create a Pull request to request your changes to be reviewed and accepted by a colleague.
  12. +
+

If others update the website while you are working on your Fork, it is recommended to sync these changes into your repository. This process consists of the following steps (full details will be added to this guide soon):

+
    +
  1. Sync the changes from the maths/stack-web repository into your your-github-username/stack-web repository.
  2. +
  3. Pull the changes into your local computer to keep working with the most up to date version of the website.
  4. +
+

Stay in sync

+

Coming soon...

+ +
+
+ + + + + + + + + + + diff --git a/css/base.css b/css/base.css new file mode 100644 index 00000000..e38b97b9 --- /dev/null +++ b/css/base.css @@ -0,0 +1,178 @@ +html { + scroll-padding-top: 70px; +} + +body { + padding-top: 70px; +} + +ul.nav .main { + font-weight: bold; +} + +.source-links { + float: right; +} + +.col-md-9 img { + max-width: 100%; +} + +pre, code { + background: #e9ecef; + color: #000; + border: 1px solid rgba(0,0,0,0.125); + border-radius: 0.25rem; +} + +pre { + padding: 0.5em; +} + +code { + padding: 1px 3px; +} + +pre code { + border: none; + /* Override styles from hljs theme */ + background: transparent !important; + padding: 0 !important; +} + +a code { + color: #008cba; +} + +a:hover code { + color: #00526e; +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); +} + +footer { + margin-top: 30px; + margin-bottom: 10px; + text-align: center; + font-weight: 200; +} + +.modal-dialog { + margin-top: 60px; +} + +/* + * Side navigation + * + * Scrollspy and affixed enhanced navigation to highlight sections and secondary + * sections of docs content. + */ + +.bs-sidebar.affix { + position: -webkit-sticky; + position: sticky; + top: 80px; +} + +.bs-sidebar.card { + padding: 0; +} + +.bs-sidebar > .card { + background: #e9ecef !important; +} + +/* First level of nav */ +.bs-sidenav { + padding-top: 10px; + padding-bottom: 10px; + border-radius: 5px; + width: 100%; +} + +/* All levels of nav */ +.bs-sidebar .nav > li > a { + display: block; + padding: 5px 20px; + z-index: 1; +} +.bs-sidebar .nav > li > a:hover, +.bs-sidebar .nav > li > a:focus { + text-decoration: none; + border-right: 1px solid; +} +.bs-sidebar .nav > .active > a, +.bs-sidebar .nav > .active:hover > a, +.bs-sidebar .nav > .active:focus > a { + font-weight: bold; + background-color: transparent; + border-right: 1px solid; +} + +/* Nav: second level (shown on .active) */ +.bs-sidebar .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + margin-bottom: 8px; +} +.bs-sidebar .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 30px; + font-size: 90%; +} + + +.headerlink { + display: none; + padding-left: .5em; +} + +h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink, h4:hover .headerlink, h5:hover .headerlink, h6:hover .headerlink{ + display:inline-block; +} + +/* display submenu relative to parent*/ +.dropdown-submenu { + position: relative; +} + +/* sub menu stlye */ +.dropdown-submenu>.dropdown-menu { + top: 0; + left: 100%; + margin-top: 0px; + margin-left: -1px; +} + +/* display sub menu on hover*/ +.dropdown-submenu:hover>.dropdown-menu { + display: block; +} + +/* little arrow */ +.dropdown-submenu>a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #ccc; + margin-top: 5px; + margin-right: -10px; +} + +/* little arrow of parent menu */ +.dropdown-submenu:hover>a:after { + border-left-color: #fff; +} diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css new file mode 100644 index 00000000..8229f0ff --- /dev/null +++ b/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/css/bootstrap.min.css.map b/css/bootstrap.min.css.map new file mode 100644 index 00000000..45f32484 --- /dev/null +++ b/css/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["dist/cerulean/bootstrap.css"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/css/brands.min.css b/css/brands.min.css new file mode 100644 index 00000000..93a9a732 --- /dev/null +++ b/css/brands.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/css/fontawesome.min.css b/css/fontawesome.min.css new file mode 100644 index 00000000..688dd75d --- /dev/null +++ b/css/fontawesome.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/css/solid.min.css b/css/solid.min.css new file mode 100644 index 00000000..7e1fb2d4 --- /dev/null +++ b/css/solid.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} \ No newline at end of file diff --git a/css/v4-font-face.min.css b/css/v4-font-face.min.css new file mode 100644 index 00000000..dadd6c56 --- /dev/null +++ b/css/v4-font-face.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/custom.css b/custom.css new file mode 100644 index 00000000..4d750c5a --- /dev/null +++ b/custom.css @@ -0,0 +1,327 @@ + +/* Styles for images. */ +.img-tall { + height: auto; + width: auto; + max-width: 600px; + padding: 15px; +} + +.img-wide { + max-width:100%; + height:auto; + padding: 15px; +} + +.img-middle { + max-width:700px; + height:auto; + width:auto; + padding:15px; + margin-left:auto; + margin-right:auto; +} + +.img-screenshot { + max-width:400px; + height:auto; + width:auto; + padding:15px; + margin-left:auto; + margin-right:auto; +} + + +.img-logo { + padding:15px; + max-height:100px; + max-width:300px; +} + +.img-logo-large { + padding:15px; + max-height:150px; + max-width:250px; +} + +.img-person { + padding:15px; + height:200px; +} + +<<<<<<< HEAD +======= +/*Class to restict height of in-line images*/ +.img-in-line-short { + height:28px; +} + +/* Fix internet explorer card issue. */ +>>>>>>> master +.card-img-top { + width: 100%; +} + +div.bodyColumn { + max-width:300px; + margin: auto; +} + +/* Ensure rows align left and do not exceed page width. */ +div.row { + max-width:1000px; + margin: auto; +} + +/* Set table settings. */ +table { + table-layout: fixed; + width: 1000px; +} +/* Override default stripe style. */ +.table tbody tr:nth-of-type(odd) { + background-color: rgba(0,0,0,0);} +.table tbody tr:nth-of-type(even):hover { + background-color: rgba(0,0,0,0);} + +/* Make tables responsive by collapsing on small screens. */ +@media screen and (max-width: 800px) { + table { + border: 0; + } + + table thead { + border: none; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + } + + table tr { + display: block; + margin-bottom: .625em; + border-top: 2px solid #dee2e6; + } + + table td { + display: block; + text-align: left; + border-top: 0 !important; + } + + table tr:last-child { + border-bottom: 2px solid #dee2e6; + } +} + +/*. Make navigation bar responsive by scrolling on small screens. */ +@media (max-width:991.98px){ + .navbar{ + overflow-y: auto; + max-height:100%; + } +} + + +/* Speech bubbles by https://codingislove.com/css-speech-bubbles/ */ +.box { + width: 300px; + margin: 50px auto; + background: #dcdcdc; + padding: 20px; + text-align: center; +} + +.sb3:before { + content: ""; + width: 0px; + height: 0px; + position: absolute; + border-left: 10px solid #dcdcdc; + border-right: 10px solid transparent; + border-top: 10px solid #dcdcdc; + border-bottom: 10px solid transparent; + left: 19px; + bottom: -19px; +} + +/* Styles for converting tables into divs. */ +/* DivTable.com */ +.divTable{ + display: table; + width: 100%; +} +.divTableRow { + display: table-row; +} +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} +.divTableCell, .divTableHead { + border: 1px solid #999999; + display: table-cell; + padding: 3px 10px; +} +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} +.divTableBody { + display: table-row-group; +} + +/* Add check mark style. */ + +ul.check { + list-style: none; + padding: 0; +} + +ul.check li:before { + content:''; + display:inline-block; + height:1em; + width:1em; + background-image:url('https://stack-assessment.org/img/check.svg'); + background-size:20px; + background-repeat:no-repeat; + padding-left: 2em; +} + +/* Give buttons some margins. */ +.btn{ + margin:10px; +} + +/* Trees: https://codepen.io/ross-angus/pen/jwxMjL +Copyright (c) 2022 by Ross Angus (https://codepen.io/ross-angus/pen/jwxMjL) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* It's supposed to look like a tree diagram. */ +.tree, +.tree ul, +.tree li { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} + +.tree { + margin: 0 0 1em; + text-align: center; +} +.tree, +.tree ul { + display: table; +} +.tree ul { + width: 100%; +} +.tree li { + display: table-cell; + padding: .5em 0; + vertical-align: top; +} +/* _________ */ +.tree li:before { + outline: solid 1px #666; + content: ""; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tree li:first-child:before { + left: 50%; +} +.tree li:last-child:before { + right: 50%; +} +.tree span.atom, +.tree span.op, +.tree span.cell, +.tree code { + border: solid .1em #666; + border-radius: .2em; + display: inline-block; + margin: 0 .2em .5em; + padding: .2em .5em; + position: relative; +} +/* If the tree represents DOM structure. */ +.tree span.atom { + border-radius: .5em; + color: DarkRed; + background-color: LightCyan; +} +.tree code, +.tree span.op { + border-radius: .2em; + color: Red; + background-color: LemonChiffon; +} +/* | */ +.tree ul:before, +.tree span.atom:before, +.tree span.op:before, +.tree span.cell:before, +.tree code:before { + outline: solid 1px #666; + content: ""; + height: .5em; + left: 50%; + position: absolute; +} +.tree ul:before { + top: -.5em; +} +.tree span.atom:before, +.tree span.op:before, +.tree span.cell:before, +.tree code:before { + top: -.55em; +} +/* The root node doesn't connect upwards. */ +.tree > li { + margin-top: 0; +} +.tree > li:before, +.tree > li:after, +.tree > li > span.atom:before, +.tree > li > span.op:before, +.tree > li > span.cell:before, +.tree > li > code:before { + outline: none; +} + +.dropdown-item.open{ + background-color: #f8f9fa; +} diff --git a/img/CATE.png b/img/CATE.png new file mode 100644 index 00000000..c55f3ab9 Binary files /dev/null and b/img/CATE.png differ diff --git a/img/ILIAS_web.png b/img/ILIAS_web.png new file mode 100644 index 00000000..ba682a07 Binary files /dev/null and b/img/ILIAS_web.png differ diff --git a/img/STACK-screenshot.png b/img/STACK-screenshot.png new file mode 100644 index 00000000..132c6e5a Binary files /dev/null and b/img/STACK-screenshot.png differ diff --git a/img/a.svg b/img/a.svg new file mode 100644 index 00000000..4787cfc5 --- /dev/null +++ b/img/a.svg @@ -0,0 +1,9 @@ + + +a) \ No newline at end of file diff --git a/img/a2.svg b/img/a2.svg new file mode 100644 index 00000000..d6fba486 --- /dev/null +++ b/img/a2.svg @@ -0,0 +1,9 @@ + + +a) \ No newline at end of file diff --git a/img/about_prt.png b/img/about_prt.png new file mode 100644 index 00000000..7827e23e Binary files /dev/null and b/img/about_prt.png differ diff --git a/img/about_random.png b/img/about_random.png new file mode 100644 index 00000000..75f63c82 Binary files /dev/null and b/img/about_random.png differ diff --git a/img/about_random_compact.png b/img/about_random_compact.png new file mode 100644 index 00000000..f360b50f Binary files /dev/null and b/img/about_random_compact.png differ diff --git a/img/about_validation.png b/img/about_validation.png new file mode 100644 index 00000000..5cfdeff2 Binary files /dev/null and b/img/about_validation.png differ diff --git a/img/apple.svg b/img/apple.svg new file mode 100644 index 00000000..15e51a63 --- /dev/null +++ b/img/apple.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/bdu-logo.jpg b/img/bdu-logo.jpg new file mode 100644 index 00000000..0c552f59 Binary files /dev/null and b/img/bdu-logo.jpg differ diff --git a/img/book.svg b/img/book.svg new file mode 100644 index 00000000..cf6db43f --- /dev/null +++ b/img/book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/calculator.svg b/img/calculator.svg new file mode 100644 index 00000000..9680bdd8 --- /dev/null +++ b/img/calculator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/cea-logo.jpg b/img/cea-logo.jpg new file mode 100644 index 00000000..26a0733f Binary files /dev/null and b/img/cea-logo.jpg differ diff --git a/img/check.svg b/img/check.svg new file mode 100644 index 00000000..43a75f0a --- /dev/null +++ b/img/check.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/img/chris.jfif b/img/chris.jfif new file mode 100644 index 00000000..af922ef1 Binary files /dev/null and b/img/chris.jfif differ diff --git a/img/clock.svg b/img/clock.svg new file mode 100644 index 00000000..8f5bd686 --- /dev/null +++ b/img/clock.svg @@ -0,0 +1 @@ +Shape + Shape \ No newline at end of file diff --git a/img/cloud.svg b/img/cloud.svg new file mode 100644 index 00000000..323d40cb --- /dev/null +++ b/img/cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/cnrs-logo.png b/img/cnrs-logo.png new file mode 100644 index 00000000..def45271 Binary files /dev/null and b/img/cnrs-logo.png differ diff --git a/img/cross.svg b/img/cross.svg new file mode 100644 index 00000000..0cfb3858 --- /dev/null +++ b/img/cross.svg @@ -0,0 +1 @@ +Shape + Shape \ No newline at end of file diff --git a/img/developer.svg b/img/developer.svg new file mode 100644 index 00000000..768b1324 --- /dev/null +++ b/img/developer.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/dice.svg b/img/dice.svg new file mode 100644 index 00000000..39c7ed94 --- /dev/null +++ b/img/dice.svg @@ -0,0 +1,52 @@ + + + + +image/svg+xmlOpenclipart diff --git a/img/docs/clone_git_repository_link.png b/img/docs/clone_git_repository_link.png new file mode 100644 index 00000000..d098ceab Binary files /dev/null and b/img/docs/clone_git_repository_link.png differ diff --git a/img/docs/code_button.png b/img/docs/code_button.png new file mode 100644 index 00000000..5ec1ef03 Binary files /dev/null and b/img/docs/code_button.png differ diff --git a/img/docs/copy_url_button.png b/img/docs/copy_url_button.png new file mode 100644 index 00000000..fb02e55f Binary files /dev/null and b/img/docs/copy_url_button.png differ diff --git a/img/docs/create_fork_button.png b/img/docs/create_fork_button.png new file mode 100644 index 00000000..b7023961 Binary files /dev/null and b/img/docs/create_fork_button.png differ diff --git a/img/docs/create_pull_requests_button.png b/img/docs/create_pull_requests_button.png new file mode 100644 index 00000000..ed10132f Binary files /dev/null and b/img/docs/create_pull_requests_button.png differ diff --git a/img/docs/fork_button.png b/img/docs/fork_button.png new file mode 100644 index 00000000..2084e7c1 Binary files /dev/null and b/img/docs/fork_button.png differ diff --git a/img/docs/new_pull_requests_button.png b/img/docs/new_pull_requests_button.png new file mode 100644 index 00000000..b58e1046 Binary files /dev/null and b/img/docs/new_pull_requests_button.png differ diff --git a/img/docs/pull_request_details.png b/img/docs/pull_request_details.png new file mode 100644 index 00000000..9c900e99 Binary files /dev/null and b/img/docs/pull_request_details.png differ diff --git a/img/docs/pull_requests_button.png b/img/docs/pull_requests_button.png new file mode 100644 index 00000000..ba7fc436 Binary files /dev/null and b/img/docs/pull_requests_button.png differ diff --git a/img/docs/vscode_clone_area.png b/img/docs/vscode_clone_area.png new file mode 100644 index 00000000..62218754 Binary files /dev/null and b/img/docs/vscode_clone_area.png differ diff --git a/img/docs/vscode_commit_button.png b/img/docs/vscode_commit_button.png new file mode 100644 index 00000000..ea773007 Binary files /dev/null and b/img/docs/vscode_commit_button.png differ diff --git a/img/docs/vscode_github_sidebar_icon.png b/img/docs/vscode_github_sidebar_icon.png new file mode 100644 index 00000000..427a0f10 Binary files /dev/null and b/img/docs/vscode_github_sidebar_icon.png differ diff --git a/img/docs/vscode_github_signin_button.png b/img/docs/vscode_github_signin_button.png new file mode 100644 index 00000000..ab38788f Binary files /dev/null and b/img/docs/vscode_github_signin_button.png differ diff --git a/img/docs/vscode_source_control_area.png b/img/docs/vscode_source_control_area.png new file mode 100644 index 00000000..5cfc386b Binary files /dev/null and b/img/docs/vscode_source_control_area.png differ diff --git a/img/docs/vscode_source_control_options.png b/img/docs/vscode_source_control_options.png new file mode 100644 index 00000000..35d25463 Binary files /dev/null and b/img/docs/vscode_source_control_options.png differ diff --git a/img/docs/vscode_source_control_sidebar_icon.png b/img/docs/vscode_source_control_sidebar_icon.png new file mode 100644 index 00000000..55353b46 Binary files /dev/null and b/img/docs/vscode_source_control_sidebar_icon.png differ diff --git a/img/docs/website_update_workflow.jpg b/img/docs/website_update_workflow.jpg new file mode 100644 index 00000000..1b34ad76 Binary files /dev/null and b/img/docs/website_update_workflow.jpg differ diff --git a/img/ems-logo.jpg b/img/ems-logo.jpg new file mode 100644 index 00000000..058e57ee Binary files /dev/null and b/img/ems-logo.jpg differ diff --git a/img/erc-logo.png b/img/erc-logo.png new file mode 100644 index 00000000..7ba0ff7c Binary files /dev/null and b/img/erc-logo.png differ diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 00000000..2b71ffed Binary files /dev/null and b/img/favicon.ico differ diff --git a/img/fsn-logo.gif b/img/fsn-logo.gif new file mode 100644 index 00000000..4cf4a756 Binary files /dev/null and b/img/fsn-logo.gif differ diff --git a/img/gear.svg b/img/gear.svg new file mode 100644 index 00000000..72ac5e20 --- /dev/null +++ b/img/gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/geneva-university-logo.png b/img/geneva-university-logo.png new file mode 100644 index 00000000..e9d504d7 Binary files /dev/null and b/img/geneva-university-logo.png differ diff --git a/img/grid.png b/img/grid.png new file mode 100644 index 00000000..878c3ed5 Binary files /dev/null and b/img/grid.png differ diff --git a/img/human_head.svg b/img/human_head.svg new file mode 100644 index 00000000..c1ae1a80 --- /dev/null +++ b/img/human_head.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/idems-logo.png b/img/idems-logo.png new file mode 100644 index 00000000..34ca76da Binary files /dev/null and b/img/idems-logo.png differ diff --git a/img/img_sm.png b/img/img_sm.png new file mode 100644 index 00000000..946dae07 Binary files /dev/null and b/img/img_sm.png differ diff --git a/img/innodems-logo.jpg b/img/innodems-logo.jpg new file mode 100644 index 00000000..5d05569f Binary files /dev/null and b/img/innodems-logo.jpg differ diff --git a/img/ipht-logo.png b/img/ipht-logo.png new file mode 100644 index 00000000..1d8e5b00 Binary files /dev/null and b/img/ipht-logo.png differ diff --git a/img/key.svg b/img/key.svg new file mode 100644 index 00000000..93602955 --- /dev/null +++ b/img/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/kms-logo.jpg b/img/kms-logo.jpg new file mode 100644 index 00000000..6779291b Binary files /dev/null and b/img/kms-logo.jpg differ diff --git a/img/lms-logo-blue.png b/img/lms-logo-blue.png new file mode 100644 index 00000000..b61640b4 Binary files /dev/null and b/img/lms-logo-blue.png differ diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 00000000..2a3d1637 Binary files /dev/null and b/img/logo.png differ diff --git a/img/logo_large.png b/img/logo_large.png new file mode 100644 index 00000000..1981cebe Binary files /dev/null and b/img/logo_large.png differ diff --git a/img/magnify.svg b/img/magnify.svg new file mode 100644 index 00000000..47edea22 --- /dev/null +++ b/img/magnify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/maseno-logo.png b/img/maseno-logo.png new file mode 100644 index 00000000..c71a0ef8 Binary files /dev/null and b/img/maseno-logo.png differ diff --git a/img/math.svg b/img/math.svg new file mode 100644 index 00000000..ccae8a2b --- /dev/null +++ b/img/math.svg @@ -0,0 +1,131 @@ + + + + + + image/svg+xml + + + + + + + x + + 2 + + + + X + 2 + + + diff --git a/img/mmust-logo.jpg b/img/mmust-logo.jpg new file mode 100644 index 00000000..31eb4361 Binary files /dev/null and b/img/mmust-logo.jpg differ diff --git a/img/moodle_white.png b/img/moodle_white.png new file mode 100644 index 00000000..b700f167 Binary files /dev/null and b/img/moodle_white.png differ diff --git a/img/pdf.png b/img/pdf.png new file mode 100644 index 00000000..92a0a270 Binary files /dev/null and b/img/pdf.png differ diff --git a/img/people/Abdu-Mohammed-Seid.JPG b/img/people/Abdu-Mohammed-Seid.JPG new file mode 100644 index 00000000..aa1774af Binary files /dev/null and b/img/people/Abdu-Mohammed-Seid.JPG differ diff --git a/img/people/Alex-Fowler.jpg b/img/people/Alex-Fowler.jpg new file mode 100644 index 00000000..a1748ca8 Binary files /dev/null and b/img/people/Alex-Fowler.jpg differ diff --git a/img/people/Andreas-Steiger.jpg b/img/people/Andreas-Steiger.jpg new file mode 100644 index 00000000..7d40da96 Binary files /dev/null and b/img/people/Andreas-Steiger.jpg differ diff --git a/img/people/Annette-Wakaanya-Okoth.jpg b/img/people/Annette-Wakaanya-Okoth.jpg new file mode 100644 index 00000000..08f4aa7c Binary files /dev/null and b/img/people/Annette-Wakaanya-Okoth.jpg differ diff --git a/img/people/Antti-Rasila.jpg b/img/people/Antti-Rasila.jpg new file mode 100644 index 00000000..1f3f896a Binary files /dev/null and b/img/people/Antti-Rasila.jpg differ diff --git a/img/people/Anu_phpto.jpg b/img/people/Anu_phpto.jpg new file mode 100644 index 00000000..eba1657e Binary files /dev/null and b/img/people/Anu_phpto.jpg differ diff --git a/img/people/Beth-Kiratu.jpg b/img/people/Beth-Kiratu.jpg new file mode 100644 index 00000000..8b61c1fa Binary files /dev/null and b/img/people/Beth-Kiratu.jpg differ diff --git a/img/people/ChrisNelson.jpg b/img/people/ChrisNelson.jpg new file mode 100644 index 00000000..c7a49ae6 Binary files /dev/null and b/img/people/ChrisNelson.jpg differ diff --git a/img/people/David-Stern.jpg b/img/people/David-Stern.jpg new file mode 100644 index 00000000..03c8d227 Binary files /dev/null and b/img/people/David-Stern.jpg differ diff --git a/img/people/Dechant-Herrera-Katja.jpg b/img/people/Dechant-Herrera-Katja.jpg new file mode 100644 index 00000000..c450ea59 Binary files /dev/null and b/img/people/Dechant-Herrera-Katja.jpg differ diff --git a/img/people/Edmund-Farrow.jpg b/img/people/Edmund-Farrow.jpg new file mode 100644 index 00000000..095deb2f Binary files /dev/null and b/img/people/Edmund-Farrow.jpg differ diff --git a/img/people/Georg-Osang.jpg b/img/people/Georg-Osang.jpg new file mode 100644 index 00000000..9500916c Binary files /dev/null and b/img/people/Georg-Osang.jpg differ diff --git a/img/people/George-Ionita.jpg b/img/people/George-Ionita.jpg new file mode 100644 index 00000000..9a34b090 Binary files /dev/null and b/img/people/George-Ionita.jpg differ diff --git a/img/people/George-Lawi.jpg b/img/people/George-Lawi.jpg new file mode 100644 index 00000000..78bdd21f Binary files /dev/null and b/img/people/George-Lawi.jpg differ diff --git a/img/people/Heidrikje-Schmidtpott.png b/img/people/Heidrikje-Schmidtpott.png new file mode 100644 index 00000000..17de3b04 Binary files /dev/null and b/img/people/Heidrikje-Schmidtpott.png differ diff --git a/img/people/Herine-Otieno.jpg b/img/people/Herine-Otieno.jpg new file mode 100644 index 00000000..9e444d1d Binary files /dev/null and b/img/people/Herine-Otieno.jpg differ diff --git a/img/people/Ian-Jones.jpg b/img/people/Ian-Jones.jpg new file mode 100644 index 00000000..1732993f Binary files /dev/null and b/img/people/Ian-Jones.jpg differ diff --git a/img/people/Idrissa-Said-Amour.jpg b/img/people/Idrissa-Said-Amour.jpg new file mode 100644 index 00000000..24664fe9 Binary files /dev/null and b/img/people/Idrissa-Said-Amour.jpg differ diff --git a/img/people/James-Kaleli-Musyoka.jpg b/img/people/James-Kaleli-Musyoka.jpg new file mode 100644 index 00000000..a0f784dd Binary files /dev/null and b/img/people/James-Kaleli-Musyoka.jpg differ diff --git a/img/people/Jared-Ongaro.jpg b/img/people/Jared-Ongaro.jpg new file mode 100644 index 00000000..6c31585d Binary files /dev/null and b/img/people/Jared-Ongaro.jpg differ diff --git a/img/people/Jesus-Copado.jpg b/img/people/Jesus-Copado.jpg new file mode 100644 index 00000000..64e1948f Binary files /dev/null and b/img/people/Jesus-Copado.jpg differ diff --git a/img/people/Jonas-Lache.jpg b/img/people/Jonas-Lache.jpg new file mode 100644 index 00000000..6b255526 Binary files /dev/null and b/img/people/Jonas-Lache.jpg differ diff --git a/img/people/Juma-Zevick.jpg b/img/people/Juma-Zevick.jpg new file mode 100644 index 00000000..d459cb11 Binary files /dev/null and b/img/people/Juma-Zevick.jpg differ diff --git a/img/people/Kinga-Sipos.jpeg b/img/people/Kinga-Sipos.jpeg new file mode 100644 index 00000000..362b0c27 Binary files /dev/null and b/img/people/Kinga-Sipos.jpeg differ diff --git a/img/people/Konstantina-Zerva.jpg b/img/people/Konstantina-Zerva.jpg new file mode 100644 index 00000000..5a906ec8 Binary files /dev/null and b/img/people/Konstantina-Zerva.jpg differ diff --git a/img/people/Luke-Longworth.jpg b/img/people/Luke-Longworth.jpg new file mode 100644 index 00000000..b1a9d939 Binary files /dev/null and b/img/people/Luke-Longworth.jpg differ diff --git a/img/people/Maciej-Matuszewski.jpg b/img/people/Maciej-Matuszewski.jpg new file mode 100644 index 00000000..962d1254 Binary files /dev/null and b/img/people/Maciej-Matuszewski.jpg differ diff --git a/img/people/Markus-Orthaber.jpg b/img/people/Markus-Orthaber.jpg new file mode 100644 index 00000000..5feb5f30 Binary files /dev/null and b/img/people/Markus-Orthaber.jpg differ diff --git a/img/people/Martin-Mugochi.jpg b/img/people/Martin-Mugochi.jpg new file mode 100644 index 00000000..8b5febf8 Binary files /dev/null and b/img/people/Martin-Mugochi.jpg differ diff --git a/img/people/Mary-Achieng.jpg b/img/people/Mary-Achieng.jpg new file mode 100644 index 00000000..a96de13e Binary files /dev/null and b/img/people/Mary-Achieng.jpg differ diff --git a/img/people/Meike-Akveld.jpg b/img/people/Meike-Akveld.jpg new file mode 100644 index 00000000..3d964736 Binary files /dev/null and b/img/people/Meike-Akveld.jpg differ diff --git a/img/people/Michael-Crocco.jpg b/img/people/Michael-Crocco.jpg new file mode 100644 index 00000000..b4553b4b Binary files /dev/null and b/img/people/Michael-Crocco.jpg differ diff --git a/img/people/Michael_Kallweit.jpg b/img/people/Michael_Kallweit.jpg new file mode 100644 index 00000000..7621fa19 Binary files /dev/null and b/img/people/Michael_Kallweit.jpg differ diff --git a/img/people/Mike-Obiero.jpg b/img/people/Mike-Obiero.jpg new file mode 100644 index 00000000..76e589de Binary files /dev/null and b/img/people/Mike-Obiero.jpg differ diff --git a/img/people/Morten-Brekke.jpg b/img/people/Morten-Brekke.jpg new file mode 100644 index 00000000..25803726 Binary files /dev/null and b/img/people/Morten-Brekke.jpg differ diff --git a/img/people/Motognon-Wastalas-Dogbalou.jpg b/img/people/Motognon-Wastalas-Dogbalou.jpg new file mode 100644 index 00000000..7555e1be Binary files /dev/null and b/img/people/Motognon-Wastalas-Dogbalou.jpg differ diff --git a/img/people/Oksana-Labanova.jpg b/img/people/Oksana-Labanova.jpg new file mode 100644 index 00000000..7828c667 Binary files /dev/null and b/img/people/Oksana-Labanova.jpg differ diff --git a/img/people/Oleg-Boruch.jpg b/img/people/Oleg-Boruch.jpg new file mode 100644 index 00000000..42260de2 Binary files /dev/null and b/img/people/Oleg-Boruch.jpg differ diff --git a/img/people/Ruth-Reynolds.jpg b/img/people/Ruth-Reynolds.jpg new file mode 100644 index 00000000..bc4b37dd Binary files /dev/null and b/img/people/Ruth-Reynolds.jpg differ diff --git a/img/people/Sal-Mercuri.JPG b/img/people/Sal-Mercuri.JPG new file mode 100644 index 00000000..8d18ed5d Binary files /dev/null and b/img/people/Sal-Mercuri.JPG differ diff --git a/img/people/Sam-Fearn.jpg b/img/people/Sam-Fearn.jpg new file mode 100644 index 00000000..ef25b174 Binary files /dev/null and b/img/people/Sam-Fearn.jpg differ diff --git a/img/people/Santiago-Borio.jpg b/img/people/Santiago-Borio.jpg new file mode 100644 index 00000000..4ad30788 Binary files /dev/null and b/img/people/Santiago-Borio.jpg differ diff --git a/img/people/Speedy-Jiang.jpg b/img/people/Speedy-Jiang.jpg new file mode 100644 index 00000000..08620262 Binary files /dev/null and b/img/people/Speedy-Jiang.jpg differ diff --git a/img/people/Stefanie-Zegowit.jpg b/img/people/Stefanie-Zegowit.jpg new file mode 100644 index 00000000..5f5ada6b Binary files /dev/null and b/img/people/Stefanie-Zegowit.jpg differ diff --git a/img/people/Stephen-Nulty.jpg b/img/people/Stephen-Nulty.jpg new file mode 100644 index 00000000..a3e2f533 Binary files /dev/null and b/img/people/Stephen-Nulty.jpg differ diff --git a/img/people/Tim-Lowe.jpg b/img/people/Tim-Lowe.jpg new file mode 100644 index 00000000..0c17c63c Binary files /dev/null and b/img/people/Tim-Lowe.jpg differ diff --git a/img/people/Weinmann-Michael.jpg b/img/people/Weinmann-Michael.jpg new file mode 100644 index 00000000..5465636e Binary files /dev/null and b/img/people/Weinmann-Michael.jpg differ diff --git a/img/people/Wigand-Rathmann.png b/img/people/Wigand-Rathmann.png new file mode 100644 index 00000000..9b4d6522 Binary files /dev/null and b/img/people/Wigand-Rathmann.png differ diff --git a/img/people/chris.png b/img/people/chris.png new file mode 100644 index 00000000..846fc9ed Binary files /dev/null and b/img/people/chris.png differ diff --git a/img/people/matti.jpg b/img/people/matti.jpg new file mode 100644 index 00000000..3aec4de0 Binary files /dev/null and b/img/people/matti.jpg differ diff --git a/img/people/tim.jpg b/img/people/tim.jpg new file mode 100644 index 00000000..9c34874c Binary files /dev/null and b/img/people/tim.jpg differ diff --git a/img/play.png b/img/play.png new file mode 100644 index 00000000..df428157 Binary files /dev/null and b/img/play.png differ diff --git a/img/plus.svg b/img/plus.svg new file mode 100644 index 00000000..52619d87 --- /dev/null +++ b/img/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/question.svg b/img/question.svg new file mode 100644 index 00000000..f63c542e --- /dev/null +++ b/img/question.svg @@ -0,0 +1,9 @@ + + +? \ No newline at end of file diff --git a/img/sami-logo.png b/img/sami-logo.png new file mode 100644 index 00000000..5a5f5182 Binary files /dev/null and b/img/sami-logo.png differ diff --git a/img/site_admin.svg b/img/site_admin.svg new file mode 100644 index 00000000..0fd9e3a7 --- /dev/null +++ b/img/site_admin.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/speech.svg b/img/speech.svg new file mode 100644 index 00000000..2e3d3cfc --- /dev/null +++ b/img/speech.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/stack_example.PNG b/img/stack_example.PNG new file mode 100644 index 00000000..bb845d07 Binary files /dev/null and b/img/stack_example.PNG differ diff --git a/img/student.svg b/img/student.svg new file mode 100644 index 00000000..9337b109 --- /dev/null +++ b/img/student.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/student_book.svg b/img/student_book.svg new file mode 100644 index 00000000..018efe90 --- /dev/null +++ b/img/student_book.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/student_old.svg b/img/student_old.svg new file mode 100644 index 00000000..624a411a --- /dev/null +++ b/img/student_old.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/img/teacher.svg b/img/teacher.svg new file mode 100644 index 00000000..feaba9a1 --- /dev/null +++ b/img/teacher.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/tuk-logo.png b/img/tuk-logo.png new file mode 100644 index 00000000..13a945a3 Binary files /dev/null and b/img/tuk-logo.png differ diff --git a/img/u21_logo_dark.svg b/img/u21_logo_dark.svg new file mode 100644 index 00000000..4e4598db --- /dev/null +++ b/img/u21_logo_dark.svg @@ -0,0 +1,149 @@ + + + + + + image/svg+xml + + + + + + + Group + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/uoe_som.png b/img/uoe_som.png new file mode 100644 index 00000000..23feb0b4 Binary files /dev/null and b/img/uoe_som.png differ diff --git a/img/watch.svg b/img/watch.svg new file mode 100644 index 00000000..75e64c69 --- /dev/null +++ b/img/watch.svg @@ -0,0 +1 @@ +Group \ No newline at end of file diff --git a/img/youtube_logo.png b/img/youtube_logo.png new file mode 100644 index 00000000..165e04b5 Binary files /dev/null and b/img/youtube_logo.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..e5be9ff8 --- /dev/null +++ b/index.html @@ -0,0 +1,437 @@ + + + + + + + + + + + + STACK + + + + + + + + + + + + + + + + + + +
+
+
+ +
+

STACK | Online assessment

+

STACK is the world-leading open-source online assessment system for mathematics and STEM. It is available for Moodle, ILIAS and as an integration through LTI.

+
+
+

+

Why use STACK?

+ +
+
+
+
Math
+
+

Algebraic answers

+

Students can answer with algebraic expressions, like \(x^2+y\), and answers are graded based on mathematical properties.

+
+
+
Gear

+

Separate validation and assessment

+

Answers are validated before they are marked, so students are not penalised for poor programming skills.

+
+
+
Thinking person

+

Specific feedback

+

Students are given feedback that refers to their specific answer and mistake, as if marked by hand.

+
+
+
+
+
Die

+

Randomisation

+

STACK can generate random questions so students are shown different variants of questions, and can repeat quizzes with new variants.

+
+
+
Speech bubble

+

Language support

+

STACK is available in most European languages and many more, including Hebrew and Japanese.

+
+
+
Key

+

Open-source

+

STACK is free to use and is developed by educators like yourself. Contributions are welcomed and encouraged.

+
+
+
+
Learn more    Get Started +
+ +
+
+
+

Who uses STACK?

+

STACK is used by universities, commercial partners, developers and more, in over 15 countries. To read about the many ways STACK is used around the world, please visit our Case Studies page. +

+
+
+
+
+

Training and Events

+

We host regular training workshops and a yearly international STACK conference. To sign up for one of our future events, or see materials from our past events, go to our Training and Events page.

+ +
+
+
+
+

Documentation

+

STACK has extensive documentation available locally through GitHub and online. To get started, see the Authoring quick start or the self-contained "Getting started with STACK" guide.

+ +
+
+
+ +
+
+ + + + + + + + + + + + + diff --git a/js/base.js b/js/base.js new file mode 100644 index 00000000..9b6e7acf --- /dev/null +++ b/js/base.js @@ -0,0 +1,283 @@ +function getSearchTerm() { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') { + return sParameterName[1]; + } + } +} + +function applyTopPadding() { + // Update various absolute positions to match where the main container + // starts. This is necessary for handling multi-line nav headers, since + // that pushes the main container down. + var offset = $('body > .container').offset(); + $('html').css('scroll-padding-top', offset.top + 'px'); + $('.bs-sidebar.affix').css('top', offset.top + 'px'); +} + +$(document).ready(function() { + + applyTopPadding(); + + var search_term = getSearchTerm(), + $search_modal = $('#mkdocs_search_modal'), + $keyboard_modal = $('#mkdocs_keyboard_modal'); + + if (search_term) { + $search_modal.modal(); + } + + // make sure search input gets autofocus every time modal opens. + $search_modal.on('shown.bs.modal', function() { + $search_modal.find('#mkdocs-search-query').focus(); + }); + + // Close search modal when result is selected + // The links get added later so listen to parent + $('#mkdocs-search-results').click(function(e) { + if ($(e.target).is('a')) { + $search_modal.modal('hide'); + } + }); + + // Populate keyboard modal with proper Keys + $keyboard_modal.find('.help.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.help]; + $keyboard_modal.find('.prev.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.previous]; + $keyboard_modal.find('.next.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.next]; + $keyboard_modal.find('.search.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.search]; + + // Keyboard navigation + document.addEventListener("keydown", function(e) { + if ($(e.target).is(':input')) return true; + var key = e.which || e.keyCode || window.event && window.event.keyCode; + var page; + switch (key) { + case shortcuts.next: + page = $('.navbar a[rel="next"]:first').prop('href'); + break; + case shortcuts.previous: + page = $('.navbar a[rel="prev"]:first').prop('href'); + break; + case shortcuts.search: + e.preventDefault(); + $keyboard_modal.modal('hide'); + $search_modal.modal('show'); + $search_modal.find('#mkdocs-search-query').focus(); + break; + case shortcuts.help: + $search_modal.modal('hide'); + $keyboard_modal.modal('show'); + break; + default: break; + } + if (page) { + $keyboard_modal.modal('hide'); + window.location.href = page; + } + }); + + $('table').addClass('table table-striped table-hover'); + + // Improve the scrollspy behaviour when users click on a TOC item. + $(".bs-sidenav a").on("click", function() { + var clicked = this; + setTimeout(function() { + var active = $('.nav li.active a'); + active = active[active.length - 1]; + if (clicked !== active) { + $(active).parent().removeClass("active"); + $(clicked).parent().addClass("active"); + } + }, 50); + }); + + function showInnerDropdown(item) { + var popup = $(item).next('.dropdown-menu'); + popup.addClass('show'); + $(item).addClass('open'); + + // First, close any sibling dropdowns. + var container = $(item).parent().parent(); + container.find('> .dropdown-submenu > a','> .dropdown-submenu-nohover > a').each(function(i, el) { + if (el !== item) { + hideInnerDropdown(el); + } + }); + + var popupMargin = 10; + var maxBottom = $(window).height() - popupMargin; + var bounds = item.getBoundingClientRect(); + // popup.css('left', bounds.right + 'px'); +// if (bounds.top + popup.height() > maxBottom && +// bounds.top > $(window).height() / 2) { +// popup.css({ +// 'top': (bounds.bottom - popup.height()) + 'px', +// 'max-height': (bounds.bottom - popupMargin) + 'px', +// }); +// } else { +// popup.css({ +// 'top': bounds.top + 'px', +// 'max-height': (maxBottom - bounds.top) + 'px', +// }); +// } + } + + function hideInnerDropdown(item) { + var popup = $(item).next('.dropdown-menu'); + popup.removeClass('show'); + $(item).removeClass('open'); + + popup.scrollTop(0); + popup.find('.dropdown-menu').scrollTop(0).removeClass('show'); + popup.find('.dropdown-submenu > a','.dropdown-submenu-nohover > a').removeClass('open'); + } + + $('.dropdown-submenu > a').on('click', function(e) { + if ($(this).next('.dropdown-menu').hasClass('show')) { + hideInnerDropdown(this); $(".dropdown-menu").not(".dropdown-menu.show").parent(".dropdown-submenu-nohover").removeClass("dropdown-submenu-nohover").addClass("dropdown-submenu"); + } else { + showInnerDropdown(this); $(".dropdown-menu").not(".dropdown-menu.show").parent(".dropdown-submenu").addClass("dropdown-submenu-nohover").removeClass("dropdown-submenu"); + $(this).parent().removeClass("dropdown-submenu-nohover").addClass("dropdown-submenu"); + } + + e.stopPropagation(); + e.preventDefault(); + }); + + $('.dropdown-menu').parent().on('hide.bs.dropdown', function(e) { + $(this).find('.dropdown-menu').scrollTop(0); + $(this).find('.dropdown-submenu > a').removeClass('open'); + $(this).find('.dropdown-menu .dropdown-menu').removeClass('show'); + }); +}); + +$(window).on('resize', applyTopPadding); + +$('body').scrollspy({ + target: '.bs-sidebar', + offset: 100 +}); + +/* Prevent disabled links from causing a page reload */ +$("li.disabled a").click(function() { + event.preventDefault(); +}); + +// See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes +// We only list common keys below. Obscure keys are omitted and their use is discouraged. +var keyCodes = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 19: 'pause/break', + 20: 'caps lock', + 27: 'escape', + 32: 'spacebar', + 33: 'page up', + 34: 'page down', + 35: 'end', + 36: 'home', + 37: '←', + 38: '↑', + 39: '→', + 40: '↓', + 45: 'insert', + 46: 'delete', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 91: 'Left Windows Key / Left ⌘', + 92: 'Right Windows Key', + 93: 'Windows Menu / Right ⌘', + 96: 'numpad 0', + 97: 'numpad 1', + 98: 'numpad 2', + 99: 'numpad 3', + 100: 'numpad 4', + 101: 'numpad 5', + 102: 'numpad 6', + 103: 'numpad 7', + 104: 'numpad 8', + 105: 'numpad 9', + 106: 'multiply', + 107: 'add', + 109: 'subtract', + 110: 'decimal point', + 111: 'divide', + 112: 'f1', + 113: 'f2', + 114: 'f3', + 115: 'f4', + 116: 'f5', + 117: 'f6', + 118: 'f7', + 119: 'f8', + 120: 'f9', + 121: 'f10', + 122: 'f11', + 123: 'f12', + 124: 'f13', + 125: 'f14', + 126: 'f15', + 127: 'f16', + 128: 'f17', + 129: 'f18', + 130: 'f19', + 131: 'f20', + 132: 'f21', + 133: 'f22', + 134: 'f23', + 135: 'f24', + 144: 'num lock', + 145: 'scroll lock', + 186: ';', + 187: '=', + 188: ',', + 189: '‐', + 190: '.', + 191: '?', + 192: '`', + 219: '[', + 220: '\', + 221: ']', + 222: ''', +}; diff --git a/js/bootstrap.bundle.min.js b/js/bootstrap.bundle.min.js new file mode 100644 index 00000000..b1999d9a --- /dev/null +++ b/js/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?n(i.trim()):null}return e},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=".dropdown-toggle",zs=`:not(${Bs})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ks extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return z.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Bs,Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:z.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Ks.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(Vs))Ks.getOrCreateInstance(t)})),m(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Ys=`mouseout${Qs}`,Us=`focusin${Qs}`,Gs=`focusout${Qs}`,Js=`hide${Qs}`,Zs=`hidden${Qs}`,to=`show${Qs}`,eo=`shown${Qs}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){N.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),d(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),N.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),N.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Xs,(t=>this._onInteraction(t,!0))),N.on(this._element,Ys,(t=>this._onInteraction(t,!1))),N.on(this._element,Us,(t=>this._onInteraction(t,!0))),N.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ao),m(ao),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Ks,Toast:ao,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/js/bootstrap.bundle.min.js.map b/js/bootstrap.bundle.min.js.map new file mode 100644 index 00000000..7cd8480d --- /dev/null +++ b/js/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","DATA_API_KEY","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","endCallBack","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","complete","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","Offcanvas","blur","completeCallback","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_ACTIVATE","EVENT_CLICK","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","HOME_KEY","END_KEY","SELECTOR_DROPDOWN_TOGGLE","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null\n }\n\n return selector\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' +\n '
' +\n '
' +\n '
',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    and