diff --git a/assets/fundamentals/html/basic-tags.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/basic-tags.svg"
similarity index 100%
rename from assets/fundamentals/html/basic-tags.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/basic-tags.svg"
diff --git a/assets/fundamentals/html/best-practices.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/best-practices.svg"
similarity index 100%
rename from assets/fundamentals/html/best-practices.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/best-practices.svg"
diff --git a/assets/fundamentals/html/discoverable-content.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/discoverable-content.svg"
similarity index 100%
rename from assets/fundamentals/html/discoverable-content.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/discoverable-content.svg"
diff --git a/assets/fundamentals/html/forms.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/forms.svg"
similarity index 100%
rename from assets/fundamentals/html/forms.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/forms.svg"
diff --git a/assets/fundamentals/html/seo.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/seo.svg"
similarity index 100%
rename from assets/fundamentals/html/seo.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/seo.svg"
diff --git a/assets/fundamentals/html/svg.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/svg.svg"
similarity index 100%
rename from assets/fundamentals/html/svg.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/svg.svg"
diff --git a/assets/fundamentals/html/syntax.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/syntax.svg"
similarity index 100%
rename from assets/fundamentals/html/syntax.svg
rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/syntax.svg"
diff --git "a/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg" "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg"
new file mode 100644
index 0000000..5f08b74
--- /dev/null
+++ "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg"
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/fundamentals/css/animations.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/animations.svg"
similarity index 100%
rename from assets/fundamentals/css/animations.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/animations.svg"
diff --git a/assets/fundamentals/css/best-practices.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/best-practices.svg"
similarity index 100%
rename from assets/fundamentals/css/best-practices.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/best-practices.svg"
diff --git a/assets/fundamentals/css/box-model.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/box-model.svg"
similarity index 100%
rename from assets/fundamentals/css/box-model.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/box-model.svg"
diff --git a/assets/fundamentals/css/calc.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/calc.svg"
similarity index 100%
rename from assets/fundamentals/css/calc.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/calc.svg"
diff --git a/assets/fundamentals/css/colors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/colors.svg"
similarity index 100%
rename from assets/fundamentals/css/colors.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/colors.svg"
diff --git a/assets/fundamentals/css/css-variables.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/css-variables.svg"
similarity index 100%
rename from assets/fundamentals/css/css-variables.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/css-variables.svg"
diff --git a/assets/fundamentals/css/flex.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/flex.svg"
similarity index 100%
rename from assets/fundamentals/css/flex.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/flex.svg"
diff --git a/assets/fundamentals/css/grid.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/grid.svg"
similarity index 100%
rename from assets/fundamentals/css/grid.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/grid.svg"
diff --git a/assets/fundamentals/css/images.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/images.svg"
similarity index 100%
rename from assets/fundamentals/css/images.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/images.svg"
diff --git a/assets/fundamentals/css/layout.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/layout.svg"
similarity index 100%
rename from assets/fundamentals/css/layout.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/layout.svg"
diff --git a/assets/fundamentals/css/margin-collapsing.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/margin-collapsing.svg"
similarity index 100%
rename from assets/fundamentals/css/margin-collapsing.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/margin-collapsing.svg"
diff --git a/assets/fundamentals/css/media-queries.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/media-queries.svg"
similarity index 100%
rename from assets/fundamentals/css/media-queries.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/media-queries.svg"
diff --git a/assets/fundamentals/css/overflow.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/overflow.svg"
similarity index 100%
rename from assets/fundamentals/css/overflow.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/overflow.svg"
diff --git a/assets/fundamentals/css/pseudo-selectors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/pseudo-selectors.svg"
similarity index 100%
rename from assets/fundamentals/css/pseudo-selectors.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/pseudo-selectors.svg"
diff --git a/assets/fundamentals/css/relative-units.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/relative-units.svg"
similarity index 100%
rename from assets/fundamentals/css/relative-units.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/relative-units.svg"
diff --git a/assets/fundamentals/css/responsive-design.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/responsive-design.svg"
similarity index 100%
rename from assets/fundamentals/css/responsive-design.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/responsive-design.svg"
diff --git a/assets/fundamentals/css/selectors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/selectors.svg"
similarity index 100%
rename from assets/fundamentals/css/selectors.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/selectors.svg"
diff --git a/assets/fundamentals/css/specificity.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/specificity.svg"
similarity index 100%
rename from assets/fundamentals/css/specificity.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/specificity.svg"
diff --git a/assets/fundamentals/css/syntax.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/syntax.svg"
similarity index 100%
rename from assets/fundamentals/css/syntax.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/syntax.svg"
diff --git a/assets/fundamentals/css/transforms.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/transforms.svg"
similarity index 100%
rename from assets/fundamentals/css/transforms.svg
rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/transforms.svg"
diff --git a/assets/fundamentals/javascript/async-await.svg "b/assets/1\355\225\231\353\205\204/javascript/async-await.svg"
similarity index 100%
rename from assets/fundamentals/javascript/async-await.svg
rename to "assets/1\355\225\231\353\205\204/javascript/async-await.svg"
diff --git a/assets/fundamentals/javascript/best-practices.svg "b/assets/1\355\225\231\353\205\204/javascript/best-practices.svg"
similarity index 100%
rename from assets/fundamentals/javascript/best-practices.svg
rename to "assets/1\355\225\231\353\205\204/javascript/best-practices.svg"
diff --git a/assets/fundamentals/javascript/callbacks.svg "b/assets/1\355\225\231\353\205\204/javascript/callbacks.svg"
similarity index 100%
rename from assets/fundamentals/javascript/callbacks.svg
rename to "assets/1\355\225\231\353\205\204/javascript/callbacks.svg"
diff --git a/assets/fundamentals/javascript/canvas.svg "b/assets/1\355\225\231\353\205\204/javascript/canvas.svg"
similarity index 100%
rename from assets/fundamentals/javascript/canvas.svg
rename to "assets/1\355\225\231\353\205\204/javascript/canvas.svg"
diff --git a/assets/fundamentals/javascript/classes.svg "b/assets/1\355\225\231\353\205\204/javascript/classes.svg"
similarity index 100%
rename from assets/fundamentals/javascript/classes.svg
rename to "assets/1\355\225\231\353\205\204/javascript/classes.svg"
diff --git a/assets/fundamentals/javascript/destructuring.svg "b/assets/1\355\225\231\353\205\204/javascript/destructuring.svg"
similarity index 100%
rename from assets/fundamentals/javascript/destructuring.svg
rename to "assets/1\355\225\231\353\205\204/javascript/destructuring.svg"
diff --git a/assets/fundamentals/javascript/documentation.svg "b/assets/1\355\225\231\353\205\204/javascript/documentation.svg"
similarity index 100%
rename from assets/fundamentals/javascript/documentation.svg
rename to "assets/1\355\225\231\353\205\204/javascript/documentation.svg"
diff --git a/assets/fundamentals/javascript/dom-manipulation.svg "b/assets/1\355\225\231\353\205\204/javascript/dom-manipulation.svg"
similarity index 100%
rename from assets/fundamentals/javascript/dom-manipulation.svg
rename to "assets/1\355\225\231\353\205\204/javascript/dom-manipulation.svg"
diff --git a/assets/fundamentals/javascript/dom.svg "b/assets/1\355\225\231\353\205\204/javascript/dom.svg"
similarity index 100%
rename from assets/fundamentals/javascript/dom.svg
rename to "assets/1\355\225\231\353\205\204/javascript/dom.svg"
diff --git a/assets/fundamentals/javascript/events.svg "b/assets/1\355\225\231\353\205\204/javascript/events.svg"
similarity index 100%
rename from assets/fundamentals/javascript/events.svg
rename to "assets/1\355\225\231\353\205\204/javascript/events.svg"
diff --git a/assets/fundamentals/javascript/fetch.svg "b/assets/1\355\225\231\353\205\204/javascript/fetch.svg"
similarity index 100%
rename from assets/fundamentals/javascript/fetch.svg
rename to "assets/1\355\225\231\353\205\204/javascript/fetch.svg"
diff --git a/assets/fundamentals/javascript/intl.svg "b/assets/1\355\225\231\353\205\204/javascript/intl.svg"
similarity index 100%
rename from assets/fundamentals/javascript/intl.svg
rename to "assets/1\355\225\231\353\205\204/javascript/intl.svg"
diff --git a/assets/fundamentals/javascript/modules.svg "b/assets/1\355\225\231\353\205\204/javascript/modules.svg"
similarity index 100%
rename from assets/fundamentals/javascript/modules.svg
rename to "assets/1\355\225\231\353\205\204/javascript/modules.svg"
diff --git a/assets/fundamentals/javascript/objects.svg "b/assets/1\355\225\231\353\205\204/javascript/objects.svg"
similarity index 100%
rename from assets/fundamentals/javascript/objects.svg
rename to "assets/1\355\225\231\353\205\204/javascript/objects.svg"
diff --git a/assets/fundamentals/javascript/promises.svg "b/assets/1\355\225\231\353\205\204/javascript/promises.svg"
similarity index 100%
rename from assets/fundamentals/javascript/promises.svg
rename to "assets/1\355\225\231\353\205\204/javascript/promises.svg"
diff --git a/assets/fundamentals/javascript/prototype.svg "b/assets/1\355\225\231\353\205\204/javascript/prototype.svg"
similarity index 100%
rename from assets/fundamentals/javascript/prototype.svg
rename to "assets/1\355\225\231\353\205\204/javascript/prototype.svg"
diff --git a/assets/fundamentals/javascript/regex.svg "b/assets/1\355\225\231\353\205\204/javascript/regex.svg"
similarity index 100%
rename from assets/fundamentals/javascript/regex.svg
rename to "assets/1\355\225\231\353\205\204/javascript/regex.svg"
diff --git a/assets/fundamentals/javascript/spread.svg "b/assets/1\355\225\231\353\205\204/javascript/spread.svg"
similarity index 100%
rename from assets/fundamentals/javascript/spread.svg
rename to "assets/1\355\225\231\353\205\204/javascript/spread.svg"
diff --git a/assets/fundamentals/javascript/syntax.svg "b/assets/1\355\225\231\353\205\204/javascript/syntax.svg"
similarity index 100%
rename from assets/fundamentals/javascript/syntax.svg
rename to "assets/1\355\225\231\353\205\204/javascript/syntax.svg"
diff --git a/assets/fundamentals/javascript/template-literals.svg "b/assets/1\355\225\231\353\205\204/javascript/template-literals.svg"
similarity index 100%
rename from assets/fundamentals/javascript/template-literals.svg
rename to "assets/1\355\225\231\353\205\204/javascript/template-literals.svg"
diff --git a/assets/fundamentals/javascript/web-animations.svg "b/assets/1\355\225\231\353\205\204/javascript/web-animations.svg"
similarity index 100%
rename from assets/fundamentals/javascript/web-animations.svg
rename to "assets/1\355\225\231\353\205\204/javascript/web-animations.svg"
diff --git a/assets/fundamentals/the-browser/blink.svg "b/assets/1\355\225\231\353\205\204/the-browser/blink.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/blink.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/blink.svg"
diff --git a/assets/fundamentals/the-browser/breakpoints.svg "b/assets/1\355\225\231\353\205\204/the-browser/breakpoints.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/breakpoints.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/breakpoints.svg"
diff --git a/assets/fundamentals/the-browser/browser-engines.svg "b/assets/1\355\225\231\353\205\204/the-browser/browser-engines.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/browser-engines.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/browser-engines.svg"
diff --git a/assets/fundamentals/the-browser/console-api.svg "b/assets/1\355\225\231\353\205\204/the-browser/console-api.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/console-api.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/console-api.svg"
diff --git a/assets/fundamentals/the-browser/debugging.svg "b/assets/1\355\225\231\353\205\204/the-browser/debugging.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/debugging.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/debugging.svg"
diff --git a/assets/fundamentals/the-browser/developer-console.svg "b/assets/1\355\225\231\353\205\204/the-browser/developer-console.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/developer-console.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/developer-console.svg"
diff --git a/assets/fundamentals/the-browser/gecko.svg "b/assets/1\355\225\231\353\205\204/the-browser/gecko.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/gecko.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/gecko.svg"
diff --git a/assets/fundamentals/the-browser/http.svg "b/assets/1\355\225\231\353\205\204/the-browser/http.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/http.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/http.svg"
diff --git a/assets/fundamentals/the-browser/polyfills.svg "b/assets/1\355\225\231\353\205\204/the-browser/polyfills.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/polyfills.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/polyfills.svg"
diff --git a/assets/fundamentals/the-browser/specifications.svg "b/assets/1\355\225\231\353\205\204/the-browser/specifications.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/specifications.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/specifications.svg"
diff --git a/assets/fundamentals/the-browser/standardization.svg "b/assets/1\355\225\231\353\205\204/the-browser/standardization.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/standardization.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/standardization.svg"
diff --git a/assets/fundamentals/the-browser/tc39.svg "b/assets/1\355\225\231\353\205\204/the-browser/tc39.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/tc39.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/tc39.svg"
diff --git a/assets/fundamentals/the-browser/the-internet.svg "b/assets/1\355\225\231\353\205\204/the-browser/the-internet.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/the-internet.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/the-internet.svg"
diff --git a/assets/fundamentals/the-browser/w3c.svg "b/assets/1\355\225\231\353\205\204/the-browser/w3c.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/w3c.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/w3c.svg"
diff --git a/assets/fundamentals/the-browser/webkit.svg "b/assets/1\355\225\231\353\205\204/the-browser/webkit.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/webkit.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/webkit.svg"
diff --git a/assets/fundamentals/the-browser/whatwg.svg "b/assets/1\355\225\231\353\205\204/the-browser/whatwg.svg"
similarity index 100%
rename from assets/fundamentals/the-browser/whatwg.svg
rename to "assets/1\355\225\231\353\205\204/the-browser/whatwg.svg"
diff --git a/src/data/databases.js b/src/data/databases.js
index 26a2a76..0de6800 100644
--- a/src/data/databases.js
+++ b/src/data/databases.js
@@ -466,7 +466,7 @@ export const databasesCollection = {
["Express", "https://expressjs.com/"],
["Tutorialspoint - Express Framework", "https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm"],
["Youtube - Express.js & Node.js Course for Beginners", "https://www.youtube.com/watch?v=G8uL0lFFoN0"],
- ["Understanding Node.js & Express.js fundamentals", "https://medium.com/@LindaVivah/the-beginners-guide-understanding-node-js-express-js-fundamentals-e15493462be1"],
+ ["Understanding Node.js & Express.js 1학년", "https://medium.com/@LindaVivah/the-beginners-guide-understanding-node-js-express-js-fundamentals-e15493462be1"],
["Wikipedia - Express.js", "https://en.wikipedia.org/wiki/Express.js"],
]
},
diff --git a/src/data/design-and-ux.js b/src/data/design-and-ux.js
index 25b268b..9c0e7dd 100644
--- a/src/data/design-and-ux.js
+++ b/src/data/design-and-ux.js
@@ -24,7 +24,7 @@ export const designAndUXCollection = {
links: [
["Color Theory: Brief Guide For Designers", "https://uxplanet.org/color-theory-brief-guide-for-designers-76e11c57eaa"],
["Color theory and the color wheel", "https://www.canva.com/colors/color-wheel/"],
- ["The fundamentals of understanding color theory", "https://99designs.dk/blog/tips/the-7-step-guide-to-understanding-color-theory/"],
+ ["The 1학년 of understanding color theory", "https://99designs.dk/blog/tips/the-7-step-guide-to-understanding-color-theory/"],
["Adobe - Color wheel", "https://color.adobe.com/"],
]
},
diff --git a/src/data/fundamentals.js b/src/data/fundamentals.js
index c36872a..378b1eb 100644
--- a/src/data/fundamentals.js
+++ b/src/data/fundamentals.js
@@ -18,23 +18,22 @@ export const fundamentalsCollection = {
{
name: "창의공학설계",
description: {
- text: "Exploration of Future Planning",
+ text: "Adventure Design",
links: [
["이수구분 : 전선", ""],
- ["교과목 번호 : 5111081", ""],
- ["학점 : 1-0-2", ""],
+ ["교과목 번호 : 5111004", ""],
+ ["학점 : 2-0-4", ""],
]
}
},
{
name: "미래설계탐색",
description: {
- text: "Learn how to make your content search-friendly.",
+ text: "Exploration of Future Planning",
links: [
- ["web.dev - Discoverable", "https://web.dev/discoverable"],
- ["Google Search - Get Started", "https://developers.google.com/search/docs/guides/get-started"],
- ["Google Search - SEO basics", "https://developers.google.com/search/docs/guides/javascript-seo-basics"],
- ["web.dev - SEO audits", "https://web.dev/lighthouse-seo"]
+ ["이수 구분 : 전선", ""],
+ ["교과목 번호 : 5111081", ""],
+ ["학점 : 1-0-2", ""],
]
}
},
@@ -69,11 +68,11 @@ export const fundamentalsCollection = {
{
name: "미래설계준비",
description: {
- text: "Learn what the CSS box modelS means.",
+ text: "Preparation of Future Design",
links: [
- ["MDN - Introduction to the CSS basic box model", "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model"],
- ["MDN - The box model", "https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model"],
- ["CSS Tricks - Inheriting box-sizing", "https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/"],
+ ["이수 구분 : 전선", ""],
+ ["교과목 번호 : ", ""],
+ ["학점 : 1-0-2", ""],
]
},
diff --git a/src/data/pwa.js b/src/data/pwa.js
index 721a87f..6f3643e 100644
--- a/src/data/pwa.js
+++ b/src/data/pwa.js
@@ -1,11 +1,11 @@
export const pwaCollection = {
- name: "Progressive Webapps",
+ name: "4학년",
areas: [
{
- name: "API's",
+ name: "1학기",
skills: [
{
- name: "Storage",
+ name: "인턴쉽I",
description: {
text: "Learn how to store data for your web app.",
links: [
@@ -19,7 +19,7 @@ export const pwaCollection = {
}
},
{
- name: "Routing",
+ name: "인턴쉽IV",
description: {
text: "Learn what routing means in single page applications.",
links: [
@@ -27,27 +27,10 @@ export const pwaCollection = {
["Static Apps - Routing URLs in Static Web Apps", "https://staticapps.org/articles/routing-urls-in-static-apps/"],
["Routing With Single Page Applications or Client Side Routing", "https://pennyforyourcode.com/tldr-routing-with-single-page-applications-or-client-side-routing-327626cdc5dd"],
]
- },
- skills: [
- {
- name: "History API",
- description: {
- text: "Learn how to use the history API to add single page applicaiton routing to your web app.",
- links: [
- ["MDN - Working with the History API", "https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API"],
- ["MDN - History API", "https://developer.mozilla.org/en-US/docs/Web/API/History_API"],
- ["Single-page application routing in vanilla JavaScript", "https://medium.com/@george.norberg/history-api-getting-started-36bfc82ddefc"],
- ["CSS Tricks - Using the HTML5 History API", "https://css-tricks.com/using-the-html5-history-api/"],
- ["The History API", "https://flaviocopes.com/history-api/"],
- ["Google Devs - History API: Scroll Restoration", "https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration"],
- ["MDN - The Document Base URL element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base"]
- ]
- },
- }
- ]
+ }
},
{
- name: "Service Workers",
+ name: "실무프로젝트I",
description: {
text: "Learn how to register a service worker to provide a rich native-like experience.",
links: [
@@ -62,41 +45,10 @@ export const pwaCollection = {
["Google Devs - Debugging Service Workers", "https://developers.google.com/web/fundamentals/codelabs/debugging-service-workers"],
["Caching best practices", "https://jakearchibald.com/2016/caching-best-practices/"],
]
- },
- skills: [
- {
- name: "Offline first",
- description: {
- text: "Learn how to make your web app working offline with an offline first approach.",
- links: [
- ["Google Devs - The Offline Cookbook", "https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook"],
- ["Udacity - Offline Web Applications", "https://www.udacity.com/course/offline-web-applications--ud899"],
- ["Offline First", "http://offlinefirst.org/"],
- ["Google Devs - Offline UX Considerations", "https://developers.google.com/web/fundamentals/instant-and-offline/offline-ux"],
- ["Google Devs - Offline Storage for Progressive Web Apps", "https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa"],
- ["Codelabs - Offline quickstart", "https://codelabs.developers.google.com/codelabs/pwa-offline-quickstart/index.html?index=..%2F..dev-pwa-training#0"],
- ["Codelabs - Adding a Service Worker and Offline into your Web App", "https://codelabs.developers.google.com/codelabs/offline/index.html?index=..%2F..%2Findex#0"],
- ["Supercharged - Offline Links", "https://www.youtube.com/watch?v=7fnpsF9tMXc"],
- ["MDN - Online and offline events", "https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/Online_and_offline_events"],
- ["MDN - Making PWAs work offline", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Offline_Service_workers"]
- ]
- }
- },
- {
- name: "Push notifications",
- description: {
- text: "Learn how to add push notifications to your web app.",
- links: [
- ["Google Devs - Adding Push Notifications to a Web App", "https://developers.google.com/web/fundamentals/codelabs/push-notifications/"],
- ["MDN - How to make PWAs re-engageable", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Re-engageable_Notifications_Push"],
- ["MDN - Notifications API", "https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API"],
- ]
- }
- },
- ]
+ }
},
{
- name: "Web App manifest",
+ name: "캡스톤디자인I",
description: {
text: "Learn how to tell the browser about your web app and how it should behave when 'installed' by creating a web app manifest.",
links: [
@@ -108,7 +60,7 @@ export const pwaCollection = {
}
},
{
- name: "Add to homescreen",
+ name: "기계학습",
description: {
text: "Learn how to make your web app installable.",
links: [
@@ -119,7 +71,59 @@ export const pwaCollection = {
}
},
{
- name: "Pointer Events",
+ name: "임베디드시스템",
+ description: {
+ text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.",
+ links: [
+ ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"],
+ ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"],
+ ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"],
+ ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"],
+ ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"]
+ ]
+ }
+ },
+ {
+ name: "영상처리",
+ description: {
+ text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.",
+ links: [
+ ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"],
+ ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"],
+ ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"],
+ ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"],
+ ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"]
+ ]
+ }
+ },
+ {
+ name: "창업산학초청세미나I",
+ description: {
+ text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.",
+ links: [
+ ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"],
+ ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"],
+ ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"],
+ ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"],
+ ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"]
+ ]
+ }
+ },
+ {
+ name: "정보,컴퓨터교재연구 및 지도법",
+ description: {
+ text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.",
+ links: [
+ ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"],
+ ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"],
+ ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"],
+ ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"],
+ ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"]
+ ]
+ }
+ },
+ {
+ name: "빅데이터시스템설계",
description: {
text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.",
links: [
@@ -134,10 +138,10 @@ export const pwaCollection = {
]
},
{
- name: "Loading Performance",
+ name: "2학기",
skills: [
{
- name: "App shell",
+ name: "인턴쉽II",
description: {
text: "Learn how to use an app shell to provide an instant and reliable experience to users on repeat visits",
links: [
@@ -147,17 +151,17 @@ export const pwaCollection = {
}
},
{
- name: "Render-Blocking Resources",
+ name: "인턴쉽III",
description: {
text: "Learn about render-blocking resources and why they are bad for the user-experience.",
links: [
["MDN - Render-blocking resources", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Loading#Render-blocking_resources"],
["Google Devs - Render-Blocking Resources", "https://developers.google.com/web/tools/lighthouse/audits/blocking-resources"]
]
- },
+ }
},
{
- name: "Compression",
+ name: "실무프로젝트II",
description: {
text: "Learn how to minimize the overall download size by optimizing and compressing resources.",
links: [
@@ -168,10 +172,10 @@ export const pwaCollection = {
["Google Devs - Optimize Images", "https://developers.google.com/web/tools/lighthouse/audits/optimize-images"],
["web.dev - Reduce JavaScript execution time", "https://web.dev/bootup-time/"]
]
- },
+ }
},
{
- name: "Performance metrics",
+ name: "창업파일럿프로젝트",
description: {
text: "Learn why it is important to measure performance and which metrics you should prioritize.",
links: [
@@ -179,43 +183,10 @@ export const pwaCollection = {
["Udacity - Website Performance Optimization", "https://www.udacity.com/course/website-performance-optimization--ud884"],
["Udacity - Browser Rendering Optimization", "https://www.udacity.com/course/browser-rendering-optimization--ud860"]
]
- },
- skills: [
- {
- name: "Largest Contentful Paint",
- description: {
- text: "Learn about Largest Contentful Paint and how it impacts the overall performance.",
- links: [
- ["web.dev - Largest Contentful Paint", "https://web.dev/lcp/"],
- ["web.dev - Lighthouse Largest Contentful Paint", "https://web.dev/lighthouse-largest-contentful-paint"],
- ["Medium - New Performance Metric: What is Largest Contentful Paint?", "https://medium.com/speedrank-app/new-performance-metric-what-is-largest-contentful-paint-dc784a497dd5"]
- ]
- },
- },
- {
- name: "Total Blocking Time",
- description: {
- text: "Learn about Total Blocking Time and how it impacts the overall performance.",
- links: [
- ["web.dev - First CPU Idle", "https://web.dev/first-cpu-idle"],
- ["Google Devs - Total Blocking Time", "https://web.dev/tbt"],
- ]
- },
- },
- {
- name: "Time to Interactive",
- description: {
- text: "Learn about Time to Interactive and how it impacts the overall performance.",
- links: [
- ["web.dev - Total Blocking Time", "https://web.dev/lighthouse-total-blocking-time/"],
- ["Google Devs - Time to Interactive", "https://developers.google.com/web/tools/lighthouse/audits/time-to-interactive"],
- ]
- },
- },
- ]
+ }
},
{
- name: "Lazy Loading",
+ name: "정보검색",
description: {
text: "Learn how to use lazy loading to lower the initial page payload and load time.",
links: [
@@ -223,66 +194,40 @@ export const pwaCollection = {
["Addy Osmani - Lazy Loading Images", "https://addyosmani.com/blog/lazy-loading/"],
["web.dev - Native lazy-loading for the web", "https://web.dev/native-lazy-loading/"]
]
- },
- skills: [
- {
- name: "Dynamic Import",
- description: {
- text: "Learn how to use dynamic import to lazy load javascript.",
- links: [
- ["V8 - Dynamic import()", "https://v8.dev/features/dynamic-import"],
- ["JavaScript dynamic import() & export", "https://medium.com/@WebReflection/javascript-dynamic-import-export-b0e8775a59d4"],
- ["MDN - Dynamic Import", "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports"],
- ["TC39 - proposal-dynamic-import", "https://github.com/tc39/proposal-dynamic-import"]
- ]
- },
- },
- {
- name: "Offscreen images",
- description: {
- text: "Learn why offscreen images increase the load time and how to avoid them by lazy loading images.",
- links: [
- ["web.dev - Defer offscreen images", "https://web.dev/offscreen-images/"],
- ["Google Devs - Properly Size Images", "https://developers.google.com/web/tools/lighthouse/audits/oversized-images"],
- ["web.dev - Native lazy-loading for the web", "https://web.dev/native-lazy-loading"],
- ["Addy Osmani - Native image lazy-loading for the web!", "https://addyosmani.com/blog/lazy-loading/"],
- ]
- },
- },
- ]
+ }
},
{
- name: "Critical Request Chains",
+ name: "창업산학초청세미나II",
description: {
text: "Learn about the critical request chains and how to find them in your web app.",
links: [
["Google Devs - Critical Request Chains", "https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains"],
["web.dev - Minimize critical requests depth", "https://web.dev/critical-request-chains"]
]
- },
+ }
},
{
- name: "Tree shaking",
+ name: "정보,컴퓨터논리 및 논술",
description: {
text: "Learn how to use tree shaking to eliminate dead code.",
links: [
["Google Devs - Reduce JavaScript Payloads", "https://developers.google.com/web/fundamentals/performance/optimizing-javascript/tree-shaking"],
["How to Clean Up Your JavaScript", "https://www.keycdn.com/blog/tree-shaking"],
]
- },
+ }
},
{
- name: "Codesplitting",
+ name: "정보,컴퓨터교육론",
description: {
text: "Learn about codesplitting an how dividing your code into multiple chunks makes your web app faster.",
links: [
["Google Devs - Reduce JavaScript Payloads", "https://developers.google.com/web/fundamentals/performance/optimizing-javascript/code-splitting"],
["All you need to know about JavaScript code splitting", "https://www.creativebloq.com/how-to/all-you-need-to-know-about-javascript-code-splitting"]
]
- },
+ }
},
{
- name: "PRPL Pattern",
+ name: "자연언어 처리",
description: {
text: "Learn how to use the PRPL pattern to make web apps more performant.",
links: [
@@ -291,10 +236,10 @@ export const pwaCollection = {
["Ben Schwarz - Real world performance", "https://building.calibreapp.com/beyond-the-bubble-real-world-performance-9c991dcd5342?gi=76804aa8f46e"],
["The Cost of Javascript", "https://medium.com/@addyosmani/the-cost-of-javascript-in-2018-7d8950fbb5d4"],
]
- },
+ }
},
{
- name: "Resource Prioritization",
+ name: "빅데이터분석시각화",
description: {
text: "Learn about resource prioritization and how to inform the browser about the importance of a resource.",
links: [
@@ -304,375 +249,19 @@ export const pwaCollection = {
["web.dev - Preconnect to required origins", "https://web.dev/uses-rel-preconnect/"],
["Preload, prefetch and other tags", "https://3perf.com/blog/link-rels/"]
]
- },
+ }
},
{
- name: "Caching",
+ name: "클라우드컴퓨팅",
description: {
text: "Learn about caching and how it can be uses to make web apps load faster.",
links: [
["Google Devs - HTTP Caching", "https://developers.google.com/web/fundamentals/performance/get-started/httpcaching-6"],
["MDN - HTTP caching", "https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"]
]
- },
- },
- ]
- },
- {
- name: "Rendering Performance",
- skills: [
- {
- name: "Rendering",
- description: {
- text: "Learn about rendering, how a page is rendered and why it is important to keep your web app interactive and smooth running.",
- links: [
- ["Google Devs - Constructing the Object Model", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/constructing-the-object-model"],
- ["Google Devs - Rendering Performance", "https://developers.google.com/web/fundamentals/performance/rendering"],
- ["Google Devs - Render-tree Construction", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction"],
- ["Google Devs - Render Blocking CSS", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css"]
- ]
- },
- },
- {
- name: "Event loop",
- description: {
- text: "Learn about the event loop and how Javascript simulate like it’s running our commands in a multi-thread environment.",
- links: [
- ["Youtube - Jake Archibald: In The Loop", "https://youtu.be/cCOL7MC4Pl0"],
- ["Understanding JavaScript", "https://medium.com/@muratcatal/understanding-javascript-heap-stack-event-loops-and-callback-queue-6fdec3cfe32e"],
- ["JavaScript Event Loop Explained", "https://medium.com/front-end-weekly/javascript-event-loop-explained-4cd26af121d4"],
- ["Youtube - What the heck is the event loop anyway?", "https://www.youtube.com/watch?v=8aGhZQkoFbQ"],
- ["The JavaScript Event Loop", "https://flaviocopes.com/javascript-event-loop/"],
- ["dev.to - JavaScript Visualized: Event Loop", "https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif"],
- ]
- },
- skills: [
- {
- name: "Microtask",
- description: {
- text: "Learn about microtasks and the microtask queue.",
- links: [
- ["Tasks, microtasks, queues and schedules", "https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/"],
- ["MDN - Using microtasks in JavaScript", "https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide"],
- ["javascript.info - Microtasks and macrotasks", "https://javascript.info/event-loop"],
- ["javascript.info - Microtasks", "https://javascript.info/microtask-queue"],
- ]
- },
- },
- {
- name: "Stack",
- description: {
- text: "Learn about the stack and how to investigate the staack trace when debugging.",
- links: [
- ["Javascript Stack Trade - Using it to debug", "https://www.scalyr.com/blog/javascript-stack-trace-understanding-it-and-using-it-to-debug/"],
- ["MDN - console.trace()", "https://developer.mozilla.org/en-US/docs/Web/API/Console/trace"],
- ["V8 - Stack trace API", "https://v8.dev/docs/stack-trace-api"],
- ["Confused about Stack and Heap?", "https://medium.com/fhinkel/confused-about-stack-and-heap-2cf3e6adb771"],
- ]
- },
- },
- {
- name: "Heap",
- description: {
- text: "Learn about the heap and how to investigate the heap snapshots when debugging.",
- links: [
- ["Google Devs - Memory Problems", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/"],
- ["Google Devs - Memory Terminology", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/memory-101"],
- ["Google Devs - How to Record Heap Snapshots", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/heap-snapshots"],
- ["Confused about Stack and Heap?", "https://medium.com/fhinkel/confused-about-stack-and-heap-2cf3e6adb771"],
- ["Google Devs - How to Use the Allocation Profiler Tool", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/allocation-profiler"],
- ]
- },
- },
- ]
- },
- {
- name: "RAIL Model",
- description: {
- text: "Learn how to use the RAIL model to ensure a good user experience.",
- links: [
- ["Google Devs - RAIL", "https://developers.google.com/web/fundamentals/performance/rail"],
- ["Google Devs - Why Performance Matters", "https://developers.google.com/web/fundamentals/performance/why-performance-matters/"],
- ["Google Devs - Get Started With Analyzing", "https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/"],
- ["Google Devs - Animations and Performance", "https://developers.google.com/web/fundamentals/design-and-ux/animations/animations-and-performance"],
- ["Google Devs - CSS Versus JavaScript Animations", "https://developers.google.com/web/fundamentals/design-and-ux/animations/css-vs-javascript"],
- ["Google Devs - Choosing the Right Easing", "https://developers.google.com/web/fundamentals/design-and-ux/animations/choosing-the-right-easing"],
- ["Google Devs - Animating Modal Views", "https://developers.google.com/web/fundamentals/design-and-ux/animations/animating-modal-views"],
- ["MDN - CSS and JavaScript animation performance", "https://developer.mozilla.org/en-US/docs/Web/Performance/CSS_JavaScript_animation_performance"],
- ["MDN - Performance fundamentals", "https://developer.mozilla.org/en-US/docs/Web/Performance/Fundamentals"],
- ["Youtube - Fast By Default", "https://www.youtube.com/watch?v=_srJ7eHS3IM"],
- ]
- },
- skills: [
- {
- name: "requestAnimationFrame",
- description: {
- text: "Learn how to use the requestAnimationFrame API to create butter-smooth animations.",
- links: [
- ["Google Devs - Optimize JavaScript Execution", "https://developers.google.com/web/fundamentals/performance/rendering/optimize-javascript-execution"],
- ["MDN - requestAnimationFrame()", "https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame"]
- ]
- },
- },
- {
- name: "requestIdleCallback",
- description: {
- text: "Learn how to use the requestIdleCallback to defer heavy tasks.",
- links: [
- ["MDN - Background Tasks API", "https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API"],
- ["Google Dev - requestIdleCallback", "https://developers.google.com/web/updates/2015/08/using-requestidlecallback?hl=en"],
- ["MDN - requestIdleCallback()", "https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback"]
- ]
- }
- }
- ]
- },
- {
- name: "Critical Rendering Path",
- description: {
- text: "Learn about the critical rendering path and how to identify it.",
- links: [
- ["Google Devs - Critical Rendering Path", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/"],
- ["MDN - Critical Rendering Path", "https://developer.mozilla.org/en-US/docs/Web/Performance/Critical_rendering_path"],
- ["Understanding the critical rendering path", "https://medium.com/@luisvieira_gmr/understanding-the-critical-rendering-path-rendering-pages-in-1-second-735c6e45b47a"]
- ]
- },
- },
- {
- name: "The Pixel Pipeline",
- description: {
- text: "Learn about the five key points in the pixels-to-screen pipeline.",
- links: [
- ["Google Devs - The pixel pipeline", "https://developers.google.com/web/fundamentals/performance/rendering#the_pixel_pipeline"],
- ["Pixels are expensive", "https://aerotwist.com/blog/pixels-are-expensive/"],
- ["Google Devs - The Applied Science of Runtime Performance", "https://www.youtube.com/watch?v=RCFQu0hK6bU"],
- ["CSS Triggers", "https://csstriggers.com/"]
- ]
- },
- skills: [
- {
- name: "Style calculations",
- description: {
- text: "Learn how to optimize your CSS to avoid heavy style calculations.",
- links: [
- ["Google Devs - Style Calculations", "https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations"],
- ]
- },
- },
- {
- name: "Transforms",
- description: {
- text: "Learn about transforms and how it is possible to avoid both layout and paint.",
- links: [
- ["Google Devs - Use transform and opacity for animations", "https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count#use_transform_and_opacity_changes_for_animations"],
- ["Achieving 60 FPS Animations with CSS3", "https://medium.com/outsystems-experts/how-to-achieve-60-fps-animations-with-css3-db7b98610108"],
- ["HTML5 Rocks - High Performance Animations", "https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/"],
- ]
- },
- },
- {
- name: "Paint areas",
- description: {
- text: "Learn about paint areas and how it is possible to reduce them.",
- links: [
- ["Google Devs - Paint Areas", "https://developers.google.com/web/fundamentals/performance/rendering/simplify-paint-complexity-and-reduce-paint-areas"],
- ["CSS Tricks - Browser painting", "https://css-tricks.com/browser-painting-and-considerations-for-web-performance/"],
- ["HTML5 Rocks - Avoiding Unnecessary Paints", "https://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/"]
- ]
- },
- },
- {
- name: "Layout Trashing",
- description: {
- text: "Learn about layout trashing and how to avoid it.",
- links: [
- ["Google Devs - Layout Thrashing", "https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing"],
- ["Beware JavaScript Layout Thrashing!", "https://blog.idrsolutions.com/2014/08/beware-javascript-layout-thrashing/"],
- ["Layout thrashing cheatsheet", "https://devhints.io/layout-thrashing"]
- ]
- },
- },
- {
- name: "Layers",
- description: {
- text: "Learn about layers and how to promote an element to another layer.",
- links: [
- ["Google Devs - Manage Layer Count", "https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count"],
- ["HTML5 Rocks - Accelerated Rendering in Chrome", "https://www.html5rocks.com/en/tutorials/speed/layers/"],
- ["Layers and how to force them", "https://dassur.ma/things/forcing-layers/"]
- ]
- },
- },
- {
- name: "Debounce",
- description: {
- text: "Learn how to debounce computationally expensive code to avoid blocking the UI.",
- links: [
- ["Google Devs - Debounce Your Input Handlers", "https://developers.google.com/web/fundamentals/performance/rendering/debounce-your-input-handlers"],
- ["What is Debouncing?", "https://medium.com/@jamischarles/what-is-debouncing-2505c0648ff1"],
- ["Level Up - Debounce in JavaScript", "https://levelup.gitconnected.com/debounce-in-javascript-improve-your-applications-performance-5b01855e086"]
- ]
- },
- }
- ],
- },
- {
- name: "CSS Containment",
- description: {
- text: "Learn how to use CSS containment to improve the performance of your web app.",
- links: [
- ["Google Devs - CSS Containment", "https://developers.google.com/web/updates/2016/06/css-containment"],
- ["W3C - CSS Containment Module", "https://www.w3.org/TR/css-contain-1/"],
- ["An introduction to CSS Containment", "https://blogs.igalia.com/mrego/2019/01/11/an-introduction-to-css-containment/"],
- ["MDN - Contain", "https://developer.mozilla.org/en-US/docs/Web/CSS/contain"],
- ["CSS Tricks - CSS containment", "https://css-tricks.com/css-containment/"],
- ]
- },
- },
- {
- name: "Web Workers",
- description: {
- text: "Learn how to use web workers to run a script operation in a background thread separate from the main execution thread.",
- links: [
- ["MDN - Web Workers API", "https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API"],
- ["HTML5 Rocks - The Basics of Web Workers", "https://www.html5rocks.com/en/tutorials/workers/basics/"],
- ["When should you be using Web Workers?", "https://dassur.ma/things/when-workers/"]
- ]
}
}
- ],
- },
- {
- name: "Security",
- skills: [
- {
- name: "HTTPS",
- description: {
- text: "Learn about HTTPS and why a website should always be protected with HTTPS.",
- links: [
- ["Google Devs - Why HTTPS Matters", "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https"],
- ["Google Devs - Enabling HTTPS on Your Servers", "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https"],
- ["Google Devs - Mixed Content", "https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content"],
- ["Youtube - Stories from the field", "https://www.youtube.com/watch?v=GoXgl9r0Kjk"]
- ]
- }
- },
- {
- name: "Browser Sandbox",
- description: {
- text: "Learn about the sandbox security mechanism and how it restricts the execution environment.",
- links: [
- ["web.dev - Browser sandbox", "https://web.dev/browser-sandbox/"],
- ["Wikipedia - Sandbox (computer security)", "https://en.wikipedia.org/wiki/Sandbox_(computer_security)"],
- ["Howtogeek - Sandboxes Explained", "https://www.howtogeek.com/169139/sandboxes-explained-how-theyre-already-protecting-you-and-how-to-sandbox-any-program/"]
- ]
- },
- },
- {
- name: "OWASP",
- description: {
- text: "Learn about the OWASP organization and how they help with web application security.",
- links: [
- ["Wikipedia - OWASP", "https://en.wikipedia.org/wiki/OWASP"],
- ["OWASP - About", "https://www.owasp.org/index.php/About_The_Open_Web_Application_Security_Project"],
- ["OWASP - OWASP Top 10", "https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf"],
- ["OWASP - Cheatsheets", "https://cheatsheetseries.owasp.org/"],
- ["Youtube - OWASP", "https://www.youtube.com/user/OWASPGLOBAL"],
- ["OWASP Top 10 Security Risks", "https://blog.sucuri.net/2018/10/owasp-top-10-security-risks-part-i.html"],
- ["Wikipedia - Web application security", "https://en.wikipedia.org/wiki/Web_application_security"],
- ]
- },
- skills: [
- {
- name: "Cross-Site Scripting",
- description: {
- text: "Learn about cross-site scripting and how it is possible mitigate these kind of attacks.",
- links: [
- ["MDN - Cross-site scripting", "https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting"],
- ["OWASP - Cross-site Scripting (XSS)", "https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)"],
- ["OWASP - XSS Cheatsheet", "https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html"],
- ["Excess XSS", "https://excess-xss.com/"]
- ]
- },
- },
- {
- name: "Clickjacking",
- description: {
- text: "Learn about clickjacking and how it is possible to mitigate these kind of attacks.",
- links: [
- ["OWASP - Clickjacking", "https://www.owasp.org/index.php/Clickjacking"],
- ["Wikipedia - Clickjacking", "https://en.wikipedia.org/wiki/Clickjacking"],
- ["web.dev - Same-origin policy", "https://web.dev/same-origin-policy/#how-to-prevent-clickjacking"],
- ["OWASP - Clickjacking Cheatsheet", "https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html"]
- ]
- },
- },
- ]
- },
- {
- name: "Content Security Policy",
- description: {
- text: "Learn about content security policy and how it can help to detect and mitigate certain types of attacks.",
- links: [
- ["MDN - Content Security Policy (CSP)", "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP"],
- ["Google Devs - CSP", "https://developers.google.com/web/fundamentals/security/csp"]
- ]
- }
- },
]
- },
- {
- name: "Audits",
- description: {
- text: "Learn how to do an audit to check the health of your web app.",
- links: [
- ["Google Devs - Auditing Performance", "https://developers.google.com/web/fundamentals/performance/audit"],
- ["web.dev - Performance audits", "https://web.dev/lighthouse-performance"],
- ["Google Devs - Prework", "https://developers.google.com/web/fundamentals/performance/audit/prework"],
- ["Google Devs - Check site security", "https://developers.google.com/web/fundamentals/performance/audit/security"],
- ["Google Devs - Use tools to measure performance", "https://developers.google.com/web/fundamentals/performance/audit/tools"],
- ["Google Devs - Find and Fix Web App Performance Issues", "https://developers.google.com/web/fundamentals/codelabs/web-perf/"],
- ["web.dev - Measure", "https://web.dev/measure/"],
- ["Google Devs - How To Think About Speed Tools", "https://developers.google.com/web/fundamentals/performance/speed-tools/"],
- ["web.dev - PWA audits", "https://web.dev/lighthouse-pwa"],
- ["web.dev - Best Practices audits", "https://web.dev/lighthouse-best-practices"]
- ]
- },
- skills: [
- {
- name: "Performance budgets",
- description: {
- text: "Learn about performance budgets and how you can create one for your web app.",
- links: [
- ["web.dev - Performance Budgets", "https://web.dev/performance-budgets-101"],
- ["Google Devs - Performance Budget", "https://developers.google.com/web/tools/lighthouse/audits/budgets"],
- ["Addy Osmani - Start Performance Budgeting", "https://addyosmani.com/blog/performance-budgets/"]
- ]
- },
- },
- {
- name: "Lighthouse",
- description: {
- text: "Learn about lighthouse and how it can be used to audit your web app.",
- links: [
- ["Google Devs - Lighthouse", "https://developers.google.com/web/tools/lighthouse/"],
- ["Youtube - Staying off the Rocks", "https://www.youtube.com/watch?v=NoRYn6gOtVo"],
- ["web.dev - Measure", "https://web.dev/measure"]
- ]
- },
- },
- {
- name: "Chrome DevTools",
- description: {
- text: "Learn about the Chrome DevTools and how it can be used to audit your web app.",
- links: [
- ["Google Devs - Chrome DevTools", "https://developers.google.com/web/tools/chrome-devtools"],
- ["Google Devs - Inspect animations", "https://developers.google.com/web/tools/chrome-devtools/inspect-styles/animations"],
- ["Investigate animation performance with DevTools", "https://calibreapp.com/blog/investigate-animation-performance-with-devtools/"],
- ]
- },
- }
- ]
- },
+ }
]
}
diff --git a/src/data/web-components.js b/src/data/web-components.js
index 97097d5..0924db0 100644
--- a/src/data/web-components.js
+++ b/src/data/web-components.js
@@ -1,118 +1,165 @@
export const webcomponentsCollection = {
- name: "Web Components",
+ name: "3학년",
areas: [
{
+ name: "1학기",
skills: [
{
- name: "Custom Elements",
+ name: "운영체제",
description: {
- text: "Learn how to create new HTML tags with Custom Elements.",
+ text: "운영체제",
links: [
- ["Google Devs - Custom Elements", "https://developers.google.com/web/fundamentals/web-components/customelements"],
- ["MDN - Using Custom Elements", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements"],
- ["CSS Tricks - Creating a Custom Element from Scratch", "https://css-tricks.com/creating-a-custom-element-from-scratch/"],
- ["Javascript.info - Custom Elements", "https://javascript.info/custom-elements"],
- ["dev.to - An introduction to Custom Elements", "https://dev.to/jamesrweb/an-introduction-to-custom-elements-5327"],
- ["itnext - Introduction to Web Components", "https://itnext.io/introduction-to-web-components-part-i-custom-elements-4de6713cef9d"],
- ["web.dev - Web Components", "https://web.dev/web-components-io-2019/"]
+ ["이수 구분 : 전필", ""],
+ ["교과목 번호 : 5111001", ""],
+ ["학점 : 3-3-0", ""],
+ ]
+ },
+
+ },
+ {
+ name: "객채지향 설계",
+ description: {
+ text: "Exploration of Future Planning",
+ links: [
+ ["이수구분 : 전선", ""],
+ ["교과목 번호 : 5111081", ""],
+ ["학점 : 1-0-2", ""],
]
}
},
{
- name: "HTML Templates",
+ name: "오픈소스 웹소프트웨어",
description: {
- text: "Learn how to use HTML templates to create flexible templates that can then be used to populate the Shadow DOM.",
+ text: "Learn how to make your content search-friendly.",
links: [
- ["MDN - Using Templates & Slots", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots"],
- ["Javascript.info - Template Element", "https://javascript.info/template-element"],
- ["MDN - The Content Template element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template"]
+ ["web.dev - Discoverable", "https://web.dev/discoverable"],
+ ["Google Search - Get Started", "https://developers.google.com/search/docs/guides/get-started"],
+ ["Google Search - SEO basics", "https://developers.google.com/search/docs/guides/javascript-seo-basics"],
+ ["web.dev - SEO audits", "https://web.dev/lighthouse-seo"]
]
},
},
{
- name: "Shadow DOM",
+ name: "컴파일러",
description: {
- text: "Learn how to encapsulate your CSS using Shadow DOM.",
+ text: "Learn how to work with SVG files to make graphics look crisp across all screen resolutions.",
links: [
- ["Google Devs - Shadow DOM", "https://developers.google.com/web/fundamentals/web-components/shadowdom"],
- ["MDN - Using Shadow DOM", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM"],
- ["MDN - Shadow Tree", "https://developer.mozilla.org/en-US/docs/Glossary/Shadow_tree"],
- ["CSS Tricks - Encapsulating Style and Structure", "https://css-tricks.com/encapsulating-style-and-structure-with-shadow-dom/"],
- ["itnext - Introduction to Web Components", "https://itnext.io/introduction-to-web-components-part-ii-shadow-dom-8d1d8e126332"],
- ["Monica - Shadow DOM: fast and encapsulated styles", "https://meowni.ca/posts/shadow-dom/"]
+ ["MDN - Adding vector graphics to the Web", "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web"],
+ ["SVG on the web", "https://svgontheweb.com/"],
+ ]
+ }
+ },
+ {
+ name: "컴퓨터네트워크",
+ description: {
+ text: "Learn the best practices of writing HTML.",
+ links: [
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
+ ]
+ }
+ },
+ {
+ name: "창업기획",
+ description: {
+ text: "Learn the best practices of writing HTML.",
+ links: [
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
+ ]
+ }
+ },
+ {
+ name: "오픈소스 전문프로젝트",
+ description: {
+ text: "Learn the best practices of writing HTML.",
+ links: [
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
+ ]
+ }
+ }
+ ]
+ },
+ {
+ name: "2학기",
+ skills: [
+ {
+ name: "소프트웨어공학",
+ description: {
+ text: "Introduction to Computer Systems",
+ links: [
+ ["이수 구분 : 전필", ""],
+ ["교과목 번호 : 5111002", ""],
+ ["학점 : 3-3-0", ""],
+ ]
+ }
+ },
+ {
+ name: "산학프로젝트",
+ description: {
+ text: "Introduction to Open Source SW",
+ links: [
+ ["이수 구분 : 전필", ""],
+ ["교과목 번호 : 5111080", ""],
+ ["학점 : 2-1-2", ""],
+ ]
+ },
+ },
+ {
+ name: "펌웨어프로그래밍",
+ description: {
+ text: "Learn what the CSS box model means.",
+ links: [
+ ["MDN - Introduction to the CSS basic box model", "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model"],
+ ["MDN - The box model", "https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model"],
+ ["CSS Tricks - Inheriting box-sizing", "https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/"],
]
},
- skills: [
- {
- name: "Shadow Parts",
- description: {
- text: "Learn how to style the inside of a shadow tree from outside of that Shadow Tree by using Shadow Parts.",
- links: [
- ["Fergald - CSS Shadow ::part and ::theme", "https://github.com/fergald/docs/blob/master/explainers/css-shadow-parts-1.md"],
- ["MDN - ::part", "https://developer.mozilla.org/en-US/docs/Web/CSS/::part"],
- ["W3C - CSS Shadow Parts", "https://www.w3.org/TR/css-shadow-parts-1/"],
- ["Monica - ::part and ::theme, an explainer", "https://meowni.ca/posts/part-theme-explainer/"],
- ["Youtube - CSS Shadow Parts", "https://www.youtube.com/watch?v=yVrvOueeb3s"],
- ["Chrome Status - ::part and ::theme", "https://www.chromestatus.com/features/5763933658939392"]
- ]
- }
- },
- {
- name: "Slots",
- description: {
- text: "Learn how to compose Custom Elements by using slots.",
- links: [
- ["Alligator.io - Composing Custom Elements", "https://alligator.io/web-components/composing-slots-named-slots/"],
- ["Javascript.info - Slots Composition", "https://javascript.info/slots-composition"],
- ["MDN - HTML element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot"],
- ["Component.kitchen - A history of the HTML slot element", "https://component.kitchen/blog/posts/a-history-of-the-html-slot-element"],
- ]
- }
- }
- ]
+
+ },
+ {
+ name: "창업설계",
+ description: {
+ text: "Learn the best practices of writing HTML.",
+ links: [
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
+ ]
+ }
},
{
- name: "Best practices",
+ name: "정보보호",
description: {
- text: "Get familiar with best practices when it comes to building Web Components.",
+ text: "Learn the best practices of writing HTML.",
links: [
- ["Google Devs - Custom Element Best Practices", "https://developers.google.com/web/fundamentals/web-components/best-practices"],
- ["Webcomponents.org - Web Components Best Practices", "https://www.webcomponents.org/community/articles/web-components-best-practices"],
- ["mateusortiz - Web Components the Right Way", "https://github.com/mateusortiz/webcomponents-the-right-way"],
- ["dev.to - Making Web Components for Different Contexts", "https://dev.to/equinusocio/making-web-components-for-different-contexts-25ed"]
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
]
}
},
{
- name: "Constructible Stylesheets",
+ name: "인공지능",
description: {
- text: "Learn how the Constructible Stylesheets proposal enables reusable styles when using shadow dom.",
+ text: "Learn the best practices of writing HTML.",
links: [
- ["Google Devs - Constructable Stylesheets", "https://developers.google.com/web/updates/2019/02/constructable-stylesheets"],
- ["W3C - Constructable Stylesheet Objects", "https://wicg.github.io/construct-stylesheets/"],
- ["dev.to - Why Would Anyone Use Constructible Stylesheets", "https://dev.to/westbrook/why-would-anyone-use-constructible-stylesheets-anyways-19ng"],
- ["Benjamin Farrel - Adopt a Design System", "https://medium.com/swlh/adopt-a-design-system-inside-your-web-components-with-constructable-stylesheets-dd24649261e"],
- ["WICG - Constructable Stylesheet Objects", "https://github.com/WICG/construct-stylesheets/blob/gh-pages/explainer.md"],
- ["Chrome Status - Constructible Stylesheets", "https://www.chromestatus.com/feature/5394843094220800"]
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
]
}
},
{
- name: "Form Participation",
+ name: "데이터베이스시스템",
description: {
- text: "Learn how the Form Participation API proposal enables elements, other than built-in form control elements, to participate in form submission and validation.",
+ text: "Learn the best practices of writing HTML.",
links: [
- ["Form Participation API Explained", "https://docs.google.com/document/d/1JO8puctCSpW-ZYGU8lF-h4FWRIDQNDVexzHoOQ2iQmY/edit"],
- ["Chrome Status - Form-associated custom elements", "https://www.chromestatus.com/features/4708990554472448"],
- ["web-platform-tests - Form Participation", "https://github.com/web-platform-tests/wpt/tree/master/custom-elements/form-associated"],
- ["Google Devs - Form-associated custom elements", "https://developers.google.com/web/updates/2019/09/nic77#form-associated_custom_elements"],
- ["web.dev - More capable form controls", "https://web.dev/more-capable-form-controls/"],
- ["W3C - Creating a form-associated custom element", "https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example"],
+ ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"],
+ ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"]
]
}
}
]
}
]
-}
\ No newline at end of file
+}
diff --git a/sw.js b/sw.js
index 342cd0f..7d91ce7 100644
--- a/sw.js
+++ b/sw.js
@@ -4,7 +4,7 @@ const CACHE_NAME = `${APP_PREFIX}-v${SW_VERSION}`;
const DEBUG = false;
const URLS_TO_CACHE = [
"",
- "index.html",
+ "index.1학기",
"src/app.js",
"src/config.js",
"src/data.js",
@@ -33,14 +33,14 @@ const URLS_TO_CACHE = [
"src/data/databases.js",
"src/data/design-and-ux.js",
"src/data/frameworks-and-libraries.js",
- "src/data/fundamentals.js",
+ "src/data/1학년.js",
"src/data/modern.js",
"src/data/pwa.js",
"src/data/team-collaboration.js",
"src/data/testing.js",
"src/data/web-components.js",
"src/styles/shared.js",
- "src/styles/global.css",
+ "src/styles/global.2학기",
"web_modules/web-dialog.js"
];
diff --git a/web_modules/common/lit-html-6bb77aec.js b/web_modules/common/lit-html-6bb77aec.js
index 634e47f..6315cfc 100644
--- a/web_modules/common/lit-html-6bb77aec.js
+++ b/web_modules/common/lit-html-6bb77aec.js
@@ -105,4 +105,4 @@ class{handleAttributeExpressions(t,e,s,n){const i=e[0];if("."===i){return new E(
* subject to an additional IP rights grant found at
* http://polymer.github.io/PATENTS.txt
*/"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.2.1");const I=(t,...e)=>new f(t,e,"html",P),B=(t,...e)=>new x(t,e,"svg",P);export{b as N,r as T,g as a,s as b,h as c,u as d,e,I as h,l as i,n as m,H as p,k as r,B as s,L as t};
-//# sourceMappingURL=lit-html-6bb77aec.js.map
+//# sourceMappingURL=lit-1학기-6bb77aec.js.map
diff --git a/web_modules/firebase/auth/dist/index.esm.js b/web_modules/firebase/auth/dist/index.esm.js
index 3f19d19..27419b1 100644
--- a/web_modules/firebase/auth/dist/index.esm.js
+++ b/web_modules/firebase/auth/dist/index.esm.js
@@ -1,2 +1,2 @@
-import{t}from"../../../common/index.esm-7362d277.js";(function(){var n,e="function"==typeof Object.defineProperties?Object.defineProperty:function(t,n,e){t!=Array.prototype&&t!=Object.prototype&&(t[n]=e.value)};var i=function(t){t=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,t];for(var n=0;n>>0),m=0;function g(t,n,e){return t.call.apply(t.bind,arguments)}function b(t,n,e){if(!t)throw Error();if(2t.b&&(t.b++,n.next=t.a,t.a=n)}function x(){this.b=this.a=null}k=O("__EID__")?"__EID__":void 0,T(P,Error),P.prototype.name="CustomError",T(C,P),C.prototype.name="AssertionError",L.prototype.get=function(){if(0/g,nt=/"/g,et=/'/g,it=/\x00/g,rt=/[\x00&<>"']/;function ot(t,n){return-1!=t.indexOf(n)}function at(t,n){return tn?1:0}t:{var st=s.navigator;if(st){var ut=st.userAgent;if(ut){z=ut;break t}}z=""}function ct(t){return ot(z,t)}function ht(t,n){for(var e in t)n.call(void 0,t[e],e,t)}function lt(t){for(var n in t)return!1;return!0}function ft(t){var n,e={};for(n in t)e[n]=t[n];return e}var dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function pt(t,n){for(var e,i,r=1;r"}else o=void 0===t?"undefined":null===t?"null":typeof t;D("Argument is not a %s (or a non-Element, non-Location mock); got: %s",n,o)}}function mt(t,n){this.a=t===yt&&n||"",this.b=bt}function gt(t){return t instanceof mt&&t.constructor===mt&&t.b===bt?t.a:(D("expected object of type Const, got '"+t+"'"),"type_error:Const")}mt.prototype.ra=!0,mt.prototype.qa=function(){return this.a},mt.prototype.toString=function(){return"Const{"+this.a+"}"};var bt={},yt={},wt=new mt(yt,"");function It(t,n){this.a=t===Nt&&n||"",this.b=St}function Tt(t){return t instanceof It&&t.constructor===It&&t.b===St?t.a:(D("expected object of type TrustedResourceUrl, got '"+t+"' of type "+l(t)),"type_error:TrustedResourceUrl")}function Et(t,n){var e=gt(t);if(!kt.test(e))throw Error("Invalid TrustedResourceUrl format: "+e);return t=e.replace(At,(function(t,i){if(!Object.prototype.hasOwnProperty.call(n,i))throw Error('Found marker, "'+i+'", in format string, "'+e+'", but no valid label mapping found in args: '+JSON.stringify(n));return(t=n[i])instanceof mt?gt(t):encodeURIComponent(String(t))})),new It(Nt,t)}It.prototype.ra=!0,It.prototype.qa=function(){return this.a.toString()},It.prototype.toString=function(){return"TrustedResourceUrl{"+this.a+"}"};var At=/%{(\w+)}/g,kt=/^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i,St={},Nt={};function _t(t,n){this.a=t===Dt&&n||"",this.b=Ct}function Ot(t){return t instanceof _t&&t.constructor===_t&&t.b===Ct?t.a:(D("expected object of type SafeUrl, got '"+t+"' of type "+l(t)),"type_error:SafeUrl")}_t.prototype.ra=!0,_t.prototype.qa=function(){return this.a.toString()},_t.prototype.toString=function(){return"SafeUrl{"+this.a+"}"};var Rt=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Pt(t){return t instanceof _t?t:(t="object"==typeof t&&t.ra?t.qa():String(t),Rt.test(t)||(t="about:invalid#zClosurez"),new _t(Dt,t))}var Ct={},Dt={};function Lt(){this.a="",this.b=xt}function Mt(t){return t instanceof Lt&&t.constructor===Lt&&t.b===xt?t.a:(D("expected object of type SafeHtml, got '"+t+"' of type "+l(t)),"type_error:SafeHtml")}Lt.prototype.ra=!0,Lt.prototype.qa=function(){return this.a.toString()},Lt.prototype.toString=function(){return"SafeHtml{"+this.a+"}"};var xt={};function jt(t){var n=new Lt;return n.a=t,n}jt("");var Ut=jt("");function Vt(t,n){for(var e=t.split("%s"),i="",r=Array.prototype.slice.call(arguments,1);r.length&&1")&&(t=t.replace(tt,">")),-1!=t.indexOf('"')&&(t=t.replace(nt,""")),-1!=t.indexOf("'")&&(t=t.replace(et,"'")),-1!=t.indexOf("\0")&&(t=t.replace(it,""))),t}function qt(t){return qt[" "](t),t}jt("
"),qt[" "]=h;var Kt,Ht,Gt=ct("Opera"),Bt=ct("Trident")||ct("MSIE"),Wt=ct("Edge"),Xt=Wt||Bt,Jt=ct("Gecko")&&!(ot(z.toLowerCase(),"webkit")&&!ct("Edge"))&&!(ct("Trident")||ct("MSIE"))&&!ct("Edge"),Yt=ot(z.toLowerCase(),"webkit")&&!ct("Edge");function zt(){var t=s.document;return t?t.documentMode:void 0}t:{var $t="",Zt=(Ht=z,Jt?/rv:([^\);]+)(\)|;)/.exec(Ht):Wt?/Edge\/([\d\.]+)/.exec(Ht):Bt?/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(Ht):Yt?/WebKit\/(\S+)/.exec(Ht):Gt?/(?:Version)[ \/]?(\S+)/.exec(Ht):void 0);if(Zt&&($t=Zt?Zt[1]:""),Bt){var Qt=zt();if(null!=Qt&&Qt>parseFloat($t)){Kt=String(Qt);break t}}Kt=$t}var tn,nn={};function en(t){return function(t,n){var e=nn;return Object.prototype.hasOwnProperty.call(e,t)?e[t]:e[t]=n(t)}(t,(function(){for(var n=0,e=$(String(Kt)).split("."),i=$(String(t)).split("."),r=Math.max(e.length,i.length),o=0;0==n&&o=t.keyCode)&&(t.keyCode=-1)}catch(t){}},Xn.prototype.f=function(){return this.a};var Yn="closure_listenable_"+(1e6*Math.random()|0),zn=0;function $n(t,n,e,i,r){this.listener=t,this.proxy=null,this.src=n,this.type=e,this.capture=!!i,this.Ta=r,this.key=++zn,this.ua=this.Na=!1}function Zn(t){t.ua=!0,t.listener=null,t.proxy=null,t.src=null,t.Ta=null}function Qn(t){this.src=t,this.a={},this.b=0}function te(t,n){var e=n.type;e in t.a&&W(t.a[e],n)&&(Zn(n),0==t.a[e].length&&(delete t.a[e],t.b--))}function ne(t,n,e,i){for(var r=0;ri.keyCode||null!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(t){r=!0}(r||null==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=n.b;r;r=r.parentNode)i.push(r);for(t=t.type,r=i.length-1;0<=r;r--){n.b=i[r];var o=he(i[r],t,!0,n);e=e&&o}for(r=0;r>>0);function ve(t){return d(t)?t:(t[pe]||(t[pe]=function(n){return t.handleEvent(n)}),t[pe])}function me(){Fn.call(this),this.u=new Qn(this),this.Yb=this,this.eb=null}function ge(t,n,e,i,r){t.u.add(String(n),e,!1,i,r)}function be(t,n,e,i,r){t.u.add(String(n),e,!0,i,r)}function ye(t,n,e,i){if(!(n=t.u.a[String(n)]))return!0;n=n.concat();for(var r=!0,o=0;on)throw Error("Bad port number "+n);t.l=n}else t.l=null}function Pe(t,n,e){n instanceof Ge?(t.a=n,function(t,n){n&&!t.f&&(Be(t),t.c=null,t.a.forEach((function(t,n){var e=n.toLowerCase();n!=e&&(Xe(this,n),Ye(this,e,t))}),t)),t.f=n}(t.a,t.h)):(e||(n=je(n,Ke)),t.a=new Ge(n,t.h))}function Ce(t,n,e){t.a.set(n,e)}function De(t,n){return t.a.get(n)}function Le(t){return t instanceof _e?new _e(t):new _e(t,void 0)}function Me(t,n){var e=new _e(null,void 0);return Oe(e,"https"),t&&(e.b=t),n&&(e.c=n),e}function xe(t,n){return t?n?decodeURI(t.replace(/%25/g,"%2525")):decodeURIComponent(t):""}function je(t,n,e){return"string"==typeof t?(t=encodeURI(t).replace(n,Ue),e&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function Ue(t){return"%"+((t=t.charCodeAt(0))>>4&15).toString(16)+(15&t).toString(16)}_e.prototype.toString=function(){var t=[],n=this.f;n&&t.push(je(n,Ve,!0),":");var e=this.b;return(e||"file"==n)&&(t.push("//"),(n=this.i)&&t.push(je(n,Ve,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(e=this.l)&&t.push(":",String(e))),(e=this.c)&&(this.b&&"/"!=e.charAt(0)&&t.push("/"),t.push(je(e,"/"==e.charAt(0)?qe:Fe,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.g)&&t.push("#",je(e,He)),t.join("")},_e.prototype.resolve=function(t){var n=new _e(this),e=!!t.f;e?Oe(n,t.f):e=!!t.i,e?n.i=t.i:e=!!t.b,e?n.b=t.b:e=null!=t.l;var i=t.c;if(e)Re(n,t.l);else if(e=!!t.c){if("/"!=i.charAt(0))if(this.b&&!this.c)i="/"+i;else{var r=n.c.lastIndexOf("/");-1!=r&&(i=n.c.substr(0,r+1)+i)}if(".."==(r=i)||"."==r)i="";else if(ot(r,"./")||ot(r,"/.")){i=0==r.lastIndexOf("/",0),r=r.split("/");for(var o=[],a=0;a2*t.c&&ke(t)))}function Je(t,n){return Be(t),n=$e(t,n),Se(t.a.b,n)}function Ye(t,n,e){Xe(t,n),0'),i=a.document)&&(i.write(Mt(t)),i.close())):(a=i.open(Ot(n),e,a))&&t.noopener&&(a.opener=null),a)try{a.focus()}catch(t){}return a}var ci=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,hi=/^[^@]+@[^@]+$/;function li(){var t=null;return new yn((function(n){"complete"==s.document.readyState?n():(t=function(){n()},ae(window,"load",t))})).o((function(n){throw se(window,"load",t),n}))}function fi(t){return t=t||Ti(),!("file:"!==Ni()&&"ionic:"!==Ni()||!t.toLowerCase().match(/iphone|ipad|ipod|android/))}function di(){var t=s.window;try{return!(!t||t==t.top)}catch(t){return!1}}function pi(){return void 0!==s.WorkerGlobalScope&&"function"==typeof s.importScripts}function vi(){return t.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":t.INTERNAL.hasOwnProperty("node")?"Node":pi()?"Worker":"Browser"}function mi(){var t=vi();return"ReactNative"===t||"Node"===t}var gi="Firefox",bi="Chrome";function yi(t){var n=t.toLowerCase();return ot(n,"opera/")||ot(n,"opr/")||ot(n,"opios/")?"Opera":ot(n,"iemobile")?"IEMobile":ot(n,"msie")||ot(n,"trident/")?"IE":ot(n,"edge/")?"Edge":ot(n,"firefox/")?gi:ot(n,"silk/")?"Silk":ot(n,"blackberry")?"Blackberry":ot(n,"webos")?"Webos":!ot(n,"safari/")||ot(n,"chrome/")||ot(n,"crios/")||ot(n,"android")?!ot(n,"chrome/")&&!ot(n,"crios/")||ot(n,"edge/")?ot(n,"android")?"Android":(t=t.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==t.length?t[1]:"Other":bi:"Safari"}var wi={jd:"FirebaseCore-web",ld:"FirebaseUI-web"};function Ii(t,n){n=n||[];var e,i=[],r={};for(e in wi)r[wi[e]]=!0;for(e=0;en)throw Error("Short delay should be less than long delay!");this.a=t,this.c=n,t=Ti(),n=vi(),this.b=ai(t)||"ReactNative"===n}function xi(){var t=s.document;return!t||void 0===t.visibilityState||"visible"==t.visibilityState}function ji(t){try{var n=new Date(parseInt(t,10));if(!isNaN(n.getTime())&&!/[^0-9]/.test(t))return n.toUTCString()}catch(t){}return null}function Ui(){return!(!Ei("fireauth.oauthhelper",s)&&!Ei("fireauth.iframe",s))}Mi.prototype.get=function(){var t=s.navigator;return!t||"boolean"!=typeof t.onLine||!Si()&&"chrome-extension:"!==Ni()&&void 0===t.connection||t.onLine?this.b?this.c:this.a:Math.min(5e3,this.a)};var Vi,Fi={};function qi(t){Fi[t]||(Fi[t]=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(t))}try{var Ki={};Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:1}),Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:2}),Vi=2==Ki.abcd}catch(Ht){Vi=!1}function Hi(t,n,e){Vi?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,value:e}):t[n]=e}function Gi(t,n){if(n)for(var e in n)n.hasOwnProperty(e)&&Hi(t,e,n[e])}function Bi(t){var n={};return Gi(n,t),n}function Wi(t){var n=t;if("object"==typeof t&&null!=t)for(var e in n="length"in t?[]:{},t)Hi(n,e,Wi(t[e]));return n}function Xi(t){var n=t&&(t[Zi]?"phone":null);if(!(n&&t&&t[$i]))throw new E("internal-error","Internal assert: invalid MultiFactorInfo object");Hi(this,"uid",t[$i]),Hi(this,"displayName",t[Yi]||null);var e=null;t[zi]&&(e=new Date(t[zi]).toUTCString()),Hi(this,"enrollmentTime",e),Hi(this,"factorId",n)}function Ji(t){try{var n=new Qi(t)}catch(t){n=null}return n}Xi.prototype.v=function(){return{uid:this.uid,displayName:this.displayName,factorId:this.factorId,enrollmentTime:this.enrollmentTime}};var Yi="displayName",zi="enrolledAt",$i="mfaEnrollmentId",Zi="phoneInfo";function Qi(t){Xi.call(this,t),Hi(this,"phoneNumber",t[Zi])}function tr(t){var n={},e=t[rr],i=t[ar],r=t[sr];if(t=Ji(t[or]),!r||r!=er&&r!=ir&&!e||r==ir&&!i||r==nr&&!t)throw Error("Invalid checkActionCode response!");r==ir?(n[cr]=e||null,n[lr]=e||null,n[ur]=i):(n[cr]=i||null,n[lr]=i||null,n[ur]=e||null),n[hr]=t||null,Hi(this,dr,r),Hi(this,fr,Wi(n))}T(Qi,Xi),Qi.prototype.v=function(){var t=Qi.Za.v.call(this);return t.phoneNumber=this.phoneNumber,t};var nr="REVERT_SECOND_FACTOR_ADDITION",er="EMAIL_SIGNIN",ir="VERIFY_AND_CHANGE_EMAIL",rr="email",or="mfaInfo",ar="newEmail",sr="requestType",ur="email",cr="fromEmail",hr="multiFactorInfo",lr="previousEmail",fr="data",dr="operation";function pr(t){var n=De(t=Le(t),vr)||null,e=De(t,mr)||null,i=De(t,yr)||null;if(i=i&&Ir[i]||null,!n||!e||!i)throw new E("argument-error",vr+", "+mr+"and "+yr+" are required in a valid action code URL.");Gi(this,{apiKey:n,operation:i,code:e,continueUrl:De(t,gr)||null,languageCode:De(t,br)||null,tenantId:De(t,wr)||null})}var vr="apiKey",mr="oobCode",gr="continueUrl",br="languageCode",yr="mode",wr="tenantId",Ir={recoverEmail:"RECOVER_EMAIL",resetPassword:"PASSWORD_RESET",revertSecondFactorAddition:nr,signIn:er,verifyAndChangeEmail:ir,verifyEmail:"VERIFY_EMAIL"};function Tr(t){try{return new pr(t)}catch(t){return null}}function Er(t){var n=t[_r];if(void 0===n)throw new E("missing-continue-uri");if("string"!=typeof n||"string"==typeof n&&!n.length)throw new E("invalid-continue-uri");this.h=n,this.b=this.a=null,this.g=!1;var e=t[Ar];if(e&&"object"==typeof e){n=e[Pr];var i=e[Or];if(e=e[Rr],"string"==typeof n&&n.length){if(this.a=n,void 0!==i&&"boolean"!=typeof i)throw new E("argument-error",Or+" property must be a boolean when specified.");if(this.g=!!i,void 0!==e&&("string"!=typeof e||"string"==typeof e&&!e.length))throw new E("argument-error",Rr+" property must be a non empty string when specified.");this.b=e||null}else{if(void 0!==n)throw new E("argument-error",Pr+" property must be a non empty string when specified.");if(void 0!==i||void 0!==e)throw new E("missing-android-pkg-name")}}else if(void 0!==e)throw new E("argument-error",Ar+" property must be a non null object when specified.");if(this.f=null,(n=t[Nr])&&"object"==typeof n){if("string"==typeof(n=n[Cr])&&n.length)this.f=n;else if(void 0!==n)throw new E("argument-error",Cr+" property must be a non empty string when specified.")}else if(void 0!==n)throw new E("argument-error",Nr+" property must be a non null object when specified.");if(void 0!==(n=t[Sr])&&"boolean"!=typeof n)throw new E("argument-error",Sr+" property must be a boolean when specified.");if(this.c=!!n,void 0!==(t=t[kr])&&("string"!=typeof t||"string"==typeof t&&!t.length))throw new E("argument-error",kr+" property must be a non empty string when specified.");this.i=t||null}var Ar="android",kr="dynamicLinkDomain",Sr="handleCodeInApp",Nr="iOS",_r="url",Or="installApp",Rr="minimumVersion",Pr="packageName",Cr="bundleId";function Dr(t){var n={};for(var e in n.continueUrl=t.h,n.canHandleCodeInApp=t.c,(n.androidPackageName=t.a)&&(n.androidMinimumVersion=t.b,n.androidInstallApp=t.g),n.iOSBundleId=t.f,n.dynamicLinkDomain=t.i,n)null===n[e]&&delete n[e];return n}var Lr=null;function Mr(t){var n="";return function(t,n){function e(n){for(;ie;e++)for(var i=t.concat(n[e].split("")),r=0;r>4),64!=a&&(n(o<<4&240|a>>2),64!=s&&n(a<<6&192|s))}}(t,(function(t){n+=String.fromCharCode(t)})),n}function xr(t){var n=Ur(t);if(!(n&&n.sub&&n.iss&&n.aud&&n.exp))throw Error("Invalid JWT");this.g=t,this.c=n.exp,this.h=n.sub,this.a=n.provider_id||n.firebase&&n.firebase.sign_in_provider||null,this.f=n.firebase&&n.firebase.tenant||null,this.b=!!n.is_anonymous||"anonymous"==this.a}function jr(t){try{return new xr(t)}catch(t){return null}}function Ur(t){if(!t)return null;if(3!=(t=t.split(".")).length)return null;for(var n=(4-(t=t[1]).length%4)%4,e=0;e Auth section -> Sign in method tab.",t):"http"==i||"https"==i?e=Vt("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",t):n="operation-not-supported-in-this-environment",E.call(this,n,e)}function Fo(t,n,e){E.call(this,t,e),(t=n||{}).Gb&&Hi(this,"email",t.Gb),t.da&&Hi(this,"phoneNumber",t.da),t.credential&&Hi(this,"credential",t.credential),t.Wb&&Hi(this,"tenantId",t.Wb)}function qo(t){if(t.code){var n=t.code||"";0==n.indexOf(S)&&(n=n.substring(S.length));var e={credential:Co(t),Wb:t.tenantId};if(t.email)e.Gb=t.email;else if(t.phoneNumber)e.da=t.phoneNumber;else if(!e.credential)return new E(n,t.message||void 0);return new Fo(n,e,t.message)}return null}function Ko(){}function Ho(t){return t.c||(t.c=t.b())}function Go(){}function Bo(t){if(!t.f&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var n=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],e=0;e=function t(n){return n.c?n.c:n.a?t(n.a):(D("Root logger has no level set."),null)}(this).value)for(d(n)&&(n=n()),t=new Yo(t,String(n),this.f),e&&(t.a=e),e=this;e;)e=e.a};var ea={},ia=null;function ra(t){var n;if(ia||(ia=new zo(""),ea[""]=ia,ia.c=ta),!(n=ea[t])){n=new zo(t);var e=t.lastIndexOf("."),i=t.substr(e+1);(e=ra(t.substr(0,e))).b||(e.b={}),e.b[i]=n,n.a=e,ea[t]=n}return n}function oa(t,n){t&&t.log(na,n,void 0)}function aa(t){this.f=t}function sa(t){me.call(this),this.s=t,this.readyState=ua,this.status=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.i=new Headers,this.b=null,this.m="GET",this.g="",this.a=!1,this.h=ra("goog.net.FetchXmlHttp"),this.l=this.c=this.f=null}T(aa,Ko),aa.prototype.a=function(){return new sa(this.f)},aa.prototype.b=function(t){return function(){return t}}({}),T(sa,me);var ua=0;function ca(t){t.c.read().then(t.nc.bind(t)).catch(t.Sa.bind(t))}function ha(t,n){n&&t.f&&(t.status=t.f.status,t.statusText=t.f.statusText),t.readyState=4,t.f=null,t.c=null,t.l=null,la(t)}function la(t){t.onreadystatechange&&t.onreadystatechange.call(t)}function fa(t){me.call(this),this.headers=new Ae,this.D=t||null,this.c=!1,this.B=this.a=null,this.h=this.P=this.l="",this.f=this.O=this.i=this.N=!1,this.g=0,this.s=null,this.m=da,this.w=this.R=!1}(n=sa.prototype).open=function(t,n){if(this.readyState!=ua)throw this.abort(),Error("Error reopening a connection");this.m=t,this.g=n,this.readyState=1,la(this)},n.send=function(t){if(1!=this.readyState)throw this.abort(),Error("need to call open() first. ");this.a=!0;var n={headers:this.i,method:this.m,credentials:void 0,cache:void 0};t&&(n.body=t),this.s.fetch(new Request(this.g,n)).then(this.sc.bind(this),this.Sa.bind(this))},n.abort=function(){this.response=this.responseText="",this.i=new Headers,this.status=0,this.c&&this.c.cancel("Request was aborted."),1<=this.readyState&&this.a&&4!=this.readyState&&(this.a=!1,ha(this,!1)),this.readyState=ua},n.sc=function(t){this.a&&(this.f=t,this.b||(this.b=t.headers,this.readyState=2,la(this)),this.a&&(this.readyState=3,la(this),this.a&&("arraybuffer"===this.responseType?t.arrayBuffer().then(this.qc.bind(this),this.Sa.bind(this)):void 0!==s.ReadableStream&&"body"in t?(this.response=this.responseText="",this.c=t.body.getReader(),this.l=new TextDecoder,ca(this)):t.text().then(this.rc.bind(this),this.Sa.bind(this)))))},n.nc=function(t){if(this.a){var n=this.l.decode(t.value?t.value:new Uint8Array(0),{stream:!t.done});n&&(this.response=this.responseText+=n),t.done?ha(this,!0):la(this),3==this.readyState&&ca(this)}},n.rc=function(t){this.a&&(this.response=this.responseText=t,ha(this,!0))},n.qc=function(t){this.a&&(this.response=t,ha(this,!0))},n.Sa=function(t){var n=this.h;n&&n.log(Qo,"Failed to fetch url "+this.g,t instanceof Error?t:Error(t)),this.a&&ha(this,!0)},n.setRequestHeader=function(t,n){this.i.append(t,n)},n.getResponseHeader=function(t){return this.b?this.b.get(t.toLowerCase())||"":((t=this.h)&&t.log(Qo,"Attempting to get response header but no headers have been received for url: "+this.g,void 0),"")},n.getAllResponseHeaders=function(){if(!this.b){var t=this.h;return t&&t.log(Qo,"Attempting to get all response headers but no headers have been received for url: "+this.g,void 0),""}t=[];for(var n=this.b.entries(),e=n.next();!e.done;)e=e.value,t.push(e[0]+": "+e[1]),e=n.next();return t.join("\r\n")},T(fa,me);var da="";fa.prototype.b=ra("goog.net.XhrIo");var pa=/^https?$/i,va=["POST","PUT"];function ma(t,n,e,i,r){if(t.a)throw Error("[goog.net.XhrIo] Object is active with another request="+t.l+"; newUri="+n);e=e?e.toUpperCase():"GET",t.l=n,t.h="",t.P=e,t.N=!1,t.c=!0,t.a=t.D?t.D.a():jo.a(),t.B=t.D?Ho(t.D):Ho(jo),t.a.onreadystatechange=y(t.Sb,t);try{oa(t.b,ka(t,"Opening Xhr")),t.O=!0,t.a.open(e,String(n),!0),t.O=!1}catch(n){return oa(t.b,ka(t,"Error opening Xhr: "+n.message)),void ba(t,n)}n=i||"";var o=new Ae(t.headers);r&&function(t,n){if(t.forEach&&"function"==typeof t.forEach)t.forEach(n,void 0);else if(f(t)||"string"==typeof t)q(t,n,void 0);else for(var e=Ee(t),i=Te(t),r=i.length,o=0;on?null:"string"==typeof t?t.charAt(n):t[n]}(o.X()),i=s.FormData&&n instanceof s.FormData,!B(va,e)||r||i||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(t,n){this.a.setRequestHeader(n,t)}),t),t.m&&(t.a.responseType=t.m),"withCredentials"in t.a&&t.a.withCredentials!==t.R&&(t.a.withCredentials=t.R);try{Ta(t),0=n.l&&n.cancel())}this.w?this.w.call(this.s,this):this.u=!0,this.a||(t=new Da(this),_a(this),Na(this,!1,t))}},Sa.prototype.m=function(t,n){this.i=!1,Na(this,t,n)},Sa.prototype.then=function(t,n,e){var i,r,o=new yn((function(t,n){i=t,r=n}));return Oa(this,i,(function(t){t instanceof Da?o.cancel():r(t)})),o.then(t,n,e)},Sa.prototype.$goog_Thenable=!0,T(Ca,P),Ca.prototype.message="Deferred has already fired",Ca.prototype.name="AlreadyCalledError",T(Da,P),Da.prototype.message="Deferred was canceled",Da.prototype.name="CanceledError",La.prototype.c=function(){throw delete Ma[this.a],this.b};var Ma={};function xa(t){var n,e=document,i=Tt(t).toString(),r=ln(document,"SCRIPT"),o={Tb:r,Ka:void 0},a=new Sa(o);return n=window.setTimeout((function(){Ua(r,!0);var t=new qa(Fa,"Timeout reached for loading script "+i);_a(a),Na(a,!1,t)}),5e3),o.Ka=n,r.onload=r.onreadystatechange=function(){r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(Ua(r,!1,n),_a(a),Na(a,!0,null))},r.onerror=function(){Ua(r,!0,n);var t=new qa(Va,"Error while loading script "+i);_a(a),Na(a,!1,t)},pt(o={},{type:"text/javascript",charset:"UTF-8"}),an(r,o),function(t,n){vt(t,"HTMLScriptElement"),t.src=Tt(n),null===c&&(c=(n=(n=s.document).querySelector&&n.querySelector("script[nonce]"))&&(n=n.nonce||n.getAttribute("nonce"))&&u.test(n)?n:""),(n=c)&&t.setAttribute("nonce",n)}(r,t),function(t){var n;return(n=(t||document).getElementsByTagName("HEAD"))&&0!=n.length?n[0]:t.documentElement}(e).appendChild(r),a}function ja(){if(this&&this.Tb){var t=this.Tb;t&&"SCRIPT"==t.tagName&&Ua(t,!0,this.Ka)}}function Ua(t,n,e){null!=e&&s.clearTimeout(e),t.onload=h,t.onerror=h,t.onreadystatechange=h,n&&window.setTimeout((function(){t&&t.parentNode&&t.parentNode.removeChild(t)}),0)}var Va=0,Fa=1;function qa(t,n){var e="Jsloader error (code #"+t+")";n&&(e+=": "+n),P.call(this,e),this.code=t}function Ka(t){this.f=t}function Ha(n,e,i){if(this.c=n,n=e||{},this.u=n.secureTokenEndpoint||"https://securetoken.googleapis.com/v1/token",this.m=n.secureTokenTimeout||Wa,this.g=ft(n.secureTokenHeaders||Xa),this.h=n.firebaseEndpoint||"https://www.googleapis.com/identitytoolkit/v3/relyingparty/",this.l=n.identityPlatformEndpoint||"https://identitytoolkit.googleapis.com/v2/",this.i=n.firebaseTimeout||Ja,this.a=ft(n.firebaseHeaders||Ya),i&&(this.a["X-Client-Version"]=i,this.g["X-Client-Version"]=i),i="Node"==vi(),!(i=s.XMLHttpRequest||i&&t.INTERNAL.node&&t.INTERNAL.node.XMLHttpRequest)&&!pi())throw new E("internal-error","The XMLHttpRequest compatibility library was not found.");this.f=void 0,pi()?this.f=new aa(self):mi()?this.f=new Ka(i):this.f=new Wo,this.b=null}T(qa,P),T(Ka,Ko),Ka.prototype.a=function(){return new this.f},Ka.prototype.b=function(){return{}};var Ga,Ba="idToken",Wa=new Mi(3e4,6e4),Xa={"Content-Type":"application/x-www-form-urlencoded"},Ja=new Mi(3e4,6e4),Ya={"Content-Type":"application/json"};function za(t,n){n?t.a["X-Firebase-Locale"]=n:delete t.a["X-Firebase-Locale"]}function $a(t,n){n?(t.a["X-Client-Version"]=n,t.g["X-Client-Version"]=n):(delete t.a["X-Client-Version"],delete t.g["X-Client-Version"])}function Za(t,n,e,i,r,o,a){(function(){var t=Ti();return!((t=yi(t)!=bi?null:(t=t.match(/\sChrome\/(\d+)/i))&&2==t.length?parseInt(t[1],10):null)&&30>t)&&(!Bt||!tn||9n;n++){r=0|e[n-15],i=0|e[n-2];var o=(0|e[n-16])+((r>>>7|r<<25)^(r>>>18|r<<14)^r>>>3)|0,a=(0|e[n-7])+((i>>>17|i<<15)^(i>>>19|i<<13)^i>>>10)|0;e[n]=o+a|0}i=0|t.a[0],r=0|t.a[1];var s=0|t.a[2],u=0|t.a[3],c=0|t.a[4],h=0|t.a[5],l=0|t.a[6];for(o=0|t.a[7],n=0;64>n;n++){var f=((i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10))+(i&r^i&s^r&s)|0;a=(o=o+((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))|0)+((a=(a=c&h^~c&l)+(0|$u[n])|0)+(0|e[n])|0)|0,o=l,l=h,h=c,c=u+a|0,u=s,s=r,r=i,i=a+f|0}t.a[0]=t.a[0]+i|0,t.a[1]=t.a[1]+r|0,t.a[2]=t.a[2]+s|0,t.a[3]=t.a[3]+u|0,t.a[4]=t.a[4]+c|0,t.a[5]=t.a[5]+h|0,t.a[6]=t.a[6]+l|0,t.a[7]=t.a[7]+o|0}function sc(t,n,e){void 0===e&&(e=n.length);var i=0,r=t.c;if("string"==typeof n)for(;i=o&&o==(0|o)))throw Error("message must be a byte array");t.f[r++]=o,r==t.b&&(ac(t),r=0)}}t.c=r,t.g+=e}tc.prototype.reset=function(){this.g=this.c=0,this.a=s.Int32Array?new Int32Array(this.h):Y(this.h)};var uc=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function cc(){tc.call(this,8,hc)}T(cc,tc);var hc=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function lc(t,n,e,i,r){this.u=t,this.i=n,this.l=e,this.m=i||null,this.s=r||null,this.h=n+":"+e,this.w=new Qu,this.g=new zu(this.h),this.f=null,this.b=[],this.a=this.c=null}function fc(t){return new E("invalid-cordova-configuration",t)}function dc(t){var n=new cc;sc(n,t),t=[];var e=8*n.g;56>n.c?sc(n,oc,56-n.c):sc(n,oc,n.b-(n.c-56));for(var i=63;56<=i;i--)n.f[i]=255&e,e/=256;for(ac(n),i=e=0;i>r&255;return function(t){return H(t,(function(t){return 1<(t=t.toString(16)).length?t:"0"+t})).join("")}(t)}function pc(t,n){for(var e=0;et.f&&(t.a=t.f),n)}(n,e)).then((function(){return function(){var t=s.document,n=null;return xi()||!t?Sn():new yn((function(e){n=function(){xi()&&(t.removeEventListener("visibilitychange",n,!1),e())},t.addEventListener("visibilitychange",n,!1)})).o((function(e){throw t.removeEventListener("visibilitychange",n,!1),e}))}()})).then((function(){return n.h()})).then((function(){t(n,!0)})).o((function(e){n.i(e)&&t(n,!1)}))}(this,!0)},nh.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)},eh.prototype.v=function(){return{apiKey:this.c.c,refreshToken:this.a,accessToken:this.b&&this.b.toString(),expirationTime:ih(this)}},eh.prototype.getToken=function(t){return t=!!t,this.b&&!this.a?Nn(new E("user-token-expired")):t||!this.b||I()>ih(this)-3e4?this.a?oh(this,{grant_type:"refresh_token",refresh_token:this.a}):Sn(null):Sn({accessToken:this.b.toString(),refreshToken:this.a})},ah.prototype.v=function(){return{lastLoginAt:this.b,createdAt:this.a}},T(uh,me),uh.prototype.va=function(t){this.oa=t,za(this.a,t)},uh.prototype.ja=function(){return this.oa},uh.prototype.Ea=function(){return Y(this.W)},uh.prototype.Ma=function(){this.B.b&&(this.B.stop(),this.B.start())},Hi(uh.prototype,"providerId","firebase"),(n=uh.prototype).reload=function(){var t=this;return Lh(this,wh(this).then((function(){return Sh(t).then((function(){return mh(t)})).then(yh)})))},n.mc=function(t){return this.I(t).then((function(t){return new Hc(t)}))},n.I=function(t){var n=this;return Lh(this,wh(this).then((function(){return n.b.getToken(t)})).then((function(t){if(!t)throw new E("internal-error");return t.accessToken!=n.xa&&(vh(n,t.accessToken),n.dispatchEvent(new Zc("tokenChanged"))),Ah(n,"refreshToken",t.refreshToken),t.accessToken})))},n.Ic=function(t){if(!(t=t.users)||!t.length)throw new E("internal-error");bh(this,{uid:(t=t[0]).localId,displayName:t.displayName,photoURL:t.photoUrl,email:t.email,emailVerified:!!t.emailVerified,phoneNumber:t.phoneNumber,lastLoginAt:t.lastLoginAt,createdAt:t.createdAt,tenantId:t.tenantId});for(var n=function(t){return(t=t.providerUserInfo)&&t.length?H(t,(function(t){return new sh(t.rawId,t.providerId,t.email,t.displayName,t.photoUrl,t.phoneNumber)})):[]}(t),e=0;ethis.s&&(this.s=0),0==this.s&&el(this)&&ph(el(this)),this.removeAuthTokenListener(t)},n.addAuthTokenListener=function(t){var n=this;this.m.push(t),ol(this,this.h.then((function(){n.l||B(n.m,t)&&t(il(n))})))},n.removeAuthTokenListener=function(t){X(this.m,(function(n){return n==t}))},n.delete=function(){this.l=!0;for(var t=0;tr||r>=Rl.length)throw new E("internal-error","Argument validator received an unsupported number of arguments.");e=Rl[r],i=(i?"":e+" argument ")+(n.name?'"'+n.name+'" ':"")+"must be "+n.J+".";break t}i=null}}if(i)throw new E("argument-error",t+" failed: "+i)}(n=wl.prototype).Ga=function(){var t=this;return this.f?this.f:this.f=Sl(this,Sn().then((function(){if(Si()&&!pi())return li();throw new E("operation-not-supported-in-this-environment","RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment.")})).then((function(){return t.m.g(t.w())})).then((function(n){return t.g=n,Js(t.s,Ps,{})})).then((function(n){t.a[El]=n.recaptchaSiteKey})).o((function(n){throw t.f=null,n})))},n.render=function(){Nl(this);var t=this;return Sl(this,this.Ga().then((function(){if(null===t.c){var n=t.u;if(!t.i){var e=on(n);n=function(t,n,e){var i=arguments,r=document,o=String(i[0]),a=i[1];if(!rn&&a&&(a.name||a.type)){if(o=["<",o],a.name&&o.push(' name="',Ft(a.name),'"'),a.type){o.push(' type="',Ft(a.type),'"');var s={};pt(s,a),delete s.type,a=s}o.push(">"),o=o.join("")}return o=ln(r,o),a&&("string"==typeof a?o.className=a:Array.isArray(a)?o.className=a.join(" "):an(o,a)),2>>0),m=0;function g(t,n,e){return t.call.apply(t.bind,arguments)}function b(t,n,e){if(!t)throw Error();if(2t.b&&(t.b++,n.next=t.a,t.a=n)}function x(){this.b=this.a=null}k=O("__EID__")?"__EID__":void 0,T(P,Error),P.prototype.name="CustomError",T(C,P),C.prototype.name="AssertionError",L.prototype.get=function(){if(0/g,nt=/"/g,et=/'/g,it=/\x00/g,rt=/[\x00&<>"']/;function ot(t,n){return-1!=t.indexOf(n)}function at(t,n){return tn?1:0}t:{var st=s.navigator;if(st){var ut=st.userAgent;if(ut){z=ut;break t}}z=""}function ct(t){return ot(z,t)}function ht(t,n){for(var e in t)n.call(void 0,t[e],e,t)}function lt(t){for(var n in t)return!1;return!0}function ft(t){var n,e={};for(n in t)e[n]=t[n];return e}var dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function pt(t,n){for(var e,i,r=1;r"}else o=void 0===t?"undefined":null===t?"null":typeof t;D("Argument is not a %s (or a non-Element, non-Location mock); got: %s",n,o)}}function mt(t,n){this.a=t===yt&&n||"",this.b=bt}function gt(t){return t instanceof mt&&t.constructor===mt&&t.b===bt?t.a:(D("expected object of type Const, got '"+t+"'"),"type_error:Const")}mt.prototype.ra=!0,mt.prototype.qa=function(){return this.a},mt.prototype.toString=function(){return"Const{"+this.a+"}"};var bt={},yt={},wt=new mt(yt,"");function It(t,n){this.a=t===Nt&&n||"",this.b=St}function Tt(t){return t instanceof It&&t.constructor===It&&t.b===St?t.a:(D("expected object of type TrustedResourceUrl, got '"+t+"' of type "+l(t)),"type_error:TrustedResourceUrl")}function Et(t,n){var e=gt(t);if(!kt.test(e))throw Error("Invalid TrustedResourceUrl format: "+e);return t=e.replace(At,(function(t,i){if(!Object.prototype.hasOwnProperty.call(n,i))throw Error('Found marker, "'+i+'", in format string, "'+e+'", but no valid label mapping found in args: '+JSON.stringify(n));return(t=n[i])instanceof mt?gt(t):encodeURIComponent(String(t))})),new It(Nt,t)}It.prototype.ra=!0,It.prototype.qa=function(){return this.a.toString()},It.prototype.toString=function(){return"TrustedResourceUrl{"+this.a+"}"};var At=/%{(\w+)}/g,kt=/^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i,St={},Nt={};function _t(t,n){this.a=t===Dt&&n||"",this.b=Ct}function Ot(t){return t instanceof _t&&t.constructor===_t&&t.b===Ct?t.a:(D("expected object of type SafeUrl, got '"+t+"' of type "+l(t)),"type_error:SafeUrl")}_t.prototype.ra=!0,_t.prototype.qa=function(){return this.a.toString()},_t.prototype.toString=function(){return"SafeUrl{"+this.a+"}"};var Rt=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Pt(t){return t instanceof _t?t:(t="object"==typeof t&&t.ra?t.qa():String(t),Rt.test(t)||(t="about:invalid#zClosurez"),new _t(Dt,t))}var Ct={},Dt={};function Lt(){this.a="",this.b=xt}function Mt(t){return t instanceof Lt&&t.constructor===Lt&&t.b===xt?t.a:(D("expected object of type SafeHtml, got '"+t+"' of type "+l(t)),"type_error:SafeHtml")}Lt.prototype.ra=!0,Lt.prototype.qa=function(){return this.a.toString()},Lt.prototype.toString=function(){return"SafeHtml{"+this.a+"}"};var xt={};function jt(t){var n=new Lt;return n.a=t,n}jt("");var Ut=jt("");function Vt(t,n){for(var e=t.split("%s"),i="",r=Array.prototype.slice.call(arguments,1);r.length&&1")&&(t=t.replace(tt,">")),-1!=t.indexOf('"')&&(t=t.replace(nt,""")),-1!=t.indexOf("'")&&(t=t.replace(et,"'")),-1!=t.indexOf("\0")&&(t=t.replace(it,""))),t}function qt(t){return qt[" "](t),t}jt("
"),qt[" "]=h;var Kt,Ht,Gt=ct("Opera"),Bt=ct("Trident")||ct("MSIE"),Wt=ct("Edge"),Xt=Wt||Bt,Jt=ct("Gecko")&&!(ot(z.toLowerCase(),"webkit")&&!ct("Edge"))&&!(ct("Trident")||ct("MSIE"))&&!ct("Edge"),Yt=ot(z.toLowerCase(),"webkit")&&!ct("Edge");function zt(){var t=s.document;return t?t.documentMode:void 0}t:{var $t="",Zt=(Ht=z,Jt?/rv:([^\);]+)(\)|;)/.exec(Ht):Wt?/Edge\/([\d\.]+)/.exec(Ht):Bt?/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(Ht):Yt?/WebKit\/(\S+)/.exec(Ht):Gt?/(?:Version)[ \/]?(\S+)/.exec(Ht):void 0);if(Zt&&($t=Zt?Zt[1]:""),Bt){var Qt=zt();if(null!=Qt&&Qt>parseFloat($t)){Kt=String(Qt);break t}}Kt=$t}var tn,nn={};function en(t){return function(t,n){var e=nn;return Object.prototype.hasOwnProperty.call(e,t)?e[t]:e[t]=n(t)}(t,(function(){for(var n=0,e=$(String(Kt)).split("."),i=$(String(t)).split("."),r=Math.max(e.length,i.length),o=0;0==n&&o=t.keyCode)&&(t.keyCode=-1)}catch(t){}},Xn.prototype.f=function(){return this.a};var Yn="closure_listenable_"+(1e6*Math.random()|0),zn=0;function $n(t,n,e,i,r){this.listener=t,this.proxy=null,this.src=n,this.type=e,this.capture=!!i,this.Ta=r,this.key=++zn,this.ua=this.Na=!1}function Zn(t){t.ua=!0,t.listener=null,t.proxy=null,t.src=null,t.Ta=null}function Qn(t){this.src=t,this.a={},this.b=0}function te(t,n){var e=n.type;e in t.a&&W(t.a[e],n)&&(Zn(n),0==t.a[e].length&&(delete t.a[e],t.b--))}function ne(t,n,e,i){for(var r=0;ri.keyCode||null!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(t){r=!0}(r||null==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=n.b;r;r=r.parentNode)i.push(r);for(t=t.type,r=i.length-1;0<=r;r--){n.b=i[r];var o=he(i[r],t,!0,n);e=e&&o}for(r=0;r>>0);function ve(t){return d(t)?t:(t[pe]||(t[pe]=function(n){return t.handleEvent(n)}),t[pe])}function me(){Fn.call(this),this.u=new Qn(this),this.Yb=this,this.eb=null}function ge(t,n,e,i,r){t.u.add(String(n),e,!1,i,r)}function be(t,n,e,i,r){t.u.add(String(n),e,!0,i,r)}function ye(t,n,e,i){if(!(n=t.u.a[String(n)]))return!0;n=n.concat();for(var r=!0,o=0;on)throw Error("Bad port number "+n);t.l=n}else t.l=null}function Pe(t,n,e){n instanceof Ge?(t.a=n,function(t,n){n&&!t.f&&(Be(t),t.c=null,t.a.forEach((function(t,n){var e=n.toLowerCase();n!=e&&(Xe(this,n),Ye(this,e,t))}),t)),t.f=n}(t.a,t.h)):(e||(n=je(n,Ke)),t.a=new Ge(n,t.h))}function Ce(t,n,e){t.a.set(n,e)}function De(t,n){return t.a.get(n)}function Le(t){return t instanceof _e?new _e(t):new _e(t,void 0)}function Me(t,n){var e=new _e(null,void 0);return Oe(e,"https"),t&&(e.b=t),n&&(e.c=n),e}function xe(t,n){return t?n?decodeURI(t.replace(/%25/g,"%2525")):decodeURIComponent(t):""}function je(t,n,e){return"string"==typeof t?(t=encodeURI(t).replace(n,Ue),e&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function Ue(t){return"%"+((t=t.charCodeAt(0))>>4&15).toString(16)+(15&t).toString(16)}_e.prototype.toString=function(){var t=[],n=this.f;n&&t.push(je(n,Ve,!0),":");var e=this.b;return(e||"file"==n)&&(t.push("//"),(n=this.i)&&t.push(je(n,Ve,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(e=this.l)&&t.push(":",String(e))),(e=this.c)&&(this.b&&"/"!=e.charAt(0)&&t.push("/"),t.push(je(e,"/"==e.charAt(0)?qe:Fe,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.g)&&t.push("#",je(e,He)),t.join("")},_e.prototype.resolve=function(t){var n=new _e(this),e=!!t.f;e?Oe(n,t.f):e=!!t.i,e?n.i=t.i:e=!!t.b,e?n.b=t.b:e=null!=t.l;var i=t.c;if(e)Re(n,t.l);else if(e=!!t.c){if("/"!=i.charAt(0))if(this.b&&!this.c)i="/"+i;else{var r=n.c.lastIndexOf("/");-1!=r&&(i=n.c.substr(0,r+1)+i)}if(".."==(r=i)||"."==r)i="";else if(ot(r,"./")||ot(r,"/.")){i=0==r.lastIndexOf("/",0),r=r.split("/");for(var o=[],a=0;a2*t.c&&ke(t)))}function Je(t,n){return Be(t),n=$e(t,n),Se(t.a.b,n)}function Ye(t,n,e){Xe(t,n),0'),i=a.document)&&(i.write(Mt(t)),i.close())):(a=i.open(Ot(n),e,a))&&t.noopener&&(a.opener=null),a)try{a.focus()}catch(t){}return a}var ci=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,hi=/^[^@]+@[^@]+$/;function li(){var t=null;return new yn((function(n){"complete"==s.document.readyState?n():(t=function(){n()},ae(window,"load",t))})).o((function(n){throw se(window,"load",t),n}))}function fi(t){return t=t||Ti(),!("file:"!==Ni()&&"ionic:"!==Ni()||!t.toLowerCase().match(/iphone|ipad|ipod|android/))}function di(){var t=s.window;try{return!(!t||t==t.top)}catch(t){return!1}}function pi(){return void 0!==s.WorkerGlobalScope&&"function"==typeof s.importScripts}function vi(){return t.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":t.INTERNAL.hasOwnProperty("node")?"Node":pi()?"Worker":"Browser"}function mi(){var t=vi();return"ReactNative"===t||"Node"===t}var gi="Firefox",bi="Chrome";function yi(t){var n=t.toLowerCase();return ot(n,"opera/")||ot(n,"opr/")||ot(n,"opios/")?"Opera":ot(n,"iemobile")?"IEMobile":ot(n,"msie")||ot(n,"trident/")?"IE":ot(n,"edge/")?"Edge":ot(n,"firefox/")?gi:ot(n,"silk/")?"Silk":ot(n,"blackberry")?"Blackberry":ot(n,"webos")?"Webos":!ot(n,"safari/")||ot(n,"chrome/")||ot(n,"crios/")||ot(n,"android")?!ot(n,"chrome/")&&!ot(n,"crios/")||ot(n,"edge/")?ot(n,"android")?"Android":(t=t.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==t.length?t[1]:"Other":bi:"Safari"}var wi={jd:"FirebaseCore-web",ld:"FirebaseUI-web"};function Ii(t,n){n=n||[];var e,i=[],r={};for(e in wi)r[wi[e]]=!0;for(e=0;en)throw Error("Short delay should be less than long delay!");this.a=t,this.c=n,t=Ti(),n=vi(),this.b=ai(t)||"ReactNative"===n}function xi(){var t=s.document;return!t||void 0===t.visibilityState||"visible"==t.visibilityState}function ji(t){try{var n=new Date(parseInt(t,10));if(!isNaN(n.getTime())&&!/[^0-9]/.test(t))return n.toUTCString()}catch(t){}return null}function Ui(){return!(!Ei("fireauth.oauthhelper",s)&&!Ei("fireauth.iframe",s))}Mi.prototype.get=function(){var t=s.navigator;return!t||"boolean"!=typeof t.onLine||!Si()&&"chrome-extension:"!==Ni()&&void 0===t.connection||t.onLine?this.b?this.c:this.a:Math.min(5e3,this.a)};var Vi,Fi={};function qi(t){Fi[t]||(Fi[t]=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(t))}try{var Ki={};Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:1}),Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:2}),Vi=2==Ki.abcd}catch(Ht){Vi=!1}function Hi(t,n,e){Vi?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,value:e}):t[n]=e}function Gi(t,n){if(n)for(var e in n)n.hasOwnProperty(e)&&Hi(t,e,n[e])}function Bi(t){var n={};return Gi(n,t),n}function Wi(t){var n=t;if("object"==typeof t&&null!=t)for(var e in n="length"in t?[]:{},t)Hi(n,e,Wi(t[e]));return n}function Xi(t){var n=t&&(t[Zi]?"phone":null);if(!(n&&t&&t[$i]))throw new E("internal-error","Internal assert: invalid MultiFactorInfo object");Hi(this,"uid",t[$i]),Hi(this,"displayName",t[Yi]||null);var e=null;t[zi]&&(e=new Date(t[zi]).toUTCString()),Hi(this,"enrollmentTime",e),Hi(this,"factorId",n)}function Ji(t){try{var n=new Qi(t)}catch(t){n=null}return n}Xi.prototype.v=function(){return{uid:this.uid,displayName:this.displayName,factorId:this.factorId,enrollmentTime:this.enrollmentTime}};var Yi="displayName",zi="enrolledAt",$i="mfaEnrollmentId",Zi="phoneInfo";function Qi(t){Xi.call(this,t),Hi(this,"phoneNumber",t[Zi])}function tr(t){var n={},e=t[rr],i=t[ar],r=t[sr];if(t=Ji(t[or]),!r||r!=er&&r!=ir&&!e||r==ir&&!i||r==nr&&!t)throw Error("Invalid checkActionCode response!");r==ir?(n[cr]=e||null,n[lr]=e||null,n[ur]=i):(n[cr]=i||null,n[lr]=i||null,n[ur]=e||null),n[hr]=t||null,Hi(this,dr,r),Hi(this,fr,Wi(n))}T(Qi,Xi),Qi.prototype.v=function(){var t=Qi.Za.v.call(this);return t.phoneNumber=this.phoneNumber,t};var nr="REVERT_SECOND_FACTOR_ADDITION",er="EMAIL_SIGNIN",ir="VERIFY_AND_CHANGE_EMAIL",rr="email",or="mfaInfo",ar="newEmail",sr="requestType",ur="email",cr="fromEmail",hr="multiFactorInfo",lr="previousEmail",fr="data",dr="operation";function pr(t){var n=De(t=Le(t),vr)||null,e=De(t,mr)||null,i=De(t,yr)||null;if(i=i&&Ir[i]||null,!n||!e||!i)throw new E("argument-error",vr+", "+mr+"and "+yr+" are required in a valid action code URL.");Gi(this,{apiKey:n,operation:i,code:e,continueUrl:De(t,gr)||null,languageCode:De(t,br)||null,tenantId:De(t,wr)||null})}var vr="apiKey",mr="oobCode",gr="continueUrl",br="languageCode",yr="mode",wr="tenantId",Ir={recoverEmail:"RECOVER_EMAIL",resetPassword:"PASSWORD_RESET",revertSecondFactorAddition:nr,signIn:er,verifyAndChangeEmail:ir,verifyEmail:"VERIFY_EMAIL"};function Tr(t){try{return new pr(t)}catch(t){return null}}function Er(t){var n=t[_r];if(void 0===n)throw new E("missing-continue-uri");if("string"!=typeof n||"string"==typeof n&&!n.length)throw new E("invalid-continue-uri");this.h=n,this.b=this.a=null,this.g=!1;var e=t[Ar];if(e&&"object"==typeof e){n=e[Pr];var i=e[Or];if(e=e[Rr],"string"==typeof n&&n.length){if(this.a=n,void 0!==i&&"boolean"!=typeof i)throw new E("argument-error",Or+" property must be a boolean when specified.");if(this.g=!!i,void 0!==e&&("string"!=typeof e||"string"==typeof e&&!e.length))throw new E("argument-error",Rr+" property must be a non empty string when specified.");this.b=e||null}else{if(void 0!==n)throw new E("argument-error",Pr+" property must be a non empty string when specified.");if(void 0!==i||void 0!==e)throw new E("missing-android-pkg-name")}}else if(void 0!==e)throw new E("argument-error",Ar+" property must be a non null object when specified.");if(this.f=null,(n=t[Nr])&&"object"==typeof n){if("string"==typeof(n=n[Cr])&&n.length)this.f=n;else if(void 0!==n)throw new E("argument-error",Cr+" property must be a non empty string when specified.")}else if(void 0!==n)throw new E("argument-error",Nr+" property must be a non null object when specified.");if(void 0!==(n=t[Sr])&&"boolean"!=typeof n)throw new E("argument-error",Sr+" property must be a boolean when specified.");if(this.c=!!n,void 0!==(t=t[kr])&&("string"!=typeof t||"string"==typeof t&&!t.length))throw new E("argument-error",kr+" property must be a non empty string when specified.");this.i=t||null}var Ar="android",kr="dynamicLinkDomain",Sr="handleCodeInApp",Nr="iOS",_r="url",Or="installApp",Rr="minimumVersion",Pr="packageName",Cr="bundleId";function Dr(t){var n={};for(var e in n.continueUrl=t.h,n.canHandleCodeInApp=t.c,(n.androidPackageName=t.a)&&(n.androidMinimumVersion=t.b,n.androidInstallApp=t.g),n.iOSBundleId=t.f,n.dynamicLinkDomain=t.i,n)null===n[e]&&delete n[e];return n}var Lr=null;function Mr(t){var n="";return function(t,n){function e(n){for(;ie;e++)for(var i=t.concat(n[e].split("")),r=0;r>4),64!=a&&(n(o<<4&240|a>>2),64!=s&&n(a<<6&192|s))}}(t,(function(t){n+=String.fromCharCode(t)})),n}function xr(t){var n=Ur(t);if(!(n&&n.sub&&n.iss&&n.aud&&n.exp))throw Error("Invalid JWT");this.g=t,this.c=n.exp,this.h=n.sub,this.a=n.provider_id||n.firebase&&n.firebase.sign_in_provider||null,this.f=n.firebase&&n.firebase.tenant||null,this.b=!!n.is_anonymous||"anonymous"==this.a}function jr(t){try{return new xr(t)}catch(t){return null}}function Ur(t){if(!t)return null;if(3!=(t=t.split(".")).length)return null;for(var n=(4-(t=t[1]).length%4)%4,e=0;e Auth section -> Sign in method tab.",t):"http"==i||"https"==i?e=Vt("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",t):n="operation-not-supported-in-this-environment",E.call(this,n,e)}function Fo(t,n,e){E.call(this,t,e),(t=n||{}).Gb&&Hi(this,"email",t.Gb),t.da&&Hi(this,"phoneNumber",t.da),t.credential&&Hi(this,"credential",t.credential),t.Wb&&Hi(this,"tenantId",t.Wb)}function qo(t){if(t.code){var n=t.code||"";0==n.indexOf(S)&&(n=n.substring(S.length));var e={credential:Co(t),Wb:t.tenantId};if(t.email)e.Gb=t.email;else if(t.phoneNumber)e.da=t.phoneNumber;else if(!e.credential)return new E(n,t.message||void 0);return new Fo(n,e,t.message)}return null}function Ko(){}function Ho(t){return t.c||(t.c=t.b())}function Go(){}function Bo(t){if(!t.f&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var n=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],e=0;e=function t(n){return n.c?n.c:n.a?t(n.a):(D("Root logger has no level set."),null)}(this).value)for(d(n)&&(n=n()),t=new Yo(t,String(n),this.f),e&&(t.a=e),e=this;e;)e=e.a};var ea={},ia=null;function ra(t){var n;if(ia||(ia=new zo(""),ea[""]=ia,ia.c=ta),!(n=ea[t])){n=new zo(t);var e=t.lastIndexOf("."),i=t.substr(e+1);(e=ra(t.substr(0,e))).b||(e.b={}),e.b[i]=n,n.a=e,ea[t]=n}return n}function oa(t,n){t&&t.log(na,n,void 0)}function aa(t){this.f=t}function sa(t){me.call(this),this.s=t,this.readyState=ua,this.status=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.i=new Headers,this.b=null,this.m="GET",this.g="",this.a=!1,this.h=ra("goog.net.FetchXmlHttp"),this.l=this.c=this.f=null}T(aa,Ko),aa.prototype.a=function(){return new sa(this.f)},aa.prototype.b=function(t){return function(){return t}}({}),T(sa,me);var ua=0;function ca(t){t.c.read().then(t.nc.bind(t)).catch(t.Sa.bind(t))}function ha(t,n){n&&t.f&&(t.status=t.f.status,t.statusText=t.f.statusText),t.readyState=4,t.f=null,t.c=null,t.l=null,la(t)}function la(t){t.onreadystatechange&&t.onreadystatechange.call(t)}function fa(t){me.call(this),this.headers=new Ae,this.D=t||null,this.c=!1,this.B=this.a=null,this.h=this.P=this.l="",this.f=this.O=this.i=this.N=!1,this.g=0,this.s=null,this.m=da,this.w=this.R=!1}(n=sa.prototype).open=function(t,n){if(this.readyState!=ua)throw this.abort(),Error("Error reopening a connection");this.m=t,this.g=n,this.readyState=1,la(this)},n.send=function(t){if(1!=this.readyState)throw this.abort(),Error("need to call open() first. ");this.a=!0;var n={headers:this.i,method:this.m,credentials:void 0,cache:void 0};t&&(n.body=t),this.s.fetch(new Request(this.g,n)).then(this.sc.bind(this),this.Sa.bind(this))},n.abort=function(){this.response=this.responseText="",this.i=new Headers,this.status=0,this.c&&this.c.cancel("Request was aborted."),1<=this.readyState&&this.a&&4!=this.readyState&&(this.a=!1,ha(this,!1)),this.readyState=ua},n.sc=function(t){this.a&&(this.f=t,this.b||(this.b=t.headers,this.readyState=2,la(this)),this.a&&(this.readyState=3,la(this),this.a&&("arraybuffer"===this.responseType?t.arrayBuffer().then(this.qc.bind(this),this.Sa.bind(this)):void 0!==s.ReadableStream&&"body"in t?(this.response=this.responseText="",this.c=t.body.getReader(),this.l=new TextDecoder,ca(this)):t.text().then(this.rc.bind(this),this.Sa.bind(this)))))},n.nc=function(t){if(this.a){var n=this.l.decode(t.value?t.value:new Uint8Array(0),{stream:!t.done});n&&(this.response=this.responseText+=n),t.done?ha(this,!0):la(this),3==this.readyState&&ca(this)}},n.rc=function(t){this.a&&(this.response=this.responseText=t,ha(this,!0))},n.qc=function(t){this.a&&(this.response=t,ha(this,!0))},n.Sa=function(t){var n=this.h;n&&n.log(Qo,"Failed to fetch url "+this.g,t instanceof Error?t:Error(t)),this.a&&ha(this,!0)},n.setRequestHeader=function(t,n){this.i.append(t,n)},n.getResponseHeader=function(t){return this.b?this.b.get(t.toLowerCase())||"":((t=this.h)&&t.log(Qo,"Attempting to get response header but no headers have been received for url: "+this.g,void 0),"")},n.getAllResponseHeaders=function(){if(!this.b){var t=this.h;return t&&t.log(Qo,"Attempting to get all response headers but no headers have been received for url: "+this.g,void 0),""}t=[];for(var n=this.b.entries(),e=n.next();!e.done;)e=e.value,t.push(e[0]+": "+e[1]),e=n.next();return t.join("\r\n")},T(fa,me);var da="";fa.prototype.b=ra("goog.net.XhrIo");var pa=/^https?$/i,va=["POST","PUT"];function ma(t,n,e,i,r){if(t.a)throw Error("[goog.net.XhrIo] Object is active with another request="+t.l+"; newUri="+n);e=e?e.toUpperCase():"GET",t.l=n,t.h="",t.P=e,t.N=!1,t.c=!0,t.a=t.D?t.D.a():jo.a(),t.B=t.D?Ho(t.D):Ho(jo),t.a.onreadystatechange=y(t.Sb,t);try{oa(t.b,ka(t,"Opening Xhr")),t.O=!0,t.a.open(e,String(n),!0),t.O=!1}catch(n){return oa(t.b,ka(t,"Error opening Xhr: "+n.message)),void ba(t,n)}n=i||"";var o=new Ae(t.headers);r&&function(t,n){if(t.forEach&&"function"==typeof t.forEach)t.forEach(n,void 0);else if(f(t)||"string"==typeof t)q(t,n,void 0);else for(var e=Ee(t),i=Te(t),r=i.length,o=0;on?null:"string"==typeof t?t.charAt(n):t[n]}(o.X()),i=s.FormData&&n instanceof s.FormData,!B(va,e)||r||i||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(t,n){this.a.setRequestHeader(n,t)}),t),t.m&&(t.a.responseType=t.m),"withCredentials"in t.a&&t.a.withCredentials!==t.R&&(t.a.withCredentials=t.R);try{Ta(t),0=n.l&&n.cancel())}this.w?this.w.call(this.s,this):this.u=!0,this.a||(t=new Da(this),_a(this),Na(this,!1,t))}},Sa.prototype.m=function(t,n){this.i=!1,Na(this,t,n)},Sa.prototype.then=function(t,n,e){var i,r,o=new yn((function(t,n){i=t,r=n}));return Oa(this,i,(function(t){t instanceof Da?o.cancel():r(t)})),o.then(t,n,e)},Sa.prototype.$goog_Thenable=!0,T(Ca,P),Ca.prototype.message="Deferred has already fired",Ca.prototype.name="AlreadyCalledError",T(Da,P),Da.prototype.message="Deferred was canceled",Da.prototype.name="CanceledError",La.prototype.c=function(){throw delete Ma[this.a],this.b};var Ma={};function xa(t){var n,e=document,i=Tt(t).toString(),r=ln(document,"SCRIPT"),o={Tb:r,Ka:void 0},a=new Sa(o);return n=window.setTimeout((function(){Ua(r,!0);var t=new qa(Fa,"Timeout reached for loading script "+i);_a(a),Na(a,!1,t)}),5e3),o.Ka=n,r.onload=r.onreadystatechange=function(){r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(Ua(r,!1,n),_a(a),Na(a,!0,null))},r.onerror=function(){Ua(r,!0,n);var t=new qa(Va,"Error while loading script "+i);_a(a),Na(a,!1,t)},pt(o={},{type:"text/javascript",charset:"UTF-8"}),an(r,o),function(t,n){vt(t,"HTMLScriptElement"),t.src=Tt(n),null===c&&(c=(n=(n=s.document).querySelector&&n.querySelector("script[nonce]"))&&(n=n.nonce||n.getAttribute("nonce"))&&u.test(n)?n:""),(n=c)&&t.setAttribute("nonce",n)}(r,t),function(t){var n;return(n=(t||document).getElementsByTagName("HEAD"))&&0!=n.length?n[0]:t.documentElement}(e).appendChild(r),a}function ja(){if(this&&this.Tb){var t=this.Tb;t&&"SCRIPT"==t.tagName&&Ua(t,!0,this.Ka)}}function Ua(t,n,e){null!=e&&s.clearTimeout(e),t.onload=h,t.onerror=h,t.onreadystatechange=h,n&&window.setTimeout((function(){t&&t.parentNode&&t.parentNode.removeChild(t)}),0)}var Va=0,Fa=1;function qa(t,n){var e="Jsloader error (code #"+t+")";n&&(e+=": "+n),P.call(this,e),this.code=t}function Ka(t){this.f=t}function Ha(n,e,i){if(this.c=n,n=e||{},this.u=n.secureTokenEndpoint||"https://securetoken.googleapis.com/v1/token",this.m=n.secureTokenTimeout||Wa,this.g=ft(n.secureTokenHeaders||Xa),this.h=n.firebaseEndpoint||"https://www.googleapis.com/identitytoolkit/v3/relyingparty/",this.l=n.identityPlatformEndpoint||"https://identitytoolkit.googleapis.com/v2/",this.i=n.firebaseTimeout||Ja,this.a=ft(n.firebaseHeaders||Ya),i&&(this.a["X-Client-Version"]=i,this.g["X-Client-Version"]=i),i="Node"==vi(),!(i=s.XMLHttpRequest||i&&t.INTERNAL.node&&t.INTERNAL.node.XMLHttpRequest)&&!pi())throw new E("internal-error","The XMLHttpRequest compatibility library was not found.");this.f=void 0,pi()?this.f=new aa(self):mi()?this.f=new Ka(i):this.f=new Wo,this.b=null}T(qa,P),T(Ka,Ko),Ka.prototype.a=function(){return new this.f},Ka.prototype.b=function(){return{}};var Ga,Ba="idToken",Wa=new Mi(3e4,6e4),Xa={"Content-Type":"application/x-www-form-urlencoded"},Ja=new Mi(3e4,6e4),Ya={"Content-Type":"application/json"};function za(t,n){n?t.a["X-Firebase-Locale"]=n:delete t.a["X-Firebase-Locale"]}function $a(t,n){n?(t.a["X-Client-Version"]=n,t.g["X-Client-Version"]=n):(delete t.a["X-Client-Version"],delete t.g["X-Client-Version"])}function Za(t,n,e,i,r,o,a){(function(){var t=Ti();return!((t=yi(t)!=bi?null:(t=t.match(/\sChrome\/(\d+)/i))&&2==t.length?parseInt(t[1],10):null)&&30>t)&&(!Bt||!tn||9n;n++){r=0|e[n-15],i=0|e[n-2];var o=(0|e[n-16])+((r>>>7|r<<25)^(r>>>18|r<<14)^r>>>3)|0,a=(0|e[n-7])+((i>>>17|i<<15)^(i>>>19|i<<13)^i>>>10)|0;e[n]=o+a|0}i=0|t.a[0],r=0|t.a[1];var s=0|t.a[2],u=0|t.a[3],c=0|t.a[4],h=0|t.a[5],l=0|t.a[6];for(o=0|t.a[7],n=0;64>n;n++){var f=((i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10))+(i&r^i&s^r&s)|0;a=(o=o+((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))|0)+((a=(a=c&h^~c&l)+(0|$u[n])|0)+(0|e[n])|0)|0,o=l,l=h,h=c,c=u+a|0,u=s,s=r,r=i,i=a+f|0}t.a[0]=t.a[0]+i|0,t.a[1]=t.a[1]+r|0,t.a[2]=t.a[2]+s|0,t.a[3]=t.a[3]+u|0,t.a[4]=t.a[4]+c|0,t.a[5]=t.a[5]+h|0,t.a[6]=t.a[6]+l|0,t.a[7]=t.a[7]+o|0}function sc(t,n,e){void 0===e&&(e=n.length);var i=0,r=t.c;if("string"==typeof n)for(;i=o&&o==(0|o)))throw Error("message must be a byte array");t.f[r++]=o,r==t.b&&(ac(t),r=0)}}t.c=r,t.g+=e}tc.prototype.reset=function(){this.g=this.c=0,this.a=s.Int32Array?new Int32Array(this.h):Y(this.h)};var uc=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function cc(){tc.call(this,8,hc)}T(cc,tc);var hc=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function lc(t,n,e,i,r){this.u=t,this.i=n,this.l=e,this.m=i||null,this.s=r||null,this.h=n+":"+e,this.w=new Qu,this.g=new zu(this.h),this.f=null,this.b=[],this.a=this.c=null}function fc(t){return new E("invalid-cordova-configuration",t)}function dc(t){var n=new cc;sc(n,t),t=[];var e=8*n.g;56>n.c?sc(n,oc,56-n.c):sc(n,oc,n.b-(n.c-56));for(var i=63;56<=i;i--)n.f[i]=255&e,e/=256;for(ac(n),i=e=0;i>r&255;return function(t){return H(t,(function(t){return 1<(t=t.toString(16)).length?t:"0"+t})).join("")}(t)}function pc(t,n){for(var e=0;et.f&&(t.a=t.f),n)}(n,e)).then((function(){return function(){var t=s.document,n=null;return xi()||!t?Sn():new yn((function(e){n=function(){xi()&&(t.removeEventListener("visibilitychange",n,!1),e())},t.addEventListener("visibilitychange",n,!1)})).o((function(e){throw t.removeEventListener("visibilitychange",n,!1),e}))}()})).then((function(){return n.h()})).then((function(){t(n,!0)})).o((function(e){n.i(e)&&t(n,!1)}))}(this,!0)},nh.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)},eh.prototype.v=function(){return{apiKey:this.c.c,refreshToken:this.a,accessToken:this.b&&this.b.toString(),expirationTime:ih(this)}},eh.prototype.getToken=function(t){return t=!!t,this.b&&!this.a?Nn(new E("user-token-expired")):t||!this.b||I()>ih(this)-3e4?this.a?oh(this,{grant_type:"refresh_token",refresh_token:this.a}):Sn(null):Sn({accessToken:this.b.toString(),refreshToken:this.a})},ah.prototype.v=function(){return{lastLoginAt:this.b,createdAt:this.a}},T(uh,me),uh.prototype.va=function(t){this.oa=t,za(this.a,t)},uh.prototype.ja=function(){return this.oa},uh.prototype.Ea=function(){return Y(this.W)},uh.prototype.Ma=function(){this.B.b&&(this.B.stop(),this.B.start())},Hi(uh.prototype,"providerId","firebase"),(n=uh.prototype).reload=function(){var t=this;return Lh(this,wh(this).then((function(){return Sh(t).then((function(){return mh(t)})).then(yh)})))},n.mc=function(t){return this.I(t).then((function(t){return new Hc(t)}))},n.I=function(t){var n=this;return Lh(this,wh(this).then((function(){return n.b.getToken(t)})).then((function(t){if(!t)throw new E("internal-error");return t.accessToken!=n.xa&&(vh(n,t.accessToken),n.dispatchEvent(new Zc("tokenChanged"))),Ah(n,"refreshToken",t.refreshToken),t.accessToken})))},n.Ic=function(t){if(!(t=t.users)||!t.length)throw new E("internal-error");bh(this,{uid:(t=t[0]).localId,displayName:t.displayName,photoURL:t.photoUrl,email:t.email,emailVerified:!!t.emailVerified,phoneNumber:t.phoneNumber,lastLoginAt:t.lastLoginAt,createdAt:t.createdAt,tenantId:t.tenantId});for(var n=function(t){return(t=t.providerUserInfo)&&t.length?H(t,(function(t){return new sh(t.rawId,t.providerId,t.email,t.displayName,t.photoUrl,t.phoneNumber)})):[]}(t),e=0;ethis.s&&(this.s=0),0==this.s&&el(this)&&ph(el(this)),this.removeAuthTokenListener(t)},n.addAuthTokenListener=function(t){var n=this;this.m.push(t),ol(this,this.h.then((function(){n.l||B(n.m,t)&&t(il(n))})))},n.removeAuthTokenListener=function(t){X(this.m,(function(n){return n==t}))},n.delete=function(){this.l=!0;for(var t=0;tr||r>=Rl.length)throw new E("internal-error","Argument validator received an unsupported number of arguments.");e=Rl[r],i=(i?"":e+" argument ")+(n.name?'"'+n.name+'" ':"")+"must be "+n.J+".";break t}i=null}}if(i)throw new E("argument-error",t+" failed: "+i)}(n=wl.prototype).Ga=function(){var t=this;return this.f?this.f:this.f=Sl(this,Sn().then((function(){if(Si()&&!pi())return li();throw new E("operation-not-supported-in-this-environment","RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment.")})).then((function(){return t.m.g(t.w())})).then((function(n){return t.g=n,Js(t.s,Ps,{})})).then((function(n){t.a[El]=n.recaptchaSiteKey})).o((function(n){throw t.f=null,n})))},n.render=function(){Nl(this);var t=this;return Sl(this,this.Ga().then((function(){if(null===t.c){var n=t.u;if(!t.i){var e=on(n);n=function(t,n,e){var i=arguments,r=document,o=String(i[0]),a=i[1];if(!rn&&a&&(a.name||a.type)){if(o=["<",o],a.name&&o.push(' name="',Ft(a.name),'"'),a.type){o.push(' type="',Ft(a.type),'"');var s={};pt(s,a),delete s.type,a=s}o.push(">"),o=o.join("")}return o=ln(r,o),a&&("string"==typeof a?o.className=a:Array.isArray(a)?o.className=a.join(" "):an(o,a)),2{const s=e.reduce((e,s,r)=>e+(t=>{if(t instanceof C)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+t[r+1],t[0]);return new C(s,v)};
+const b="adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,v=Symbol();class C{constructor(t,e){if(e!==v)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `2학기` instead.");this.cssText=t}get styleSheet(){return void 0===this._styleSheet&&(b?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const U=(t,...e)=>{const s=e.reduce((e,s,r)=>e+(t=>{if(t instanceof C)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+t[r+1],t[0]);return new C(s,v)};
/**
* @license
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
diff --git a/web_modules/lit-html.js b/web_modules/lit-html.js
index 2f5f935..7150c4f 100644
--- a/web_modules/lit-html.js
+++ b/web_modules/lit-html.js
@@ -1,2 +1,2 @@
export{h as html,r as render,s as svg}from"./common/lit-html-6bb77aec.js";
-//# sourceMappingURL=lit-html.js.map
+//# sourceMappingURL=lit-1학기.js.map